找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机人行道交通灯仿真+源码设计

[复制链接]
ID:426376 发表于 2018-11-25 12:29 | 显示全部楼层 |阅读模式
任务目的

设计一路口的简单人行道交通灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。红灯的设计时间为45秒,绿灯为30秒。傍边还有一个警示牌写着“ sidewalk  caution”,译为 人行道,注意安全。来提醒往来的车辆。
人行道图片.jpg

单片机源程序如下:
  1. #include   <reg51.h>
  2. #define  uchar unsigned  char
  3. #define   DATAPORT  P3
  4. sbit   RS=P1^7;
  5. sbit   RW=P1^6;
  6. sbit   E=P1^5;
  7. sbit key0=P1^0;
  8. sbit key1=P1^1;
  9. sbit key2=P1^2;
  10. sbit RED=P1^3;
  11. sbit GREEN=P1^4;
  12. unsigned char num;
  13. unsigned char s=45;
  14. unsigned char flag=0;
  15. void  init(void);     
  16. void    writeCOM(uchar   i);   
  17. void    writeData(uchar  i);   
  18. void    fbusy();      
  19. void DelayMs(unsigned char y)
  20. {
  21. while(y--);
  22. }
  23. unsigned code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  24. unsigned char code WeiMa[]={0x01,0x02};


  25. void seg(unsigned char c )
  26.   {
  27.   
  28.    P2=WeiMa[0];
  29.    P0=DuanMa[c%10];
  30.    DelayMs(10);
  31.    P0=0x00;

  32.    P2=WeiMa[1];
  33.    P0=DuanMa[c/10];
  34.    DelayMs(10);
  35.    P0=0x00;
  36.   }
  37. void time_djs()
  38. {
  39.   if(num==0)
  40.   {
  41.           s--;
  42.         if(s==0)
  43.         {
  44.          flag++;
  45.          s=30;
  46.          s--;
  47.          if(flag==2)
  48.          {
  49.            s=45;
  50.            flag=0;
  51.          }
  52.         }

  53.   }
  54. }

  55. void LED_RED_GREEN()
  56. {
  57.    if(flag==0)
  58.    {
  59.              RED=1;
  60.    }
  61.    else if(flag==1)
  62.    {
  63.       RED=0;
  64.              GREEN=1;
  65.           if(s==1)
  66.           {
  67.            GREEN=0;
  68.           }
  69.           if(s==1)
  70.           {
  71.            GREEN=0;
  72.           }

  73.    }
  74. }
  75. void T0_time() interrupt 1
  76.   {
  77.   TH0=(65536-45872)/256;       
  78.   TL0=(65536-45872)%256;
  79.   num++;
  80.   if(num==20)
  81.   {
  82.         num=0;
  83.         time_djs();
  84.        
  85.   }       
  86.    }
  87. void Init_Timer0()       
  88.   {
  89.     TMOD = 0x01;
  90.         TH0=(65536-45872)/256;
  91.     TL0=(65536-45872)%256;
  92.     EA = 1;
  93.     ET0 = 1;       
  94.     TR0 = 1;       
  95.   }
  96. void keycan()
  97. {
  98. if (key0==0)
  99.         {
  100.           DelayMs(20);
  101.           if (key0==0)
  102.           {
  103.           EA=~EA;
  104.           }
  105.           while(!key0);
  106.         }
  107. if(key1==0)
  108.         {
  109.     DelayMs(20);
  110.         if(key1==0)
  111.           {
  112.           s++;
  113.           }
  114.         if(s==45)
  115.           {
  116.           s=0;
  117.       }
  118.           while(!key1);
  119.         }
  120.   if(key2==0)
  121.         {
  122.     DelayMs(20);
  123.         if(key2==0)
  124.           {
  125.           s--;
  126.           }
  127.         if(s==0)          
  128.           {
  129.           s=45;
  130.           }                    
  131.           while(!key2);
  132.         }

  133. }
  134. void   init()
  135. {
  136.   writeCOM(0x01);       
  137.   writeCOM(0x38);       
  138.   writeCOM(0x0f);       
  139.   writeCOM(0x06);       
  140. }
  141. void   fbusy()
  142. {
  143.   DATAPORT=0Xff;          
  144.   RS=0;RW=1;
  145.         E=0;E=1;                         
  146.         while  (DATAPORT&0x80)
  147.         {E=0;E=1;}                               
  148. }
  149. void   writeCOM(uchar  j)
  150. {
  151.         fbusy();
  152.         RS=0;RW=0;
  153.         E=1;
  154.         DATAPORT=j;
  155.         E=0;            
  156. }                                       
  157. void   writeData(uchar   j)
  158. {
  159.    fbusy();
  160.         RS=1;RW=0;
  161.         E=1;
  162.         DATAPORT=j;
  163.         E=0;                                       
  164. }                                          
  165.                                                         
  166. void lcd_xianshi()
  167. {
  168.        
  169.        
  170. writeCOM(0x80);               
  171. writeData('s');               
  172. writeData('i');               
  173. writeData('d');
  174. writeData('e');
  175. writeData('W');
  176. writeData('a');
  177. writeData('l');
  178. writeData('k');               
  179. writeCOM(0xc4);               
  180. writeData('C');               
  181. writeData('a');               
  182. writeData('u');               
  183. writeData('t');                  
  184. writeData('i');          
  185. writeData('O');          
  186. writeData('n');          
  187. writeData('!');          


  188. }
  189. void  main()
  190. {
  191. RED=0;
  192. GREEN=0;
  193. init();
  194. lcd_xianshi();
  195. Init_Timer0();
  196.    while(1)
  197.   {
  198.    seg(s);
  199.    keycan();
  200.    LED_RED_GREEN();
  201.   }

  202. }
复制代码

所有资料51hei提供下载:
renxingdeng.zip (71.74 KB, 下载次数: 26)

评分

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

查看全部评分

回复

使用道具 举报

ID:454562 发表于 2018-12-26 15:01 | 显示全部楼层
没仿真文件呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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