关总中断 保存数据 开启相应信号灯 纵向通行 显示状态 延时到? 是 恢复数据 RET
紧急中断程序流程图5-2
5.3程序清单 程序如下:
ORG 0000H
LJMP MAIN ORG 001BH ;定时器T1中断入口 LJMP KK
ORG 0100H ;主程序入口 MAIN:
MOV SP,#60H
MOV TMOD,#10H ;定时器T1工作在方式1 MOV TH1,#9EH ;给定时器T1赋初值 MOV TL1,#58H SETB EA ;开中断系统总开关 SETB ET1 ;开定时器T1中断开关 SETB TR1 ;启动定时器T1 HERE:
16
MOV 88H,#15H ;设置中断循环次数 MOV 33H,#10H ;设置倒计时显示数值 MOV P1,#0F3H ;使交通灯东西绿,南北红 MOV R7,#0AH MM:
LCALL DISP MOV A,P3 ;键盘扫描 CJNE A,#0FFH, READKEY DJNZ R7, MM MOV P1,#0E1H ;交通灯东西绿,南北红同时加亮黄灯 MOV 20H,#02H NN:
MOV A,P3
CJNE A,#0FFH,READKEY SETB P1.1 ;黄灯进行闪烁5s SETB P1.4 LCALL DISP CLR P1.1 CLR P1.4 LCALL DISP ;调显示子程序 DJNZ 20H,NN SETB P1.1 SETB P1.4 LCALL DISP MOV P1,#0DEH ;交通灯南北绿,东西红 MOV R7,#0AH PP:
LCALL DISP MOV A,P3
CJNE A,#0FFH,READKEY DJNZ R7,PP
MOV P1,#0CCH ;交通灯南北绿,东西红同时加亮黄灯 MOV 20H,#02H QQ:
MOV A,P3 ;扫描P3口 CJNE A,#0FFH,READKEY SETB P1.1 SETB P1.4 LCALL DISP CLR P1.1 CLR P1.4 LCALL DISP CLR P1.1 CLR P1.4
17
LCALL DISP DJNZ 20H,QQ SETB P1.1 SETB P1.4 LCALL QW QW:
SJMP HERE RET
DELAY:MOV R1, #0AH DELAY0:MOV R2, #0C8H DELAY1:MOV R3, #0F8H NOP
DELAY2:DJNZ R3, DELAY2 DJNZ R2, DELAY1 DJNZ R1, DELAY0 RET
READKEY:
MOV A,#0FFH MOV P3,A MOV A,P3
JNB ACC.0, K1 ;判断K1键是否按下 JNB ACC.1, K2 ;判断K2键是否按下 JNB ACC.6, K3 ;判断K3键是否按下 RET K1:
MOV P0,#0FFH ;判断倒计时显示装置 MOV P2,#0FFH LCALL XX LCALL YY
SJMP READKEY K2:
MOV P0,#0FFH ;关断倒计时显示装置 MOV P2,#0FFH LCALL XX LCALL YY1
SJMP READKEY K3:
MOV P0,#0FFH ;关断倒计时显示装置 MOV P2,#0FFH LCALL XX LCALL YY2
SJMP READKEY XX:
18
MOV 20H,#05H LCALL BB RET BB:
SETB P1.1 SETB P1.4
LCALL DELAY CLR P1.1 CLR P1.4
LCALL DELAY DJNZ 20H,BB RET YY:
MOV P1,#0F6H ;四个路口均变为红灯 MOV A,#0FFH MOV P3,A MOV A,P3 JNB ACC.0,YY ;判断K2键是否仍然按下 LCALL QW YY1:
MOV P1,#0F3H ;东西方向亮绿灯,南北方向亮红灯 MOV A,#0FFH MOV P3,A MOV A,P3
JNB ACC.1,YY1 ;判断K2键是否仍然按下 LCALL QW YY2:
MOV P1,#0DEH ;南北方向亮绿灯,东西方向亮红灯 MOV A,#0FFH MOV P3,A MOV A,P3
JNB ACC.6,YY2 ;判断K3键是否仍然按下 LCALL QW RET
KK:
DEC 88H
MOV A, 88H CJNE A, #01H,BN MOV 88H, #15H LCALL DISP BN:
MOV TH1,#9EH ;重新给定时器T1赋初值 MOV TL1,#58H
19
RETI
DISP:
DEC 33H MOV A,33H
CJNE A,#01H,DIR1 MOV 33H,#10H DIR1:
MOV B,#0AH DIV AB ;提取出倒计时数值的十位和个位数 MOV DPTR,#TAB ;字形表的入口地址
MOVC A,@A+DPTR ;查表获取十位数的字型码 MOV 30H,A MOV A,B
MOVC A,@A+DPTR ;查表获取个位数的字型码 MOV 31H,A MOV A,30H MOV P0,A ;将十位数字型码送到P0口 MOV A, 31H MOV P2,A ;将十位数字型码送到P2口 LCALL DELAY RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END
20
心得体会
在这次课程设计中,我有很深刻的体会,我学习到的知识有很多,在此提高了我获取知识的能力和解决问题的能力,同时也提高了自己群体意识和团队精神。选取了题目后和同学一起从图书馆借阅一些参考资料,和同学一起认真地挑选每一个方案以及讨论方案的可行性,确定好方案。接下来到塞格电子城购买作品所需的元件,画电路草图,这都是一个非常有必要的过程,因为后面电路板的排线安装以及焊接才能更好的进行,因为在电路板上布线不像在protel软件上一样,实物焊接时会出现较多的跳线问题。其实在这里的每一步都得一步一步的进行,如果是不够认真处理,也有可能导致作品的失败,而最后会难以检查。编程调试,在整个程序的编写过程中,研究每个子程序是否好使,我是通过Keil C和proteus两个软件来实现的。接下来就是硬件连接调试。在调试的时候虽然有一些问题,但在老师和同学的帮助下,都基本上得到了解决。在讨论每个问题的我们都是非常的投入。这整一系列的制作过程都充实了我。在这个课题中也了解到了很多不同电路的工作原理,同时也可提高自己对实物制作的水平,在制作的过程中有很多容易被忽略或被忽视的问题,都是成功与否的关键,需要我们细心去品味,只有自己亲身尝试过才会有更加深刻的了解,了解那一些方法,收获从这一过程中产生的经验和感触,将学到的知识应用到实践中去后。还有,感谢老师及所有本专业同学们给我的指导和分析,谢谢你们的建议。谢谢!
实验参考文献:
江力主编《单片机原理与应用技术》清华大学出版社2006年第1版 李萍主编《AT89C51单片机原理开发与实例应用》中国电力出版社2008年第1版
林高主编《单片机应用实例开发》西安电子科技大学出版社 2009年第1版
黄智伟主编《单片机课程设计指导》北京航空航天大学出版社2007年第1版
21