« 上一篇下一篇 »

交通灯设计

现代交通系统中,交通灯的应用可谓是非常的广泛,因为交通灯的存在,使得城市交通大为改善。

而今的交通灯已经实现了自动化,下面我就来介绍下我们课堂实验做的一个交通灯,由单片机来模拟。

一、功能说明:

1基本交通灯。

根据图3.2电路,用单片机的IO口控制4组红绿黄共12个发光二极管,使发光二极管按照一定规则与次序发光与闪亮以实现模拟交通灯的功能。假设初始状态为:(南北通行状态)南北绿灯、东西红灯(25s);后转为过渡状态:南北黄灯、东西红灯(5s);再转为东西通行状态:东西绿灯、南北红灯25s)。再转为过渡状态:东西黄灯、南北红灯(5s),然后循环往复。

要求采用定时器实现所需要的定时时间。

2键控交通灯。

按一下K1键,保持南北通行状态;按一下K2键,保持东西通行状态;按一下K3键,保持正常交通灯。

要求在中断中进行按键处理。

3具有闪烁的交通灯。

2的基础上增加,绿灯最后5s闪烁,即亮0.5S0.5S闪烁。

二、实验原理图

共有4个按键K1K2K3K4,分别连接到单片机P2.0P2.1P2.2P2.3引脚,按键后对应引脚为低电平,通过4个二极管D17D18D19D20连接到P3.2(外部中断0),这是二极管构成的相与电路,即任意按一个键能在P3.2上产生一个低电平或下降沿,作为中断触发信号。

三、软件设计思想

1、定时思想。

采用定时器T0T1的方式1定时50ms,每50ms中断进行计数,计数10次即0.5s,计数20次即1s,对秒计数实现所需要的定时时间。

2、亮灯控制思想。

单片机控制灯引脚与灯对应如下,0点亮。

一共有四种状态S0S1S2S3

设置一个秒计数单元SEC每秒+1,设置两个控制值变量ab

首先令SEC=0a=0xfcb=0xf3,处于S0状态;

SEC==25a=0xfdb=0x75,处于S1状态;

SEC==30a=0xf7b=0x9e,处于S2状态;

SEC==55a=0xfbb=0xae,处于S3状态;

SEC==60SEC=0a=0xfcb=0xf3,处于S0状态;

P0=aP1=b


3、交通灯键控

按键后即进入外部中断0,在外部中断0中断程序中判断:若是按K1键,控制南北通行状态,并将定时器T0关闭,即可保持南北通行状态;若是按K2键,控制东西通行状态,并将定时器T0中断关闭,即可保持东西通行状态;若是按K3键,开启定时器T0中断,恢复正常交通灯。

4、闪烁控制

在需要闪烁时,0.5s按正常显示,0.5s全灭,即是闪烁效果。实现方法是:另外再使用一个定时器T1,在南北通行的最后5s(19<sec<25)或在东西通行的最后5s(49<sec<55),打开定时器T1,在中断函数里面对相应的绿灯进行取反,间隔是0.5S。当不在这个时间范围内时,关闭定时器T1,恢复正常状态。

四、实验思考题

1、为什么采用定时器T0的方式1?为什么不采用方式2

2、采用中断处理按键有什么优点?本实验可不可以不采用中断处理按键,不采用中断怎样实现?

1、因为方式2只有8位计数,最大计数只能到255,共只能计256,时间太短,而方式1最大可计数65536us,用方式1就可以减少进入中断的次数而实现我们需要的功能。

  2、中断处理按键优点是反应速度快,而且稳定性高,因为若是不采用中断处理的话有时候按键有可能会检测不到。可以不采用中断处理按键,而在主程序里面用大循环来进行按键检测,这样也可以实现,不过显然没有中断处理方式好。


五、程序流程图       


六、程序代码

为了方便观察实验现象,所以该程序的交通灯时间进行了相应的缩短,但功能不变

交通灯(键控、绿灯闪烁).txt