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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機控制交通信號燈Proteus仿真 代碼有詳細注釋

[復制鏈接]
跳轉到指定樓層
樓主
使用51單片機作為控制系統,內含源代碼和protues仿真,實現交通信號燈的模擬


單片機源程序如下:
  1. /*****功能:以南北方向為主干道,東西方向為次干道。
  2. 1 實現主干道通行15秒,轉通行注意狀態,黃燈亮三秒。這段時間內次干道保持紅燈常亮(數碼管顯示時間)
  3. 2  次干道通行10秒轉通行注意狀態,黃燈亮兩秒。這段時間內主干道保持紅燈常亮 (數碼管顯示時間)
  4. 3  緊急按鍵按下,所有路口紅燈
  5. ******/
  6. /*******************************************調用頭文件宏定義******************************************/
  7. #include <reg51.h>
  8. #define D P1
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. /*******************************************函數聲明*****************************************/
  12. void z1(void);//南北通
  13. void z2(void);//南北注意
  14. void z3(void);//東西通
  15. void z4(void);//東西注意
  16. void gb(void);         //全關
  17. void jinji(void);//緊急狀態,紅燈全亮
  18. void sm(void);   //鍵盤掃描
  19. void plus();         //加一掃描
  20. void minus();         //見一掃描
  21. void plus2();
  22. void minus2();
  23. void timer(void);//定時器T1初始化
  24. void time1(void);//定義定時器T1中斷服務程序
  25. void display(void);//顯示函數
  26. void delay(uint a);//10ms延時函數
  27. /*************************************定義數組,全局變量***************************************/
  28. uint duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段碼數組
  29. uint y,gw,sw,gw2,sw2;                                                                  //全局變量
  30. int time,s,times,time2,times2,time3;
  31. /*********************************定義12個小燈,數碼管,按鍵*********************************/
  32. /*************12個小燈*******************/     //數碼管//   // 按鍵 //
  33. sbit d1=P2^0; sbit d2 =P2^1; sbit d3=P2^2;   sbit w1=P0^0;   sbit H1=P3^6;         sbit H2=P3^7;       
  34. sbit d4=P2^3; sbit d5 =P2^4; sbit d6=P2^5;   sbit w2=P0^1;   sbit key1=P0^5;       
  35. sbit d7=P2^6; sbit d8 =P2^7; sbit d9=P3^2;   sbit w3=P0^2;   sbit key2=P0^6;
  36. sbit d10=P3^3; sbit d11=P3^4; sbit d12=P3^5;   sbit w4=P0^3;   sbit key3=P0^7;


  37. /*********************************************主函數**********************************************/
  38. void main(void)
  39. {                         
  40.         times=18;
  41.         time=15;
  42.         time2=10;
  43.         times2=12;
  44.         y=0,s=0;   //定時器溢出計數初始化
  45.     //P1M1=0X00;
  46.           //P1M0=0XFF;       
  47.         timer();   //啟動定時器T1
  48.         while(1)
  49.         {
  50.                 z1();  //主干道通行,綠燈15秒
  51.                 z2();  //主干道注意,黃燈3秒
  52.                 z3();  //次干道通行,綠燈10秒
  53.                 z4();  //次干道注意,黃燈2秒
  54.            }                                          
  55. }
  56. /******************不同狀態函數,定時器初始化,定時器中斷***********************/
  57. void z1(void)//南北通行,東西禁止
  58. {          
  59.         while(s<time)
  60.         {
  61.                 sm();
  62.                 plus();
  63.                 minus();
  64.                 if(TR1==1)
  65.                 {
  66.                 //綠   /黃 /紅
  67.                 d4 =0;d5 =1;d6 =1;//北
  68.                 d10=0;d11=1;d12=1;//南
  69.                 d7 =1;d8 =1;d9 =0;//東
  70.                 d1 =1;d2 =1;d3 =0;//西
  71.                 }
  72.                 sw2=(time-s)/10;  //數碼管十位(南北主干道)
  73.                 gw2=(time-s)%10;  //數碼管個位
  74.                 sw=(times-s)/10;
  75.                 gw=(times-s)%10;          
  76.                 display();                  //顯示
  77.                 gb();                          //關閉
  78.         }        s=0;//清零重置                                  
  79. }
  80. void z2(void)//南北注意,東西禁止
  81. {          
  82.         time3=3;
  83.         while(s<time3)
  84.         {       
  85.                 sm();
  86.                 if(TR1==1)
  87.                 {
  88.                 //綠  /黃  /紅                                                       
  89.                 d4 =1;d5 =0;d6 =1;//北       
  90.                 d10=1;d11=0;d12=1;//南
  91.                 d7 =1;d8 =1;d9 =0;//東
  92.                 d1 =1;d2 =1;d3 =0;//西
  93.                 }
  94.                 sw2=(time3-s)/10;  //數碼管十位(南北主干道)
  95.                 gw2=(time3-s)%10;  //數碼管個位
  96.                 sw=sw2;                          //東西次干道
  97.                 gw=gw2;          
  98.                 display();                  //顯示
  99.                 gb();                          //關閉
  100.         }        s=0;
  101. }
  102. void z3(void)//東西通行南北禁止
  103. {   

  104.         while(s<time2)
  105.         {       
  106.                 sm();
  107.                 plus2();
  108.                 minus2();
  109.                 //綠  /黃   /紅                                                                         
  110.                 d4 =1;d5 =1;d6 =0;//北               
  111.                 d10=1;d11=1;d12=0;//南
  112.                 d7 =0;d8 =1;d9 =1;//東
  113.                 d1 =0;d2 =1;d3 =1;//西
  114.                 sw2=(times2-s)/10;;                  //南北主干道
  115.                 gw2=(times2-s)%10;
  116.                 sw=(time2-s)/10;   //數碼管十位(東西次干道)
  117.                 gw=(time2-s)%10;   //數碼管個位         
  118.                 display();                  //顯示
  119.                 gb();                          //關閉
  120.         }         s=0;
  121. }
  122. void z4(void)//東西注意南北禁止
  123. {   
  124.         time3=2;
  125.         while(s<time3)
  126.         {
  127.                 sm();
  128.                 //綠  /黃   /紅                                                               
  129.                 d4 =1;d5 =1;d6 =0;//北               
  130.                 d10=1;d11=1;d12=0;//南
  131.                 d7 =1;d8 =0;d9 =1;//東
  132.                 d1 =1;d2 =0;d3 =1;//西
  133.                 sw=(time3-s)/10;   //數碼管十位,(東西次干道)
  134.                 gw=(time3-s)%10;   //數碼管個位         
  135.                 sw2=sw;                            //南北主干道
  136.                 gw2=gw;                  
  137.                 display();                  //顯示
  138.                 gb();                          //關閉
  139.         }        s=0;
  140. }
  141. void jinji(void)//紅燈全亮,其他全滅,緊急狀態
  142. {
  143.          //綠  /黃   /紅                                                               
  144.         d4 =1;d5 =1;d6 =0;//北                       
  145.         d10=1;d11=1;d12=0;//南
  146.         d7 =1;d8 =1;d9 =0;//東
  147.         d1 =1;d2 =1;d3 =0;//西
  148. }
  149. void gb(void)//全部關閉
  150. {
  151.         //綠  /黃   /紅                                                               
  152.         d4 =1;d5 =1;d6 =1;//北               
  153.         d10=1;d11=1;d12=1;//南
  154.         d7 =1;d8 =1;d9 =1;//東
  155.         d1 =1;d2 =1;d3 =1;//西
  156. }
  157. void delay(uint a)        //@11.0592MHz        10ms延時(使用燒錄軟件產生的延時代碼)
  158. {
  159.         for(a;a>0;a--)
  160.   {
  161.         unsigned char i, j;
  162.         i = 18;
  163.         j = 235;
  164.         do
  165.         {
  166.                 while (--j);          
  167.         } while (--i);
  168.   }
  169. }
  170. void display()                 //數碼管顯示
  171. {
  172.         w1=0;                         //十位
  173.         D=duan[sw];                       
  174.         delay(1);
  175.         w1=1;
  176.         D=0X00;                                                                                 
  177.         w2=0;                         //個位
  178.         D=duan[gw];
  179.         delay(1);
  180.         w2=1;
  181.         D=0x00;       
  182.         w3=0;                         //十位
  183.         D=duan[sw2];                       
  184.         delay(1);
  185.         w3=1;
  186.         D=0X00;                                                                                 
  187.         w4=0;                         //個位
  188.         D=duan[gw2];
  189.         delay(1);
  190.         w4=1;
  191.         D=0x00;               
  192. }                                                                 
  193. void timer(void)
  194. {
  195.         TMOD=0X10;
  196.         TH1=(65536-50000)/256;          //50ms定時
  197.         TL1=(65536-50000)%256;
  198.         EA=1;
  199.         ET1=1;
  200.         TR1=1;
  201. }
  202. void time1(void) interrupt 3 //定時器T1中斷服務程序
  203. {                       
  204.         TH1=(65536-50000)/256;          //50ms定時
  205.         TL1=(65536-50000)%256;
  206.         y++;        
  207.         if(y==20)
  208.         {s++; y=0;}
  209. }

  210. void sm(void)//緊急狀態掃描函數
  211. {
  212.         H1=0;                                        //按鍵另一端置零,當按鍵按下時接地
  213.         if(key1==0)                                //判斷按鍵是否按下
  214.         {
  215.                 delay(2);                        //消抖
  216.                 while(!key1)                        //松手檢測               
  217.                 TR1=!TR1;                        //關閉定時器
  218.                 while(key1==1)            //四個方向全為紅燈,進入緊急狀態
  219.                 {       
  220.                         gb();
  221.                         jinji();                //打開緊急狀態
  222.                         gw=gw2=sw=sw2=8;
  223.                         display();               
  224.                 }
  225.                 while(key1==0)                //松手檢測
  226.                 display();          
  227.                 TR1=1;                           //打開定時器跳出
  228.         }
  229. }
  230. void plus()
  231. {
  232.         H1=0;                                        //按鍵另一端置
  233.         if(key2==0)                                //判斷按鍵是否按下
  234.         delay(2);                        //消抖
  235.         if(key2==0)
  236.         {
  237.         time+=1;
  238.         times+=1;}
  239.         while(!key2);                        //松手檢測
  240. }
  241. void minus()
  242. ……………………

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

所有資料51hei提供下載:
交通信號燈.rar (79.79 KB, 下載次數: 43)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:862312 發表于 2021-6-30 10:53 | 只看該作者
原理圖呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.午夜| 午夜在线小视频 | 日日淫| 久久亚| 免费在线观看一区二区 | 成人国内精品久久久久一区 | 精品国产久 | 亚洲一区二区精品视频在线观看 | 午夜黄色影院 | 欧美一级在线观看 | 午夜一区二区三区 | av网站在线看| 欧美区在线 | 亚洲国产情侣 | 人人爽人人爽人人片av | 蜜桃一区二区三区 | 国产精品人人做人人爽 | 久久久五月天 | av在线一区二区三区 | 99视频久| 欧美激情一区二区三区 | 精品久久久久久久久久久久 | 九九热在线视频 | 亚洲精品在线免费 | 国产在线网站 | a在线免费观看视频 | 91在线视频观看 | 欧美日韩一区二区三区四区五区 | 国产1区在线 | 一区二区三区四区电影视频在线观看 | 国产精品久久久久久久久久免费看 | 国产成人精品免高潮在线观看 | 久久午夜视频 | 99re热精品视频国产免费 | 国产精品成人一区二区 | 小早川怜子xxxxaⅴ在线 | 性在线 | 国产精品1区| 91精品久久久久久久久中文字幕 | 中文字幕成人在线 | 久久99久久99精品免视看婷婷 |