一、? 系统功能要求:
1. 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。
时间方向 控制要求
白天 东西 绿灯 黄灯 红灯 南北 红灯 绿灯 黄灯
晚上 东西 黄灯 南北 红灯
2.总体设计方案现在流行的一种设计为两主干线相交的十字路。本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。
二、???????? 总体设计方案提示:
1.假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态。
2.东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态。
3.南北绿灯通车,东西红灯。过一段时间转状态。
4.南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。
三.硬件设计
电路原理图如下:
?
四、软件设计
1、?? 流程图
?
2、程序设计
??????? ORG 0000H
??????? MOV P0,#00H???????????????? ;确保P0为低电位
??????? lJMP MAIN0
??????? ORG 0030H
MAIN0: MOV 30H,#08H
??????? MOV R6,#00H
??????? MOV R7,#00H
??????? MOV DPTR,#TABLE???????????? ;取数码管的译码
??????? MOV TMOD,#01H?????????????? ;设计定时方式及时间
??????? MOV TL0,#0CDH
??????? MOV TH0,#0BH
??????? SETB TR0
??????? MOV IE,#00H
?MAIN: MOV P1,#0F3H??????????????? ;南北绿灯,东西红灯
??????? MOV R6,#1EH???????????????? ;红灯30s倒计时
??????? MOV R7,#19H???????????????? ;绿灯25s倒计时
? MAIN1:CALL DELAY????????????????? ;1S延时子程序
??????? JB P0.1,REL1??????????????? ;判断是否有东西方向按钮按下
??????? CJNE R7,#00H,MAIN1????????? ;判断绿灯25s是否倒计完
??????? MOV P1,#0F5H??????????????? ;南北黄灯,东西红灯
? MAIN2:CALL DELAY
??????? MOV R7,#00H???????????????? ;红灯继续倒计时,黄灯闪烁,保持0s
??????? CPL P1.1??????????????????? ;黄灯闪烁
??????? CJNE R6,#00H,MAIN2????????? ;判断红灯是否倒计时完
??????? MOV P1,#0DEH??????????????? ;南北红灯,东西绿灯
??????? MOV R7,#1EH
??????? MOV R6,#19H
? MAIN3:CALL DELAY
??????? JB P0.0,REL2
??????? CJNE R6,#00H,MAIN3
??????? MOV P1,#0EEH
? MAIN4:CALL DELAY
??????? MOV R6,#00H
??????? CPL P1.4
??????? CJNE R7,#00H,MAIN4
??????? JMP MAIN
?? REL1:MOV P1,#0F5H??????????????? ;东西方向按钮按下,南北方向强制由绿灯变成黄灯警告
??????? MOV R6,#05H
??????? MOV R7,#00H????????????????
??????? JMP MAIN2??????????????????
?? REL2:MOV P1,#0EEH??????????????? ;南北方向按钮按下,东西方向强制由绿灯变成黄灯警告
??????? MOV R7,#05H
??????? MOV R6,#00H
??????? JMP MAIN4
? ;1s延时子程序
? DELAY:MOV A,R6??????????????????? ;进行南北方向倒计时时间的十进制调整
??????? MOV B,#0AH
??????? DIV AB
??????? MOVC A,@A+DPTR????????????? ;找寻相应的数码管代码
??????? MOV P2,#01H
??????? MOV P3,A??????????????????? ;输出个位
??????? MOV R4,#4?????????????????? ;降低动态显示频率
? LOOP2:MOV R3,#125
? LOOP3:DJNZ R3,LOOP3
??????? DJNZ R4,LOOP2
??????? MOV A,B
??????? MOVC A,@A+DPTR
??????? MOV P2,#02H???????????????? ;输出十位
??????? MOV P3,A
??????? MOV R4,#4
? LOOP4:MOV R3,#125
? LOOP5:DJNZ R3,LOOP5
??????? DJNZ R4,LOOP4
??????? MOV A,R7??????????????????? ;进行东西方向倒计时时间的十进制调整
??????? MOV B,#0AH
??????? DIV AB
??????? MOVC A,@A+DPTR
??????? MOV P2,#04H
??????? MOV P3,A
??????? MOV R4,#4
? LOOP6:MOV R3,#125
? LOOP7:DJNZ R3,LOOP7
??????? DJNZ R4,LOOP6
??????? MOV A,B
??????? MOVC A,@A+DPTR
??????? MOV P2,#08H
??????? MOV P3,A
??????? MOV R4,#4
? LOOP8:MOV R3,#125
? LOOP9:DJNZ R3,LOOP9
??????? DJNZ R4,LOOP8
??????? JBC TF0,LOOP??????????????? ;判断是否计满125ms
??????? AJMP DELAY
? LOOP:MOV TL0,#0CDH?????????????? ;计满125ms重新给定时器赋值
??????? MOV TH0,#0BH
??????? MOV A,30H
??????? DEC A
??????? MOV 30H,A
??????? JNZ DELAY?????????????????? ;判断是否计满8次125ms,即1s
??????? DEC R6????????????????????? ;计满1s,东西倒计时减1,南北倒计时减1
??????? DEC R7
??????? MOV 30H,#08H??????????????? ;重新1s次数,重新计时
??????? RET
? TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H? ;相应数值的数码管代码
??????? DB 92H,82H,0F8H,80H,90H????
??????? END
评论