基于单片机的简单交通灯

一.设计要求

        1.能设定红绿灯的时间      

        2.能显示倒计时时间

        3.紧急情况下,如救护车通过时,让两个方向的交通灯全红

二、设计思路

        可以通过单片机的中断来实现时间的减少和实现闪烁的功能,根据推论可以发现两条路的红绿灯的状态可以分为4种,每一次运行时输出特定的倒计时时间和状态,就可以实现红绿灯的运行。特殊情况有救护车通过时,全部显示红灯并不显示倒计时。

三、仿真的电路

        红绿灯电路:使用P2来控制,当P2口的引脚输出低电平时,二极管道通点亮二极管

        倒计时显示电路:使用单片机的P0口来驱动两个4511芯片来分别显示各位和十位,数码管使用共阴极的7段数码管

总图:其中按键1接定时器0的外部中断,按键2接定时器1的外部中断

四、程序代码

代码的思路        

        使用单片机的定时器1的内部中断作为程序的主体部分(为什么,因为中断的等级为3低于按键1,按键2,可以被这两个按键中断),救护车的状态使用一个变量进行标记进行特殊处理。

代码解析

       变量的定义

红绿灯的状态只有四个:根据每个灯的亮灭情况和引脚的分配

定时器的初始化,中断时间为1ms,死循环是反正代码运行完重头在来运行,乘16表示在二进制的后面加4个零

        500次中断表示时间过了0.5s(为什么不是1s,因为0.5s的闪烁看起来比较正常,但是后面得在加一个计数表示1s的中断),如果他处于设定时间的状态,每0.5s加一次全灭,形成闪烁的效果。

处于救护车的状态,特殊处理不进入正常的显示。

红灯的时间等于绿灯的时间加10,导致了一个红灯之间有绿灯加黄灯,所以就要加多一个条件表示绿灯已经结束,进入黄灯的状态,p_time数组存的是每个时间段的开始的时间,包括两个红灯的情况。

为什么状态数组p_lamp输出要取反,因为P2引脚输出低电平时,灯点亮,但是状态定义时是按照高电平点亮的,所以输出要取反

外部中断2:在时间设定 的状态下加时间(绿灯的时间)

外部中断0:(为什么在中断0中,进行救护车情况的切换,因为中断等级最高,可以在任意时间执行当前的中断),救护车通过后要变为绿灯,同时状态下标也要同步更新

百度网盘链接

链接:https://pan.baidu.com/s/1OKlr6tg8thvF9seuqb5plQ?pwd=u08l 
提取码:u08l

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值