单片机实验编写交通灯,需要用2个数码管倒计时显示红灯黄灯绿灯的剩余时间。以下是我的程序ORG 0000H AJMP MAIN ORG 000BH AJMP TIME ORG 0300H MAIN: MOV A,#3H ;设置8155状态 MOV DPTR,#7100H MOVX @DPTR,A ;初始化A地址 MOV 20H,#00H ;微秒初始化 MOV 21H,#00H ;秒初始化 MOV 22H,#00H ;秒绿初始化 MOV 23H,#00H ;秒黄初始化 MOV 24H,#00H ;秒红初始化 MOV R1,#00H MOV R3,#00H MOV R4,#00H MOV IP,#02H ;IP初始化 MOV IE,#82H ;IE初始化 MOV TMOD,#01H ;选定时器工作方式1 SETB TR0 ;启动定时0 MOV SP,#40H ;重设堆栈指针 NEXT: LCALL DISP ;调用显示子程序 JZ NEXT ;累加器判0转移 SJMP NEXT ;重新循环 NOP NOP NOP ;定时中断处理程序: TIME: PUSH ACC ;保护现场 PUSH PSW MOV TL0,#0B4H ;赋定时初值 MOV TH0,#3CH INC 20H ; ;微秒自累加 MOV A,20H ;微秒输入A CJNE A,#20,RET0I;如果 A=20,则表示一秒钟时间到了,不转移,到下一步清零微秒,否则跳转 MOV 20H,#00H ;一秒钟时间到 ,微秒清零 MOV R1,22H ;秒绿输入A INC R1 ;秒加1 MOV A,R1 DA A ;十进制调整 MOV R1,A MOV 22H,R1 ;R1时间写入22H保存 MOV R3,23H ;秒黄输入A INC R3 ;秒加1 MOV A,R3 DA A MOV R3,A MOV 23H,R3 MOV R4,24H ;秒红输入A INC R4 ;秒加1 MOV A,R4 DA A MOV R4,A MOV 24H,R4 CJNE R1,#25H,RETI1 ;如果R1=25,则不转移,表示黄灯时间已经到了,到下一步换成红灯,否则跳转 MOV 22H,#24H ;保持跳转的条件 SETB P1.2 ;熄灭绿灯 CJNE R3,#30H,RETI2 ;如果R3=30,则不转移,表示黄灯时间已经到了,到下一步换成红灯,否则跳转 MOV 23H,#29H SETB P1.1 ;熄灭黄灯 CJNE R4,#60H,RETI3 ;如果R4=60,则不转移,表示红灯时间已经到了,到下一步换成绿灯(清零),否则跳转 SETB P1.3; 熄灭红灯 MOV 21H,#00H ;一个循环时间到,清零 MOV 22H,#00H MOV 23H,#00H MOV 24H,#00H RET0I: POP PSW ;恢复现场 POP ACC RETI ;中断返回 NOP NOP RETI1: MOV A,#25H SUBB A,22H ;25+22H内时间,实现绿灯倒计时 MOV 50H,A POP PSW ;恢复现场 POP ACC SETB P1.2 CPL P1.2 RETI ;中断返回RETI2: MOV A,#30H SUBB A,23H ;30-23H内的时间,实现黄灯倒计时 MOV 50H,A POP PSW ;恢复现场 POP ACC CPL P1.1 RETI ;中断返回RETI3: MOV A,#60H SUBB A,24H ;60-24H内时间,实现红灯倒计时 MOV 50H,A POP PSW ;恢复现场 POP ACC SETB P1.3 CPL P1.3 RETI ;中断返回DISP: MOV A,50H ;50H(秒)写入A MOV B,#10H ;B中写入10 DIV AB ;A除以B,A=秒的十位,B=秒的个位 MOV 79H,B ;秒个位输入最低位数码管 MOV 7AH,A ;秒十位输入次低位数码管 MOV 7BH,#00H MOV 7CH,#00H MOV R1,#79H ;缓冲区首地址 MOV R2,#10H ;用于位选 MOV A,R2DISP1: MOV DPTR,#7101H ;位选 MOVX @DPTR,A MOV A,@R1 MOV DPTR,#DBSEG MOVC A,@A+DPTR ;取段码 MOV DPTR,#7102H MOVX @DPTR,A ;输出显示 LCALL DELAY ;延时 INC R1 MOV A,R2 JB ACC.7,EXT ;当4个数码管都点亮一遍时,结束 RL A MOV R2,A JMP DISP1 EXT: RETDELAY: MOV R6,#10HDELA1: MOV R5,#20H DJNZ R5,$ DJNZ R6,DELA1 RETDBSEG: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH END 现在下电路板测试发现,红黄绿三个LED灯很好的实现了交通灯的功能,但是在倒计时方面,倒计时个位数显示数码管总是乱码,十位数正常。。。。请问该如何修改
推荐回答
还没有选出推荐答案,请稍候访问或查看其他回答!