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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機智能交通燈仿真和源程序 可設置時間 有人行道顯示等功能

  [復制鏈接]
跳轉到指定樓層
樓主
這個仿真圖都畫了好久,這個交通燈里面可以設置時間,還帶人行通道的顯示的,還可以讓任意兩邊強行通過。

交通燈的仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):



資料包:



單片機源程序如下(一共2個文件一個主程序 一個頭文件):
  1. /******************************************************************************
  2. * 文件名稱:TRAFFIC.c                                                          
  3. * 功能:十字路口交通燈控制程序:
  4.         正常時,EW方向計時60s,SN方向計時40s
  5.                若按時間加按鍵(Add_Button)按鈕,EW、SN方向各加5s,不可大于99s,79s
  6.             若按時間減按鍵(Reduces_Button)按鍵,EW、SN方向各減5s,不可小于40s,20s
  7.                 若按EW方向強制通行(QZ_EW_Btton)按鈕,EW方向強制通行,SN方向禁止通行          
  8.                 若按SN方向強制通行(QZ_SN_Btton)按鈕,SN方向強制通行,EW方向禁止通行
  9. * 當前版本:1.0
  10. * 作者:YuanDong
  11. * 完成日期:2009年6月18日
  12. ******************************************************************************/
  13.        
  14. #define TRAFFIC_GLOBAL 1  
  15. #include "TRAFFIC.H"  
  16. /********************************************************************************************
  17. * 函數名稱:延時子程序
  18. * 功    能:延時,給LED顯示的延時時間
  19. * 入口參數:時間參數
  20. * 出口參數:無
  21. *********************************************************************************************/
  22. void        Delay(uchar         a)
  23.         {
  24.                 uchar        i;
  25.                 i=a;
  26.                 while(i--){;}
  27.         }


  28. /********************************************************************************************
  29. * 函數名稱:顯示子函數
  30. * 功    能:EW方向,SN方向主干道數碼管顯示驅動
  31. * 入口參數:無
  32. * 出口參數:無
  33. *********************************************************************************************/
  34. void        Display(void)
  35.         {
  36.                 char h,l;
  37.                 h=Time_EW/10;                //EW方向計時的十位數
  38.                 l=Time_EW%10;                //EW方向計時的個位數
  39.               P0=table[l];                //顯示EW計時時間的低位
  40.                 EW_LED2=1;
  41.                 Delay(2);
  42.                 EW_LED2=0;
  43.             P0=table[h];                //顯示EW計時時間的高位
  44.                 EW_LED1=1;
  45.                 Delay(2);
  46.                 EW_LED1=0;

  47.                 h=Time_SN/10;                //SN方向計時的十位數
  48.                 l=Time_SN%10;                //SN方向計時的個位數
  49.                 P0=table[l];                //顯示SN計時時間的低位
  50.                 SN_LED2=1;
  51.                 Delay(2);
  52.                 SN_LED2=0;
  53.             P0=table[h];                //顯示SN計時時間的高位
  54.                 SN_LED1=1;
  55.                 Delay(2);
  56.                 SN_LED1=0;
  57.                

  58.                 h= EW1/10;                        //直行時間的十位
  59.                 l= EW1%10;                        //直行時間的個位
  60.                 P0=table[l];                //時間的個位顯示
  61.                 Time_Show_LED1=1;
  62.                 Delay(2);
  63.         Time_Show_LED1=0;
  64.                 P0=table[h];                //時間的十位顯示
  65.                 Time_Show_LED2=1;
  66.                 Delay(2);
  67.             Time_Show_LED2=0;
  68. }


  69. /********************************************************************************************
  70. * 函數名稱:外部0中斷服務程序
  71. * 功    能:中斷,檢測按鈕的類別,執行相應的操作;
  72.             若Add_Button==0,通行時間加5s ;
  73.             若Reduces_Button==0,通行時間減5s ;
  74.             若Busy_Btton==0,開繁忙信號燈,關特殊信號燈,通行時間45s,30s;
  75.             若Add_Button==0,關繁忙信號燈,開特殊信號燈,通行時間75s,55s;
  76. * 入口參數:無
  77. * 出口參數:無
  78. *********************************************************************************************/
  79. void        EXINT0(void) interrupt 0 using 0
  80.         {
  81.                 EA = 0;                    //關中斷
  82. if(Add_Button==0)                  //時間加
  83.        {
  84.             EW1+=5;                                   //通行時間加5s
  85.             SN1+=5;
  86.               if(EW1>=100)                   //通行時間不得大于100s,80s
  87.                            {
  88.                              EW1=99;
  89.                              SN1=79;
  90.                }
  91.             }
  92. if(Reduces_Button==0)             //時間減
  93.        {
  94.             EW1-=5;                              //通行時間減5s
  95.             SN1-=5;
  96.             if(EW1<=40)                      //通行時間不得小于40s,20s
  97.               {
  98.                              EW1=40;
  99.                  SN1=20;
  100.                }
  101.                     }                
  102.                 EA = 1;                  //開中斷
  103.         }

  104. /******************************************************************************
  105. * 函數名稱:外部中斷1
  106. * 功    能:中斷,當遇到緊急情況,需要人工控制時,強制直行的函數處理
  107.            若QZ_EW_Btton按下時,EW方向綠燈亮,SN方向紅燈亮 ,并點亮QZ_EW_LED指示燈
  108.                    若QZ_SN_Btton按下時,EW方向紅燈亮,SN方向綠燈亮 ,并點亮QZ_SN_LED指示燈
  109. * 入口參數:無
  110. * 出口參數:無
  111. ********************************************************************************/
  112. void EXINT1(void) interrupt 2 using 2
  113. {
  114. EA = 0;  

  115. if(QZ_EW_Btton==0)              //EW方向強制通行按鍵是否按下
  116.         {            
  117.                         QZ_EW = ~QZ_EW;         //
  118.                         QZ_SN = 0;                                                                          
  119.                         if(QZ_EW)  
  120.                         {QZ_EW_LED = 1;
  121.                          QZ_SN_LED = 0;}
  122.                         else             QZ_EW_LED = 0;
  123.         }
  124. if(QZ_SN_Btton==0)             //測試按鍵是否按下,按下為特殊狀態
  125.         {
  126.                     QZ_SN = ~QZ_SN;
  127.                         QZ_EW = 0;         
  128.                         if(QZ_SN)  
  129.                         {QZ_SN_LED = 1;
  130.                          QZ_EW_LED = 0;}
  131.                         else            
  132.                          QZ_SN_LED = 0;
  133.             }                                      
  134. EA = 1;                         
  135. }


  136. /******************************************************************************
  137. * 函數名稱:定時器0中斷
  138. * 功    能:作為定時器為交通計時提供時鐘信號
  139. * 入口參數:無
  140. * 出口參數:無
  141. ********************************************************************************/
  142.         void timer0(void)interrupt 1 using 1
  143. {
  144.         static uchar count;
  145.         TH0=(65536-50000)/256;
  146.         TL0=(65536-50000)%256;
  147.         count++;
  148.        
  149.         if(count==10)
  150.         {
  151.           if(Flag_SN_Yellow==1)       //測試SN黃燈標志位
  152.           {SN_Yellow=~SN_Yellow;}
  153.           if(Flag_EW_Yellow==1)       //測試EW黃燈標志位
  154.           {EW_Yellow=~EW_Yellow;}
  155.         }
  156.         if(count==20)
  157.         {
  158.         Time_EW--;
  159.         Time_SN--;
  160.         if(Flag_SN_Yellow==1)        //測試SN黃燈標志位
  161.             {SN_Yellow=~SN_Yellow;}
  162.         if(Flag_EW_Yellow==1)        //測試EW黃燈標志位
  163.             {EW_Yellow=~EW_Yellow;}
  164.         count=0;
  165.         }        
  166. }  


  167. /******************************************************************************
  168. * 函數名稱:main()
  169. * 功    能:主函數
  170. * 入口參數:無
  171. * 出口參數:無
  172. ********************************************************************************/
  173. void        main(void)

  174. {
  175.         QZ_EW_LED = 0;
  176.         QZ_SN_LED = 0;
  177.         QZ_EW = 0;
  178.         QZ_SN = 0;
  179.         IT0=1;                            //INT0負跳變觸發
  180.         IT1=1;                          //INT0負跳變觸發       
  181.     TMOD=0x01;                  //定時器工作于方式1
  182.         TH0=(65536-50000)/256;      //定時器賦初值
  183.         TL0=(65536-50000)%256;
  184.         EA=1;                       //CPU開中斷總允許
  185.         ET0=1;                      //開定時中斷
  186.         EX0=1;                      //開外部INTO中斷
  187.         EX1=1;                      //開外部INT1中斷
  188.     TR0=1;                      //啟動定時

  189.      while(1)

  190. {                                /*******SN通行,EW紅燈*** ***************/
  191.                 Flag_EW_Yellow=0;             //EW關黃燈顯示信號
  192.                                 Time_EW=EW;       
  193.                                 Time_SN=SN;               
  194.                                 while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)
  195.                             {P1=LIGHT[0];                      //SN通行,EW紅燈
  196.                          Display();}
  197.                                 /*******SN黃燈亮,等待左拐信號,EW紅燈***/
  198.                             P1=0x00;
  199.                                 while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)
  200.                            {Flag_SN_Yellow=1;                  //SN開黃燈信號位
  201.                             EW_Red=1;                     //SN黃燈亮,等待左拐信號,EW紅燈                                  
  202.                              Display();
  203.                                 }
  204.                                 /*******SN左拐綠燈亮,EW紅燈*************/
  205.                             Flag_SN_Yellow=0;             //SN關黃燈顯示信號
  206.                                 Time_SN=SNL;                                                                 
  207.                                 while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)
  208.                                 {P1=LIGHT[2];                 //SN左拐綠燈亮,EW紅燈
  209.                                  Display();}

  210.                           /*******SN黃燈亮,等待停止信號,EW紅燈******/
  211.                                 P1=0x00;
  212.                                 while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)
  213.                            {Flag_SN_Yellow=1;                  //SN開黃燈信號位
  214.                             EW_Red=1;                     //SN黃燈亮,等待停止信號,EW紅燈                                  
  215.                             Display();}                  

  216.                            /***********賦值**********/
  217.                                 EW=EW1;
  218.                                 SN=SN1;
  219.                                 EWL=EWL1;
  220.                                 SNL=SNL1;

  221.                                 /*******EW通行,SN紅燈******************/
  222.                                 Flag_SN_Yellow=0;              //SN關黃燈顯示信號
  223.                                 Time_EW=SN;
  224.                                 Time_SN=EW;
  225.                             while(Time_EW>=5&QZ_EW == 0&QZ_SN == 0)
  226.                             {P1=LIGHT[4];                        //EW通行,SN紅燈
  227.                                  Display();}

  228.                                 /*****EW黃燈亮,等待左拐信號,SN紅燈****/
  229.                                 P1=0X00;
  230.                                 while(Time_EW>=0&QZ_EW == 0&QZ_SN == 0)
  231.                            {Flag_EW_Yellow=1;               //EW開黃燈信號位
  232.                             SN_Red=1;                       //EW黃燈亮,等待左拐信號,SN紅燈       
  233.                             Display();}

  234.                                 /*******EW左拐綠燈亮,SN紅燈**********/
  235.                                 Flag_EW_Yellow=0;                    //EW關黃燈顯示信號
  236.                                 Time_EW=EWL;
  237.                                 while(Time_EW>=5&QZ_EW == 0&QZ_SN == 0)
  238.                                 {P1=LIGHT[6];                   //EW左拐綠燈亮,SN紅燈
  239.                                  Display();}

  240.                                 /****EW黃燈亮,等待停止信號,SN紅燈***/
  241.                                 P1=0X00;                                                          
  242.                                 while(Time_EW>=0&QZ_EW == 0&QZ_SN == 0)
  243.                            {Flag_EW_Yellow=1;               //EW開黃燈信號位
  244.                             SN_Red=1;                       //EW黃燈亮,等待停止信號,SN紅燈       
  245.                             Display();}

  246.                                 /*********EW方向強制通行**************/
  247.                                 while(QZ_EW)
  248.                                
  249. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
  1. #include        <reg52.h>
  2. #ifndef TRAFFIC_H
  3. #define TRAFFIC_H  1
  4.    #ifndef TRAFFIC_GLOBAL  
  5.             #define TRAFFIC_EXT extern
  6.    #else       
  7.             #define TRAFFIC_EXT                  
  8.    #endif       
  9. #define        uchar        unsigned char
  10. #define        uint        unsigned int
  11. /*****定義控制位**********************/
  12. sbit    Time_Show_LED2=P2^5;    //Time_Show_LED2控制位
  13. sbit    Time_Show_LED1=P2^4;    //Time_Show_LED1控制位
  14. sbit        EW_LED2=P2^3;                //EW_LED2控制位
  15. sbit        EW_LED1=P2^2;                //EW_LED1控制位
  16. sbit        SN_LED2=P2^1;                //SN_LED2控制位
  17. sbit        SN_LED1=P2^0;                //SN_LED1控制位
  18. sbit    SN_Yellow=P1^6;         //SN黃燈
  19. sbit    EW_Yellow=P1^2;         //EW黃燈
  20. sbit    EW_Red=P1^3;            //EW紅燈
  21. sbit    SN_Red=P1^7;            //SN紅燈
  22. sbit    QZ_SN_LED=P3^0;         //SN方向強制直行指示燈
  23. sbit    QZ_EW_LED=P3^1;         //EW方向強制直行指示燈       
  24. sbit    Add_Button=P3^4;        //時間加
  25. sbit    Reduces_Button=P3^5;    //時間減
  26. sbit    QZ_EW_Btton=P3^6;       //EW方向強制直行按鍵
  27. sbit    QZ_SN_Btton=P3^7;       //SN方向強制直行按鍵
  28. bit     Flag_SN_Yellow;         //SN黃燈標志位
  29. bit     Flag_EW_Yellow;         //EW黃燈標志位
  30. bit     QZ_EW;
  31. bit     QZ_SN;
  32. char        Time_EW;                //東西方向倒計時單元
  33. char        Time_SN;                //南北方向倒計時單元
  34. uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化賦值,正常模式
  35. uchar EW1=60,SN1=40,EWL1=19,SNL1=19;
  36.                                 //用于存放修改值的變量
  37. uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  38.                                 //1~~~~9段選碼
  39. uchar code LIGHT[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};
  40.                                 //交通信號燈控制

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

所有資料51hei提供下載:
智能交通.rar (39.27 KB, 下載次數: 206)


評分

參與人數 3黑幣 +16 收起 理由
mslong + 4 共享資料的黑幣獎勵!
LQL-LQL + 5 共享資料的黑幣獎勵!
半路 + 7 畫的很形象啊!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-5-19 17:02 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:185367 發表于 2017-5-20 13:49 | 只看該作者
樓主畫的很形象啊!
回復

使用道具 舉報

地板
ID:271389 發表于 2018-1-4 14:59 | 只看該作者
很全面,很符合現在的交通燈的使用!頂一下
回復

使用道具 舉報

5#
ID:207794 發表于 2018-4-16 15:33 | 只看該作者
學習下
回復

使用道具 舉報

6#
ID:311092 發表于 2018-4-18 18:13 | 只看該作者
好棒!
回復

使用道具 舉報

7#
ID:324142 發表于 2018-5-7 13:31 | 只看該作者
很仿真的圖
回復

使用道具 舉報

8#
ID:336281 發表于 2018-5-23 14:20 | 只看該作者
謝謝樓主
回復

使用道具 舉報

9#
ID:722396 發表于 2020-5-4 01:42 | 只看該作者
學習一下
回復

使用道具 舉報

10#
ID:746166 發表于 2020-5-7 15:52 | 只看該作者
沒有做消抖處理真的不會出BUG嘛?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品视频免费观看 | 成人在线观看免费爱爱 | 精品久久国产老人久久综合 | 婷婷五月色综合 | 真人一级毛片 | 国产精品资源在线观看 | 国产日韩在线观看一区 | 国产免费一区二区 | www.99精品| 日韩在线播放一区 | 狠狠狠干 | 亚洲三区在线观看 | 在线观看成人精品 | 日韩成人免费视频 | av看片网| 国产网站久久 | 91婷婷韩国欧美一区二区 | 91精品国产91久久久久久吃药 | 国产日韩久久 | 欧美一区二区三区视频在线播放 | www.日日干 | 久青草影院 | 久久国产精品一区二区三区 | 久久激情视频 | 欧美精品一区二区在线观看 | 婷婷不卡 | 久久精品色视频 | 久久成人精品 | 欧美一级片在线观看 | 九九99精品| 91人人视频在线观看 | 欧美精品在线观看 | 国产精品久久国产精品99 | 国产成人精品网站 | 玖玖玖av| 午夜网址| 国产精品久久av | 天天操天天射综合网 | 国产日韩欧美二区 | 亚洲精品中文字幕 | 国产精品高清一区二区三区 |