单片机控制交通灯说明书
一、设计思路
如何使主干道通车时间 ,可任意设置;次干道通车时间 ,可任意设置;黄灯亮时间 ,可任意设置;怎样采用倒计时的方式,用两位十进制数字显示红、绿、黄色信号灯的倒计时时间。
二、电路图
二、 使用材料
1、单片机89c51 两片
2、CD4072 一片
3、LED七段吗数码管 四个
4、CD4511 四片
5、红,绿,黄发光二极管 各两个
三、元器件结构与工作原理
1、单片机89c51
89C51包含了运算器、控制器、片内存储器、四个
I/O 接口,串行接口、定时器和计数器、中断系统、振
荡器。
1)主电源引脚
Vcc接+5V电源正端
Vss接+5V电源地端
2)外接晶体引脚
XTAL1:片内反相放大器输入端
XTAL2:片内反相放大器输出端。外接晶体时,XTAL1与XTAL2各接晶体的一端,接外接晶体与片内反相器构成振荡器。
3)输入输出引脚
本电路运用了P1.0---P1.7:P1口的8个引脚。可作为准双向I/O接口使用。
P2.0~P2.7:P2口的8个引脚。一般可作为准双向I/O接口;在接有片外存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用 的为高8位地址总线。
P3.0~P3.7:P3口的8个引脚。除作为准双向I/O接口使用外,还具有第二功能。
4)RST是复位端。单片机的振荡器工作时,该引脚上出现两个机器周期的高电平就可实现复位操作,使单片机回复道初始状态。
2. CD 40511
CD4511是一个用于驱动共阴极LED(数码管)显示器的BCD码-七段码译码器,特点如下:具有BCD转换,消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动LED显示器。
BI:4脚是测试消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段码均处熄灭状态,不显示数字。
LT:3脚是测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。 &
四、实验原理
采用两片51系列单片机芯片AT89C51,完成交通信号控制系统。该系统的技术指标:主干道通车时间 ,可任意设置;次干道通车时间 ,可任意设置;黄灯亮时间 ,可任意设置;采用倒计时的方式,用两位十进制数字显示红、绿、黄色信号灯的倒计时时间。
备注:
org 0000h
mov sp,#70h
sjmp main
org 0023h
ljmp sent
main: mov a,#00h
mov p2,a
lcall del1
mov a,p2
mov r1,a
lcall del1
mov a,#00h
mov p2,a
mov a,p2
xrl a,r1
cjne a,#00h,error ;绿灯时间储入r1 缺一错误跳转
mov a,#00h
mov p0,a
mov a,p0
anl a,#00fh
mov r2,a ;黄灯时间储入r2
lcall del1
mov a,#00h
mov p0,a
mov a,p0
anl a,#00fh
xrl a,r2
cjne a,#00h,error ;```
mov a,r1
add a,r2
mov r3,a ;黄灯加红灯时间存入r3
mov a,#66h
add a,r3 ;判断r3是否大于99大于99则出错
jc error
cus: mov scon, #90h ;设置串行口为方式2
setb ea ;开中断
setb es ;允许串行口中断
lcall sout ;先发送红灯数据
mov r0,#02h
cjne r0,#00,$ ;等待两次中断
start: mov a, r1
mov 30h, a ;将绿灯时间存入30h单元
mov a, r2
mov 31h, a ;将黄灯时间存入31h单元
mov a, r3
mov 32h, a ;将绿灯加红灯时间存入32h单元
mov a, r4
mov 33h, a ;将红灯时间存入33h单元
main0: mov a, 32h ;取红灯加黄灯时间
mov 2ah, a ;存入2ah 倒计时显示时间
mov r3, #0bfh ;数码管控制码 绿灯亮其他灭
mov a, 30h
mov r7, a ;取延时时间存入r7,即绿灯亮时间
main1: lcall del ;调用一秒延时子程序 并显示倒计时时间
djnz r7,main1 ;判断延时时间是否到 没到则 转main1循环
mov r3,#0dfh ;数码管控制码 黄灯亮其他灭
mov a, 31h
mov r7, a ;取延时时间存入r7, 即黄灯亮时间
main2: lcall del
djnz r7,main2 ;判断时间到否 没到则循环
mov r3,#7fh ;数码管控制码 红灯亮其他灭
mov a,33h ;取红灯时间
mov 2ah,a ;存入 2ah 倒计时显示时间
mov a,33h
mov r7,a ;取延时时间存入r7,即红灯亮时间
main3: lcall del ;调用一秒延时 并显示倒计时时间
djnz r7,main3 ;判断时间是否到没到循环
ajmp main0 ;跳转到main循环执行程序
error: sjmp error
del: dec 2ah ;倒计时时间减1
mov dptr , # table ;1秒延时加到计时显示 子程序 取表头地址存入dptr
mov a,2ah ; 取倒计时显示时间到a中
mov b,#0ah ;数字10存入b中
div ab ;a除以b 十位数存入a中 个位数存入b中
movc a,@a+dptr ;代码装换
mov r1,a ;代码存入r1
mov a,b ;个位数存入a中
add a,r1 ;代码与个位相加 得显示码 存入a
mov r2,a ;显示码存入r2
disp: mov a,r2 ;显示码存入r2
mov p1,a ;送出显示码 显示
mov a,r3
mov p0,a ;输出信号灯控制码控制灯亮
t2: mov r6,#10 ;延时程序 0.999秒 12mHZ时为0.99秒
d1: mov r5,#200 ;6mHz时为1.98秒 可改r6=#5
d2: mov r4,#248
djnz r4,$
djnz r5,d2
djnz r6,d1
ret ;子程序返回
table: db 00h,10h,20h,30h,40h,
db 50h,60h,70h,80h,90h
sent: jnb ri,send ;不是接收,转向发送
lcall sin ;接收,调用接收子程序
reti ;中断返回
send: clr ti ;清发送中断标志
dec r0 ;r0减1变为1
reti ;中断返回
sout: push psw
push acc ;保存 psw acc装状态
mov a,r3 ;取黄灯加红灯时间放入a中
mov c,p
mov tb8,c ;取奇偶效验为存入tb8
mov sbuf,a ;发送数据
pop a
pop psw ;恢复 psw acc状态
ret ;子程序返回
sin: push psw
push a ;保存 psw acc状态
clr ri ;清接收中断标志
mov a,sbuf ;读入缓存区内容
mov c,p ;取奇偶效验位
jnc s1 ;p=c=0转移到s1
jnb rb8,error ;若两次效验位不一样,则出错
ljmp s2 ;正确则转s2
s1: jb rb8,error ;若双方效验位不一样,则出错
s2: mov r4,a ;接收到的红灯时间存入r4
dec r0 ; r0减1
pop a
pop psw ;恢复 psw acc状态
ret ;子程序返回
del1 : nop ; 15毫秒延时子程序 12m赫兹时
;30毫秒延时子程序 6m赫兹时
del2 : mov r6, #50
del3 : mov r7, #150
del4 : djnz r7, del4
del5 : djnz r6, del3
ret