找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5485|回复: 1
收起左侧

关于51单片机仿真交通灯实现夜间黄灯闪烁的功能

[复制链接]
ID:765181 发表于 2020-6-17 12:47 | 显示全部楼层 |阅读模式
通过单片机模拟交通灯,东西方向黄绿红,南北方向黄绿红的工作方式。
时间:
东西方向绿灯26秒,
黄灯时间2秒。
南北方向绿灯时间3秒,
黄灯时间3秒

  
  
扩展功能:
1、显示时间倒计时。数码管显示倒计时
2、通过按键控制东西方向强制绿灯,或南北方向强制绿灯(应对紧急情况)按键东西绿同时南北红?
3、夜晚能够进行所有黄灯闪烁。闪烁按键
4、能够统计车辆通过数量,并将数据进行汇总并发送至上位机。中断开关加一


楼主目前只实现了基本功能,通过控制P1口电平状态来切换红绿灯,在实现扩展功能3时写了一个按键但无效,求老哥们指点,当然也不止局限于扩展3,其他几个有好的想法也请不吝赐教
工程代码附件以上传
某度链接(永久):https://pan.baidu.com/s/1gksnEy1bnYcpb2vm4uaO0Q
提取码:8ged

仿真图:
  1. //乞丐版
  2. /*交通灯*/  
  3. #include<reg51.h>
  4. //延时n毫秒
  5. void delay_ms(unsigned int n)
  6. {
  7.     unsigned int i=0,j=0;
  8.     for(i=0;i<n;i++)
  9.         for(j=0;j<123;j++);
  10. }
  11. void main()//主函数
  12. {
  13.     while(1)//死循环
  14.                 {   //轮流送值给P1口
  15.                         P1=0xc9;//
  16.                 delay_ms(26000);//绿26s
  17.                 P1=0xa9;//
  18.                 delay_ms(2000);//黄2s
  19.                 P1=0x9c;//
  20.                 delay_ms(3000);//绿3s
  21.                 P1=0x9a;//
  22.                 delay_ms(3000);//黄3s
  23.        
  24.         }
  25. }
复制代码
加扩展功能黄灯闪烁(无效)
  1. /*交通灯*/  
  2. #include <reg51.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit key1 = P2^2;

  6. uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数目管0~9段选码
  7. uchar code      S[4]={0xc9,0xa9,0x9c,0x9a};//交通信号灯控制代码(一个控制码一种状态)
  8. //延时n毫秒
  9. void delay_ms(unsigned int n)
  10. {
  11.     unsigned int i=0,j=0;
  12.     for(i=0;i<n;i++)
  13.         for(j=0;j<123;j++);
  14. }
  15. void main()//主函数
  16. {

  17.     while(1)//死循环
  18.                 {
  19.                                  
  20.         //轮流送值给P1口
  21.                         P1=S[0];//
  22.                 delay_ms(6000);//绿26s
  23.                 P1=S[1];//
  24.                 delay_ms(2000);//黄2s
  25.                 P1=S[2];//
  26.                 delay_ms(3000);//绿3s
  27.                 P1=S[3];//
  28.                 delay_ms(3000);//黄3s
  29.           if(key1==0)//夜间模式黄灯闪烁
  30. {delay_ms(10);
  31.   if(key1==0)
  32.   {                        P1=0xAA;//只有黄灯亮
  33.                  delay_ms(500);
  34.                    P1=0x88;//黄灯灭
  35.         delay_ms(500);
  36.   }
  37. }
  38.         }
  39. }

复制代码



仿真图

仿真图

交通灯.zip

68.33 KB, 下载次数: 25

代码+仿真

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:584814 发表于 2020-6-18 10:14 | 显示全部楼层
扩展想法随意图画得基本扯蛋:6路灯居然用了8个端口,没有数码管凭空显示倒计时,控制开关只有一个功能要三个快捷不便操作,夜晚能够进行的功能没有RTC无法实用,统计车辆通过居然没有传感器...
难道又是BY设计找了点原料来钓鱼的
如果叫花版工作正常,想开关控制黄灯可以将
  if(key1==0)
  {                        P1=0xAA;//只有黄灯亮
                 delay_ms(500);
                   P1=0x88;//黄灯灭
        delay_ms(500);
  }
改为:
  if(key1==0)
  { P1=0xa9; delay_ms(500); P1=0x9a; delay_ms(500); }
就可以,但开关切换并不实时,要等一个灯的周期结束(最多可能要34秒),否则必须用中断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表