2.1.4 流水灯电路
流水灯电路直接挂接在单片机的P2口上,采用共阳接法。
2.1.5 数码管电路
数码管的段控口接在单片机的P0口上,位控接在单片机的P1口上。
6
2.2 系统电路图
7
2.3 软件设计
1.工作流程图
开始 N 黄灯亮 时间送显 现场保护 1秒到了? 当前红灯? Y 红灯亮 黄灯灭,绿灯亮 当前时间—N 时间送显 Y 5秒到了? N 3s>? N 时间送显 红灯亮 Y 红灯灭,绿灯亮 3秒到了? 恢复中断 时间送显 Y N 3秒到了? N 时间送显 Y 10秒到了? 中断程序流程图 主程序流程图
3 课题软件系统设计
3.1 单片机资源使用情况
⑴、P1口为数码管管的位选端 ⑵、P0口用作数码管的段选端 ⑶、P2口用作二极管控制端 ⑷、P3.2口线作为键盘输入端
既在AT89S51的P2口用来接三个发光二极管的阴极,控制其亮与灭,P0口和P1口外接由8个LED数码管构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P1口作LED的位控输出线。
8
3.2 软件各模块简要介绍
软件的设计是由汇编语言来编写的,分成各个模块分别为主程序、显示程序、中断程序、延时程序和数码管显示程序,以下给予相应的介绍。 3.2.1 主程序
主程序是程序的入口,在主程序中会一直调用显示程序和延时程序,当没有键按下时,就不会进到中断程序,当有键按下时,就会按操作执行中断程序。 3.2.2 显示程序
显示程序主要完成数码管的动态显示,将相应的段控码送往P0口,相应的位控码送往P1口,实现显示需要的字符信息。
3.2.3 中断程序
中断程序我选用的是外部中断INT0入口,当有行人按键按下时,就会进到中断程序,如果行人按钮时为绿灯状态,则行人通过后继续未显示完的绿灯,若为红灯状态,则亮至行人时间与剩余时间的最大值后转换为红灯。 3.2.4 延时程序
主程序和中断程序中将会调用到延时程序,是用来倒计时的时候延时时间的作用。
3.2.5 数码管显示程序
数码管显示程序是在延时里面调用的子程序,它将所有延时程序里的时间以倒计时的形式显示出来,我将0,1,2,3,4,5,6,7,8,9这些数字显示的十六进制数写进表里,通过查表的形式来实现倒计时。
3.3 程序清单
/***************主程序****************************************/ ORG 0000H AJMP MAIN ORG 0003H AJMP KEY ORG 0030H MAIN: CLR IT0; JB P3.2,START
SETB EX0; SETB EA;
9
START: MOV P2,#0FFH CLR P2.2
; 黄灯亮 1s
MOV 30H,#10 LCALL DELAY SETB P2.2
CLR P2.4; 红灯亮 5s
MOV 30H,#50
LCALL DELAY SETB P2.4
CLR P2.3; 绿灯亮 10s
MOV 30H,#100
LCALL DELAY SETB P2.3 LJMP START
/***中断程序*****************************/ KEY:
PUSH PSW
PUSH ACC
JB P2.3,NEX;P2.3不为零,即为绿灯熄,则跳转至NEX JNB P2.3,L; P2.3为零,即为绿灯亮,则跳转至L CLR P2.3 POP ACC POP PSW RETI
NEX:
MOV A,R5 ;A为中断时灯已亮时间
SUBB A,#3O; 若差大于零,则表示剩余时间小于三秒,反之,大于三秒 JNB ACC.7,L
POP ACC POP PSW
10