;定义数据存储单元 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编写生成,一直出现错误,而且不止一个。
程序是用来控制节拍器的,
有没有高手帮我修改一下。。
你得告诉人家出现什么错误?----------编译器上有提示的啊!
定义RAM有没有试一下使用 DATA ?
例如:
AKEY DATA 10H ;键值单元
BKEY DATA 11H
还有,你的主循环程序在哪里到哪里?------单片机运行是一个死循环.好像没有看到哦?
示例:
1.清零 RAM ,初始化端口,定时器,等等.
2.主循环:
B_LOOP:
CALL B00 ;例如按键
CALL B01 ;例如显示
;;; ......更多调用
JMP B_LOOP ;循环回去主循环,不能回去初始化那里!!!
;====================================
;//被调用的子程序
B_00:
......
RET
B_01:
........
RET
;==================================
建议把你的程序整理一下.
仅供参考!
这个问题,我已经解决了,同样谢谢你!!
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |