单片机电子琴汇编程序

用汇编语言编写程序,通过按键来弹凑

第1个回答  2013-09-17
KEYBUF EQU 30H
STH0 EQU 31H
STL0 EQU 32H
TEMP EQU 33H
ORG 0000H
LJMP START

ORG 000BH
LJMP INT_T0

ORG 0030H
START:
MOV TMOD,#01H
SETB ET0
SETB EA
WAIT:
MOV P3,#0FFH
CLR p3.5
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY2
LCALL DELY10MS
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY2
MOV A,p3
ANL A,#1FH
CJNE A,#1EH,NK5
MOV KEYBUF,#4
LJMP DK2
NK5: CJNE A,#0fH,NK6
MOV KEYBUF,#5
LJMP DK2
NK6: CJNE A,#1BH,NK7
MOV KEYBUF,#6
LJMP DK2
NK7: CJNE A,#17H,NK8
MOV KEYBUF,#7
LJMP DK2
NK8: NOP
DK2:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,KEYBUF
MOV B,#2
MUL AB
MOV TEMP,A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV STH0,A
MOV TH0,A
INC TEMP
MOV A,TEMP
MOVC A,@A+DPTR
MOV STL0,A
MOV TL0,A
SETB TR0
DK2A: MOV A,p3
ANL A,#1FH
XRL A,#1FH
JNZ DK2A
CLR TR0
NOKEY2:
MOV p3,#0FFH
CLR p3.6
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY3
LCALL DELY10MS
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY3
MOV A,p3
ANL A,#1FH
CJNE A,#1EH,NK9
MOV KEYBUF,#8
LJMP DK3
NK9: CJNE A,#0fH,NK10
MOV KEYBUF,#9
LJMP DK3
NK10: CJNE A,#1BH,NK11
MOV KEYBUF,#10
LJMP DK3
NK11: CJNE A,#17H,NK12
MOV KEYBUF,#11
LJMP DK3
NK12: NOP
DK3:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,KEYBUF
MOV B,#2
MUL AB
MOV TEMP,A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV STH0,A
MOV TH0,A
INC TEMP
MOV A,TEMP
MOVC A,@A+DPTR
MOV STL0,A
MOV TL0,A
SETB TR0
DK3A: MOV A,p3
ANL A,#1FH
XRL A,#1FH
JNZ DK3A
CLR TR0
NOKEY3:
MOV p3,#0FFH
CLR p3.7
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY4
LCALL DELY10MS
MOV A,p3
ANL A,#1FH
XRL A,#1FH
JZ NOKEY4
MOV A,p3
ANL A,#1FH
CJNE A,#1EH,NK13
MOV KEYBUF,#12
LJMP DK4
NK13: CJNE A,#0fH,NK14
MOV KEYBUF,#13
LJMP DK4
NK14: CJNE A,#1BH,NK15
MOV KEYBUF,#14
LJMP DK4
NK15: CJNE A,#17H,NK16
MOV KEYBUF,#15
LJMP DK4
NK16: NOP
DK4:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,KEYBUF
MOV B,#2
MUL AB
MOV TEMP,A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV STH0,A
MOV TH0,A
INC TEMP
MOV A,TEMP
MOVC A,@A+DPTR
MOV STL0,A
MOV TL0,A
SETB TR0
DK4A: MOV A,p3
ANL A,#1FH
XRL A,#1FH
JNZ DK4A
CLR TR0
NOKEY4:
LJMP WAIT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
MOV TH0,STH0
MOV TL0,STL0
CPL P2.0
RETI
TABLE: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
DB 80h,90h,88h,83h,0c6h,0a1h,86h,8eh
TABLE1: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
END
相似回答