📄 电子琴.asm
字号:
ORG 0000H
LJMP MAI
ORG 000BH
LJMP TIM
MAI: CLR TR0 ;;关闭上一次定时,进入下一次按键判断
MOV TMOD, #01H
MOV IE, #82H
MOV A, P1
MOV 30H, A ;;保存键盘状态值
LCALL D10MS ;;延迟10ms消除抖动
MOV A , P1 ;;再读键盘状态
CJNE A, 30H, MAI ;;两次结果不同,是抖动引起,转MAI
JNB P2.0, N1
JNB P2.1, N2
JNB P2.2, N3
JNB P2.3, N4
JNB P2.4, N5
JNB P0.5, N6
N6: LJMP LA ;;JNB的跳转范围限定在256B,所以用LJMP跳转
JNB P0.6, N7
N7: LJMP XI
JNB P0.7, N8
N8: LJMP DO
N1: MOV DPTR, #TAB ;;设定音阶1的定时时间
MOV A, #00H
MOVC A, @A+DPTR
MOV R1, A
MOV A, #01H
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0 ,R0
SETB TR0
RE1: JB P0.0, MAI ; ;判断琴键1是否释放
AJMP RE1
N2: MOV DPTR, #TAB ;;设定音阶2的定时时间
MOV A, #02H
MOVC A, @A+DPTR
MOV R1, A
MOV A, #03H
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE2: JB P0.1, MAI
AJMP RE2
N3: MOV DPTR, #TAB ; ;设定音阶3的定时时间
MOV A, #04H
MOVC A, @A+DPTR
MOV R1, A
MOV A, #05H
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE3: JB P0.2, MAI
AJMP RE3
N4: MOV DPTR, #TAB ; ;设定音阶4的定时时间
MOV A, #06H
MOVC A, @A+DPTR
MOV R1, A
MOV A, #07H
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE4: JB P0.3, A1
AJMP RE4
A1: LJMP MAI
N5: MOV DPTR, #TAB ;;设定音阶5的定时时间
MOV A, #08H
MOVC A, @A+DPTR
MOV R1, A
MOV A, #09H
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE5: JB P0.4, A2
AJMP RE5
A2: LJMP MAI
LA: MOV DPTR, #TAB ; ;设定音阶6的定时时间
MOV A, #0AH
MOVC A, @A+DPTR
MOV R1, A
MOV A, #0BH
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE6: JB P0.5, A3
AJMP RE6
A3: LJMP MAI
XI : MOV DPTR, #TAB ; ;设定音阶7的定时时间
MOV A, #0CH
MOVC A, @A+DPTR
MOV R1, A
MOV A, #0DH
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE7: JB P0.6,A4
AJMP RE7
A4: LJMP MAI
DO: MOV DPTR, #TAB ;;设定音阶7的定时时间
MOV A, #0EH
MOVC A, @A+DPTR
MOV R1, A
MOV A, #0FH
MOVC A, @A+DPTR
MOV R0, A
MOV TH0, R1
MOV TL0, R0
SETB TR0
RE8: JB P0.7,A5
A5: LJMP MAI
TIM: MOV TH0, R1 ; ;重装定时器初值
MOV TL0, R0
CPL P1.0
RETI ; ;中断返回
D10MS:MOV R1, #100 ; ;延时10ms子程序
D1: MOV R2, #98
NOP
D2: DJNZ R2, D2
DJNZ R1, D1
RET
TAB: DB 0FEH, 25H
DB 0FEH, 57H
DB 0FEH, 84H
DB 0FEH, 98H
DB 0FEH, 0C0H
DB 0FEH, 0E3H
DB 0FFH, 01H
DB 0EFH, 07H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -