久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4737|回復: 0
打印 上一主題 下一主題
收起左側

帶緊急開關的51單片機十字路口交通燈的Proteus仿真+代碼設計

[復制鏈接]
跳轉到指定樓層
樓主
利用51單片機對十字路口交通燈進行設計,東西方向和南北方向都為三十秒,分別設計三個按鍵進行時間控制。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg52.h>
  2. #include"delay.h"


  3. /*************************函數聲明**************************/
  4. void show();          //顯示函數
  5. void init();
  6. /************************端口定義**************************/
  7. sbit k1=P3^7;         //        K1  時間加
  8. sbit k2=P3^6;         //        K2  時間減
  9. sbit k3=P3^5;         //        K3  暫停,確認

  10. sbit led_red_a=P2^0;         //        
  11. sbit led_red_b=P2^2;         //
  12. sbit led_green_a=P2^1;         //        
  13. sbit led_green_b=P2^3;         //

  14. sbit WX_a_1=P2^4;             //        
  15. sbit WX_a_2=P2^5;             //
  16. sbit WX_b_1=P2^6;             //        
  17. sbit WX_b_2=P2^7;             //
  18. /************************變量定義**************************/
  19. char temp1 = 30;          // 初始紅綠燈時間
  20. uchar temp2;          //產生1秒 計數變量
  21. uchar temp4=30;          //存儲時間更改變量

  22. uchar flag1=0;                  //a,b,兩個方向紅路燈切換標志
  23. uchar flag2=0;                  //暫停標志
  24. /**********************數組定義***************************/
  25. uchar tab_dx[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰,不帶小數點

  26. /************************顯示**************************/
  27. void show()
  28. {        
  29.          
  30.           if(flag1==0)                         //a  紅燈亮 綠燈滅       b        紅燈滅 綠燈亮
  31.            {  
  32.               led_red_a=0;               
  33.           led_red_b=1;         
  34.           led_green_a=1;         
  35.           led_green_b=0;         
  36.            }
  37.           else                                   //a  紅燈滅 綠燈亮        b        紅燈亮 綠燈滅
  38.            {
  39.               led_red_a=1;               
  40.           led_red_b=0;         
  41.           led_green_a=0;         
  42.           led_green_b=1;
  43.            }
  44.                         

  45.           if(flag1==0)
  46.           {
  47.                  WX_a_1=1;            
  48.              WX_a_2=1;            
  49.              WX_b_1=1;                     
  50.              WX_b_2=0;
  51.                                                         
  52.          P0=tab_dx[temp1%10];
  53.              delayxms(3);
  54.              P0=0x00;

  55.                  WX_a_1=1;            
  56.              WX_a_2=1;            
  57.              WX_b_1=0;                     
  58.              WX_b_2=1;
  59.          
  60.          P0=tab_dx[temp1/10];
  61.              delayxms(3);
  62.              P0=0x00;
  63.           }        
  64.           else
  65.           {
  66.                WX_a_1=1;            
  67.              WX_a_2=0;            
  68.              WX_b_1=1;                     
  69.              WX_b_2=1;
  70.                                                         
  71.          P0=tab_dx[temp1%10];
  72.              delayxms(3);
  73.              P0=0x00;

  74.                  WX_a_1=0;            
  75.              WX_a_2=1;            
  76.              WX_b_1=1;                     
  77.              WX_b_2=1;
  78.          
  79.          P0=tab_dx[temp1/10];
  80.              delayxms(3);
  81.              P0=0x00;
  82.          }                        
  83. }
  84. /************************顯示1**************************/
  85. void show_1()
  86. {        
  87.                  static uchar kk;
  88.          kk++;

  89.              led_red_a=0;               
  90.          led_red_b=0;         
  91.          led_green_a=1;         
  92.          led_green_b=1;         

  93.                  WX_a_1=1;            
  94.              WX_a_2=1;            
  95.              WX_b_1=1;                     
  96.              WX_b_2=0;
  97.                                                         
  98.          P0=tab_dx[temp4%10];
  99.              delayxms(kk/126);
  100.              P0=0x00;

  101.                  WX_a_1=1;            
  102.              WX_a_2=1;            
  103.              WX_b_1=0;                     
  104.              WX_b_2=1;
  105.          
  106.          P0=tab_dx[temp4/10];
  107.              delayxms(kk/126);
  108.              P0=0x00;
  109.          
  110.                WX_a_1=1;            
  111.              WX_a_2=0;            
  112.              WX_b_1=1;                     
  113.              WX_b_2=1;
  114.                                                         
  115.          P0=tab_dx[temp4%10];
  116.              delayxms(kk/126);
  117.              P0=0x00;

  118.                  WX_a_1=0;            
  119.              WX_a_2=1;            
  120.              WX_b_1=1;                     
  121.              WX_b_2=1;
  122.          
  123.          P0=tab_dx[temp4/10];
  124.              delayxms(kk/126);
  125.              P0=0x00;               
  126. }

  127. /************************按鍵檢測**************************/
  128. void key()
  129. {               
  130.                   if(k1==0)           //時間加
  131.            {
  132.                  delayxms(10);
  133.                  while(k1==0) ;
  134.                  temp4++;
  135.                  temp1=temp4;
  136.                  if(temp4==91)
  137.                   {
  138.                    temp4=0;
  139.                   }
  140.            }

  141.                    if(k2==0)         //          時間減
  142.            {
  143.                  delayxms(10);
  144.                  while(k2==0);
  145.                  temp4--;
  146.                  temp1=temp4;
  147.                  if(temp4==-1)
  148.                   {
  149.                    temp4=90;
  150.                   }
  151.            }

  152.            if(k3==0)                     // 暫停,確認
  153.            {
  154.                  delayxms(10);
  155.                  while(k3==0);
  156.                  flag2=~flag2;
  157.            }
  158. }

  159. /************************中斷初始化**************************/
  160. void init()
  161. {
  162.       TMOD=0x11;              //設置定時器0,1為工作方式1
  163.           TH0=(65536-50000)/256;  //初值
  164.           TL0=(65536-50000)%256;
  165. //          TH1=(65536-50000)/256;  //初值
  166. //          TL1=(65536-50000)%256;
  167.           EA=1;                   //打開中斷總開關
  168.           ET0=1;                  //開定時器0中斷
  169. //          ET1=1;                                  //開定時器1中斷
  170.           TR0=1;                  //啟動定時器0   
  171.           EX0 = 1;                /* 允許外部中斷0中斷 */
  172.       PX0 = 1;                /* 外部中斷0為高優先級 */
  173. }
  174. /************************************************************
  175.                    主函數
  176. *************************************************************/
  177. void main()
  178. {
  179.    init();  

  180.    while(1)
  181.         {
  182.            key();

  183.            if(flag2==0)
  184.            {   
  185.                TR0=1;
  186.                       show();  //顯示函數
  187.            }

  188.            else
  189.            {
  190.                TR0=0;
  191.                       show_1();  //顯示函數
  192.            }
  193.           }
  194. }

  195. /* ----------------- t0中斷函數 ----------------- */
  196. void time1() interrupt 1                                               
  197. {

  198.   TH0=(65536-50000)/256;  //
  199.   TL0=(65536-50000)%256;

  200.   temp2++;
  201.   if(temp2 == 20)
  202.   {         
  203.      temp2=0;
  204.          temp1=temp1-1;
  205.          if(temp1==-1)  
  206.          {
  207.                  temp1=temp4;
  208.                  flag1=~flag1;
  209.          }
  210.    }  
  211.   
  212. }

  213. /* ----------------- 外部中斷函數 ----------------- */
  214. int0_srv( ) interrupt 0 using 2
  215.   {
  216.     uchar a,b,c,d;

  217.     int i;
  218.         for (i = 0;i<10000;i++);

  219.         if ( INT0 ==0)
  220.         {
  221.          a=led_red_a;                 //保留指示燈狀態
  222.          b=led_red_b;         
  223.          c=led_green_a;         
  224.          d=led_green_b;
  225.            while(INT0==0)
  226.            {         
  227.              led_red_a=0;               
  228.          led_red_b=0;         
  229.          led_green_a=1;         
  230.          led_green_b=1;              /* 使兩邊亮起紅燈 */

  231.            if(flag1==0)
  232.           {
  233.                  WX_a_1=1;            
  234.              WX_a_2=1;            
  235.              WX_b_1=1;                     
  236.              WX_b_2=0;
  237.                                                         
  238.          P0=tab_dx[temp1%10];
  239.              delayxms(3);
  240.              P0=0x00;

  241.                  WX_a_1=1;            
  242.              WX_a_2=1;            
  243.              WX_b_1=0;                     
  244.              WX_b_2=1;
  245.          
  246. ……………………

  247. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
交通燈.zip (88.14 KB, 下載次數: 56)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 网址黄| 中文精品一区二区 | 亚洲最大av网站 | 欧美在线精品一区 | 一区二区免费高清视频 | 一区二区成人 | 久久久久9999| 色综合国产 | 精品国产一区二区三区日日嗨 | 青青草视频免费观看 | 中国一级特黄真人毛片免费观看 | 亚洲精品白浆高清久久久久久 | 亚洲国产成人av好男人在线观看 | 精品国产一区二区三区免费 | 黄色免费在线观看网址 | 久草精品视频 | 亚洲一级毛片 | 在线观看国产视频 | 久久国 | 欧美视频日韩 | av影音资源| 91九色在线观看 | 羞羞的视频免费看 | 在线免费观看黄网 | 国产中文字幕网 | 91精品国产自产精品男人的天堂 | 亚洲精品久久久久久国产精华液 | 草b视频| 在线观看欧美日韩视频 | 国产男女精品 | 天天综合国产 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕免费视频 | 一级做a爰片性色毛片 | 国产精品亚洲一区二区三区在线 | 精品亚洲一区二区三区 | 91精品国产91久久久久游泳池 | 亚洲成人福利在线观看 | 欧美视频免费在线观看 | 丝袜美腿一区二区三区 | 色婷婷狠狠 |