;定義數(shù)據(jù)存儲單元
AKEY EQU 10H ;鍵值單元
BKEY EQU 11H
CKEY EQU 12H
DKEY EQU 13H
JPSD EQU 14H ;節(jié)拍速度
JPFD EQU 15H ;節(jié)拍分度
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參數(shù)
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;調(diào)節(jié)狀態(tài)
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
;節(jié)拍處理
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
;節(jié)拍時間參數(shù)
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
;調(diào)節(jié)處理
;調(diào)節(jié)狀態(tài)下的顯示處理
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 ;節(jié)拍分度顯示
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
;顯示代碼轉(zhuǎn)換處理
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 ;關(guān)顯示
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編寫生成,一直出現(xiàn)錯誤,而且不止一個。
程序是用來控制節(jié)拍器的,
|