;定义数据存储单元
AKEY EQU 10H ;键值单元
BKEY EQU 11H
CKEY EQU 12H
DKEY EQU 13H
JPSD EQU 14H ;节拍速度
JPFD EQU 15H ;节拍分度
XC1 EQU 27H ;显示缓存
XC2 EQU 28H
XC3 EQU 29H
XC4 EQU 2AH
LED1 EQU 2BH ;显示代码
LED2 EQU 2CH
LED3 EQU 2DH
LED4 EQU 2EH
GEWEI EQU 30H ;个位
SIWEI EQU 31H ;十位
BEIWEI EQU 32H ;百位
KEYMA EQU 33H
JPBS EQU 34H
PAISU EQU 35H ;拍速
SS EQU 36H
XLL EQU P1.0 ;声音脚输出
;主程序
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP TDISP
;初始化
ORG 0030H
MAIN:MOV P0,#0
MOV SP,#60H
MOV 0ah,#1
MOV JPSD,#72
MOV JPFD,#3
MOV PAISU,#1
MOV AKEY,#0
MOV BKEY,#1
MOV P1,#0F0H
MOV IE,#8AH
MOV TMOD,#11H
MOV TH1,#0EAH ;4ms参数
MOV TL1,#0F0H
SET TR1
MOV P3,#0F0H
;键盘扫描处理
MKEY:LCALL KEY
JZ MLOOP
LCALL D10MS
LCALL KEY
JZ MLOOP
KPCL:
CJNE A,#10H,MLOOP;A键显示代码
MOV R3,AKEY
CJNE R3,#1,KPINC;其他键不处理
MOV AKEY,#00
LJMP KEY11
KPINC:INC AKEY
KEY11:LCALL KEY
JNZ KEY11
LCALL D10MS
JNZ KEY11
DISAJ: MOV XC1,,10H;显示功能代码2秒
MOV XC2,#10H
MOV XC3,#10H
MOV XC4,AKEY
LCALL DISPLAY
MOV 5DH,#200;延迟2秒
MD50MS:LACLL D10MS
DJNZ 5DH,MD50MS
MLOOP:MOV A,AKEY
MJIEP: CJNE A,#1,MDISPLAY;调节状态
LCALL TIAOJ
MDISPLAY:
LCALL DISPLAY
MD101:LJMP MKEY
;读键盘
KEY: MOV A,P1
CPL A
ANL A,#0F0H
MOV KEYMA,A
RET
;延迟10MS
D10MS: MOV 5FH,#10
DLP1: MOV 5EH,#200
DLP2: NOP
NOP
NOP
DJNZ 5EH,DLP2
DJNZ 5FH,DLP1
RET
;节拍处理
JIEP: MOV XC4,#2
MOV XC3,#10H
MOV A,JPSD
SUBB A,#30
MOV DPTR,#JPTAB
MOVC A,@A+DPTR
MOV JPBS,A
MOV A,JPFD
CJNE A,PAISU,PAIINC
MOV PAISU,#1
MOV XC1,PAISU
MOV XC2,PAISU
LCALL DISPLAY
MOV SS,#33 ;高音0.1秒
SLOP1: SETB XLL
LCALL D5US
LCALL D5US
LCALL D5US
CLR XLL
LCALL D5US
LCALL D5US
LCALL D5US
PAIING: INC PAISU
MOV XC1,PAISU
MOV XC2,PAISU
LCALL DISPLAY
SOUNDL: MOV SS,#49 ;低音0.1秒
SLOP: SETB XLL
LCALL D5US
LCALL D5US
CLR XLL
LCALL D5US
LCALL D5US
DJNZ SS,SLOP
JP100: LCALL D10MS
DJNZ JPBS,JP100
RET
;节拍时间参数
JPTAB;
DB 190,184,178,182,166,161,157
DB 152,148,144,140,136,133,130
DB 126,123,120,118,115,112,110
DB 108,105,103,101,99,97,95,93,92
DB 90,88,87,85,84,82,81,80,78,77,
DB 76,75,73,72,71,70,69,68,67,66
DB 65,64,63,62,61,61,60,59,58,57
DB 57,56,55,55,54,53,53,52,51,51
DB 50,49,49,48,48,47,47,46,46,45
DB 45,44,44,43,43,42,42,41,41,40
DB 40,40,39,39,38,38,38,37,37,37
DB 36,36,35,35,35,34,34,34,33,33
DB 33,33,32,32,32,31,31,31,31,30
DB 30,30,29,29,29,29,28,28,28,28
DB 28,27,27,27,27,26,26,26,26,26
DB 25,25,25,25,24,24,24,24,24,23
DB 23,20,17,15,14,10,08,07,05,240
;延迟500us
D5US: MOV 38H,#100
D5S: NOP
NOP
NOP
DJNZ 38H,D5S
RET
;调节处理
;调节状态下的显示处理
TIAOJ: MOV R4,BKEY
CJNE R4,#1,TJ2
MOV A,JPSD
LCALL SUZHI
MOV XC4,BKEY
MOV XC3,BEIWEI
MOV XC2,SIWEI
MOV XC1,GEWEI
LJMP TJEND
TJ2:CJNE R4,#2,TJEND ;节拍分度显示
MOV XC4,#2
MOV XC3,#10H
MOV XC2,#10H
MOV XC1,JPFD
TJEND: NOP
;A,B,C,D键盘的处理
TJ29; LCALL KEY
JZ TJ01
LCALL D10MS
LCALL KEY
JZ TJ01
LJMP TJ00
TJ01: LJMP TJLOOP
TJ00: MOV R5,A;键盘值暂存R5中
TJKEY11: LCALL KEY
JNZ TJKEY11
LCALL D10MS
JNZ TJKEY11
;A键处理
CJNE R5,#10H,TJBJ
LNC AKEY
LJMP DISAJ
;B键处理
TJBJ: CJNE R5,#20H,TJCJ
MOV A,BKEY
CJNE A,#2,BJINC
MOV BKEY,#01
LJMP TJLOOP
BJINC: INC BKEY
LJMP TJLOOP
;c键处理 增加
TJCJ: CJNE R5,#40H,TJDJ10
LJMP CJCL
TJDJ10:LJMP TJDJ
CJCL: MOV R6,BKEY
CJNE R6,#1,TJ30
MOV A,#190
CJNE A,JPSD,JPSDINC
MOV JPSD,#30
LJMP TJENDD
JPSDINC: INC JPSD
LJMP TJENDD
TJ30: CJNE R6,#2,TJEND
MOV A,#9
CJNE A,JPFD,JPFDINC
MOV JPFD,#1
LJMP TJENDD
JPFDINC: INC JPFD
LJMP TJENDD
;D键处理 减少
TJDJ: CJNE R5,#80H,LJDJ10
LJMP LCJCL
LJDJ10:LJMP TJENDD
LCJCL: MOV R6,BKEY
CJNE R6,#1,LTJ30
MOV A,#30
CJNE A,JPSD,LJPSDINC
MOV JPSD,#190
LJMP TJENDD
LJPSDINC:DEC JPSD
LJMP TJEND
LTJ30: CJNE R6,#2,TJENDD
MOV A,#1
CJNE A,JPFD,LJPFDINC
MOV JPFD,#9
LJMP TJENDD
LJPFDINC:DEC JPFD
LJMP TJENDD
TJENDD:RET
MMOV3: MOV XC3,#10H
MOV XC2,SIWEI
MOV XC1,GEWEI
RET
;显示代码转换处理
DISPLAY: MOV R0,#XC1
MOV R1,#LED1
MOV R7,#4
MOV DPTR,#TCODE
DISP1: MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R7,DISP1
MOV LED3,A
LJMP DI
SNEXT
DIS00: MOV A,LED3
CLR ACC.7
MOV LED3,A
TJLOOP: NOP
DISNEXT: RET
;共阳led代码
TCODE:
DB C0H,0F9H,0A4H,0B0H,99H
DB 92H,90H,88H,83H,82H,0F8H
DB 80H,0A7H,0A1H,86H,8EH,0FFH
;十六进制化成十进制处理
SUZHI: MOV B,#100
DIV AB
JNZ SUZI00
MOV BEIWEI,#10H
LJMP SUZI01
SUZI00: MOV BEIWEI,A
SUZI01: MOV A,B
MOV B,#10
DIV AB
MOV SIWEI,A
MOV A,B
MOV GEWEI,A
RET
;T1中断处理,显示输出
TDISP: PUSH A
PUSH PSW
MOV TH1,#0ECH
MOV TL1,#90H
SETB RS0
MOV P0,#0FFH ;关显示
CJNE R2,#4,R2INC
MOV R2,#1
LJMP TD11
R2INC: INC R2
TD11: CJNE R2,#1,TD12
CLR P2.5
MOV P0,LED1
SETB P2.8
LJMP TDRET
TD12: CJNE R2,#2,TD13
CLR P2.8
MOV P0,LED2
SETB P2.7
LJMP TDRET
TD13; CJNE R2,#3,TD14
CLR P2.7
MOV P0,LED3
SETB P2.6
LJMP TDRET
TD14; CJNE R2,#4,TDRET
CLR P2.6
MOV P0,LED4
SETB P2.5
TDRET: CLR RS0
POP PSW
POP A
RET
为什么我用keil uvision3编写生成,一直出现错误,而且不止一个。
程序是用来控制节拍器的,
|