如何用唐都试验箱上的8255和8254制作电子琴?

急需!带图和程序!
谢谢》。。。。。。。。。
用C语言也行呀。 用唐都试验箱上的4*4按键实现的电子琴。
急需!!火来呀!!!

第1个回答  2008-12-30
BUZZ EQU P3.3
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0100H
MAIN:
MOV SP,#60H ;初始化堆栈指针
MOV 30H,#00 ;定时器初值清零
MOV 31H,#00
MOV P1,#0FFH ;设置P1口为输入模式
MOV TMOD,#01H ;设置定时器0为工作模式1
SETB ET0 ;开定时器0中断
SETB EA ;开总中断
CLR TR0 ;关闭定时器0
START:
MOV R0,P1
CJNE R0,#0FFH,KEY1 ;键盘扫描
CLR TR0
SJMP START
KEY1:
CJNE R0,#0FEH,KEY2 ;K1键按下
MOV 30H,#0FBH ;设置音阶1
MOV 31H,#0E9H
LJMP SET_TIMER
KEY2:
CJNE R0,#0FDH,KEY3 ;K2键按下
MOV 30H,#0FCH ;设置音阶2
MOV 31H,#5CH
LJMP SET_TIMER
KEY3:
CJNE R0,#0FBH,KEY4 ;K3键按下
MOV 30H,#0FCH ;设置音阶3
MOV 31H,#0C1H
LJMP SET_TIMER
KEY4:
CJNE R0,#0F7H,KEY5 ;K4键按下
MOV 30H,#0FCH ;设置音阶4
MOV 31H,#0EFH
LJMP SET_TIMER
KEY5:
CJNE R0,#0EFH,KEY6 ;K5键按下
MOV 30H,#0FDH ;设置音阶5
MOV 31H,#045H
LJMP SET_TIMER
KEY6:
CJNE R0,#0DFH,KEY7 ;K6键按下
MOV 30H,#0FDH ;设置音阶6
MOV 31H,#92H
LJMP SET_TIMER
KEY7:
CJNE R0,#0BFH,NOKEY ;K7键按下
MOV 30H,#0FDH ;设置音阶7
MOV 31H,#0D6H
SET_TIMER:
SETB TR0 ;发声
SJMP START
NOKEY:
CLR TR0 ;无键按下
SJMP START
INT_T0: ;T0中断服务程序
MOV TH0,30H ;定时器赋初值
MOV TL0,31H
CPL BUZZ ;输出方波
RETI
END
相似回答