找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3148|回复: 1
打印 上一主题 下一主题
收起左侧

单片机的LED数码管显示交通灯设计-带仿真

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

说明:
(1)当东西方向为绿灯时,此时南北方向为红灯;
(2)当东西方向绿灯闪烁时,南北方向依旧保持红灯;
(3)当东西方向绿灯闪烁完毕时,变为黄灯,南北方向依旧是红灯;
(4)当东西方向黄灯结束后,变为红灯,南北方向变为绿灯;
(5)南北方向绿灯闪烁时,东西方向依旧保持红灯;
(6)当南北方向绿灯闪烁完毕时,变为黄灯,东西方向依旧是红灯;
(7)当南北方向黄灯结束后,变为红灯,东西方向变为绿灯;
(8)重复(1)。
交通灯控制系统的总体设计方案共有五个部分组成,分别是:单片机AT89C52、红、绿、黄灯显示电路、LED数显时间电路、晶振及复位控制电路。在进行仿真调试过程中,程序运行正确,五个部分就同时工作,从而实现了交通灯的基本功能及调时功能。
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。单片机是集成的IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。首先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。
单片机代码如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段数码管0~9的对应电平
  5. uchar time[4];        //time[]={南北灯十位,南北灯个位,东西灯十位,东西灯个位}
  6. uchar t3,t2,t1,t0;
  7. //单独设置两个绿灯对应端口便于设置闪烁
  8. sbit NSG=P2^3;//南北绿灯
  9. sbit EWG=P2^0;//东西绿灯
  10. sbit BEEM=P2^7;        //语音

  11. void delay(uint ms)//延迟函数,功能为以毫秒为单位延迟,待微调,不要在意细节。
  12. {
  13.         uint i;
  14.         while(ms--)
  15.         {
  16.                 for(i=0;i<81;i++);
  17.         }
  18. }


  19. void timer(uchar i)                //时间设置函数
  20. {
  21.         switch (i)
  22.         {
  23.                 case 0:{time[3]=num[t3];time[2]=num[--t2];time[1]=num[t1];time[0]=num[--t0];break;}
  24.                 //代表把time数组里的四个表示时间的电平设为对应t3、t2、t1、t0的时间的电平
  25.                 case 1:{t3=2;t2=8;t1=3;t0=1;break;}                //南北红灯东西绿灯
  26.                 case 2:{t3=0;t2=4;t1=0;t0=4;break;}                //黄灯
  27.                 case 3:{t3=3;t2=1;t1=2;t0=8;break;}                //南北绿灯东西红灯
  28.         }
  29.         if(t2==0){t2=10;t3--;}
  30.         if(t0==0){t0=10;t1--;}
  31. }

  32. void TR(uchar Gr)        //数码管时间控制函数,通过片选将两个方向四个数码管作为一组进行刷新
  33. {        
  34.         uint i,j;
  35.         for(i=1;i<=25;i++)
  36.         {
  37.                 for(j=0;j<=3;j++)
  38.                 {
  39.                         P0=~(1<<j);P1=time[j];delay(10);
  40.                 }
  41.                 if(Gr==1 && i==12)EWG=0;
  42.                 if(Gr==1 && i==24)EWG=1;
  43.                 if(Gr==2 && i==12)NSG=0;
  44.                 if(Gr==2 && i==24)NSG=1;
  45.         }
  46. }

  47. void main()
  48. {
  49.         delay(500);
  50.         while(1)
  51.         {
  52.                 uint i;
  53.                 timer(1);P2=0x1e;
  54.                 for(i=1;i<=22;i++){timer(0);TR(0);}
  55.                 for(i=1;i<=5;i++){timer(0);TR(1);}
  56.                 timer(2);P2=0x1d;
  57.                 for(i=1;i<=3;i++){timer(0);TR(0);}
  58.                 timer(3);P2=0x33;
  59.                 for(i=1;i<=22;i++){timer(0);TR(0);}
  60.                 for(i=1;i<=5;i++){timer(0);TR(2);}
  61.                 timer(2);P2=0x2b;
  62.                 for(i=1;i<=3;i++){timer(0);TR(0);}
  63.         }

  64. }
复制代码

全部资料51hei下载地址:
交通灯.zip (24.95 KB, 下载次数: 62)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1085175 发表于 2023-7-2 11:34 | 只看该作者
需要分时控制吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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