找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机交通信号灯Proteus仿真程序 深夜模式 时间调整开关

[复制链接]
跳转到指定楼层
楼主
基于AT89C52单片机的交通灯主要具有如下功能。
基本要求如下:
1. 按键1为交通灯“深夜模式”开/关,按下后进入深夜模式,4个方向LED(黄)闪烁;再次按下后则退出深夜模式,交通灯正常运行。
2. 按键2为“时间调整”开/关,上电后,交通灯正常运行,按下此按键后,进入调时模式,此时按键3和4均有效。
3. 按键3为通行“时间加”,按键4为通行“时间减”。
4. 设定好通行时间后,按键2再次按下,退出调时模式。
5. 交通灯设置好正常运行时,按键3和按键4均无效。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char uint8;
  3. typedef unsigned int uint16;
  4. sbit renrh=P3^0;          //人行道右红
  5. sbit renrl=P3^1;// 人行道右绿
  6. sbit rensh=P2^0;  //人上下红灯
  7. sbit rensl=P2^1; //人上下绿灯
  8. sbit cherh=P2^5; //车左右红灯
  9. sbit chery=P2^6; //车左右黄灯
  10. sbit cherl=P2^7; //车左右绿灯
  11. sbit chesh=P2^2; //车上下红灯
  12. sbit chesy=P2^3;//车上下黄灯
  13. sbit chesl=P2^4;//车上下绿灯
  14. uint8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
  15.                              0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
  16. uint8 smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  17. uint8 sec,sum;
  18. uint8 smgshu[8];
  19. void delay(uint8 i)
  20. {
  21.         uint8 j,k;
  22.         for(;i>0;i--)        
  23.                 for(j=10;j>0;j--)         
  24.                         for(k=130;k>0;k--);
  25. }
  26. void init0()
  27. {
  28.         TMOD=0x01;
  29.         TH1=0x3c;
  30.         TL1=0xb0;  //定时50ms
  31.         TR0=1;
  32.         ET0=1;
  33.         EA=1;
  34. }
  35. void smgsaomiao()
  36. {
  37.         uint8 i;
  38.         for(i=0;i<8;i++)
  39.         {
  40.                 P0=smgshu[i];
  41.                 delay(1);
  42.                 P1=smgwei[i];
  43.                 //delay(1);
  44.         }
  45. }
  46. void main()
  47. {        
  48.         init0();
  49.         sec=1;
  50.         while(1)
  51.         {
  52.                 if(sec==70)        
  53.                 {
  54.                         sec=1;
  55.                 }
  56.                 if(sec<31)
  57.                 {
  58.                         P2=0xff;
  59.                         P3=0xff;
  60.                         renrh=0;
  61.                         chesl=0;
  62.                         cherh=0;
  63.                         rensl=0;
  64.                         smgshu[0]=0x00;
  65.                         smgshu[1]=0x00;
  66.                         smgshu[2]=smgduan[(30-sec)/10];
  67.                         smgshu[3]=smgduan[(30-sec)%10];
  68.                         smgshu[4]=0x00;
  69.                         smgshu[5]=0x00;
  70.                         smgshu[6]=smgduan[(30-sec)/10];
  71.                         smgshu[7]=smgduan[(30-sec)%10];
  72.                         smgsaomiao();               
  73.                 }
  74.                 if(sec>30&&sec<36)
  75.                 {
  76.                         P3=0xff;
  77.                         P2=0xff;
  78.                         renrh=0;
  79.                         chesy=0;
  80.                         chery=0;
  81.                         rensh=0;
  82.                         smgshu[0]=0x00;
  83.                         smgshu[1]=0x00;
  84.                         smgshu[2]=smgduan[(36-sec)/10];
  85.                         smgshu[3]=smgduan[(36-sec)%10];
  86.                         smgshu[4]=0x00;
  87.                         smgshu[5]=0x00;
  88.                         smgshu[6]=smgduan[(36-sec)/10];
  89.                         smgshu[7]=smgduan[(36-sec)%10];
  90.                         smgsaomiao();        
  91.                 }
  92.                 if(sec>35&&sec<66)
  93.                 {
  94.                         P3=0xff;
  95.                         P2=0xff;
  96.                         renrl=0;
  97.                         chesh=0;
  98.                         cherl=0;
  99.                         rensh=0;
  100.                         smgshu[0]=0x00;
  101.                         smgshu[1]=0x00;
  102.                         smgshu[2]=smgduan[(65-sec)/10];
  103.                         smgshu[3]=smgduan[(65-sec)%10];
  104.                         smgshu[4]=0x00;
  105.                         smgshu[5]=0x00;
  106.                         smgshu[6]=smgduan[(65-sec)/10];
  107.                         smgshu[7]=smgduan[(65-sec)%10];
  108.                         smgsaomiao();        
  109.                 }
  110.                 if(sec>65&&sec<71)
  111.                 {
  112.                         P3=0xff;
  113.                         P2=0xff;
  114.                         renrh=0;
  115.                         chesy=0;
  116.                         chery=0;
  117.                         rensh=0;
  118.                         smgshu[0]=0x00;
  119.                         smgshu[1]=0x00;
  120.                         smgshu[2]=smgduan[(70-sec)/10];
  121.                         smgshu[3]=smgduan[(70-sec)%10];
  122.                         smgshu[4]=0x00;
  123.                         smgshu[5]=0x00;
  124.                         smgshu[6]=smgduan[(70-sec)/10];
  125.                         smgshu[7]=smgduan[(70-sec)%10];
  126.                         smgsaomiao();        
  127.                 }
  128.         }               
  129. }
  130. void time0() interrupt 1
  131. {
  132.         TH1=0x3c;
  133.         TL1=0xb0;
  134.         sum++;
  135.         if(sum==20)        
  136.         {
  137.                 sum=0;
  138.                 sec++;
  139.         }
  140. }
复制代码

仿真程序: 交通灯仿真实验.zip (78.25 KB, 下载次数: 12)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:262 发表于 2023-12-18 01:31 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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