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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5838|回復: 8
收起左側

基于51單片機做的交通燈最終版

  [復制鏈接]
ID:342565 發表于 2018-7-9 19:11 | 顯示全部樓層 |閱讀模式
單片機交通燈  含代碼和仿真
0_DFDF16YM`3`)J{Z0Y8.png 0.png

單片機源程序如下:
  1. #include        <reg51.h>        
  2. #define        uchar        unsigned char
  3. #define        uint        unsigned int
  4. /*****定義控制位**********************/
  5. sbit    Time_Show_LED2=P2^5;    //Time_Show_LED2控制位
  6. sbit    Time_Show_LED1=P2^4;    //Time_Show_LED1控制位
  7. sbit        EW_LED2=P2^3;                //EW_LED2控制位
  8. sbit        EW_LED1=P2^2;                //EW_LED1控制位
  9. sbit        SN_LED2=P2^1;                //SN_LED2控制位
  10. sbit        SN_LED1=P2^0;                //SN_LED1控制位
  11. sbit    SN_Yellow=P1^6;         //SN黃燈
  12. sbit    EW_Yellow=P1^2;         //EW黃燈
  13. sbit    EW_Red=P1^3;            //EW紅燈
  14. sbit    SN_Red=P1^7;            //SN紅燈
  15. sbit    SNleft_led=P2^7;                //南北左拐指示燈
  16. sbit    SNright_led=P2^6;                //南北右拐指示燈
  17. sbit    EWleft_led=P3^1;                //東西左拐指示燈
  18. sbit    EWright_led=P3^0;                //東西右拐指示燈


  19.        
  20. sbit    Add_Button=P3^4;        //時間加
  21. sbit    Reduces_Button=P3^5;    //時間減
  22. sbit    QZ_EW_Btton=P3^6;       //EW方向強制直行按鍵
  23. sbit    QZ_SN_Btton=P3^7;       //SN方向強制直行按鍵
  24. bit     Flag_SN_Yellow;         //SN黃燈標志位
  25. bit     Flag_EW_Yellow;         //EW黃燈標志位
  26. bit     QZ_EW;                                        //EW強制通行標志
  27. bit     QZ_SN;                                        //SN強制通行標志
  28. char        Time_EW;                //東西方向倒計時單元
  29. char        Time_SN;                //南北方向倒計時單元
  30. uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化賦值,正常模式
  31. uchar EW1=60,SN1=40,EWL1=19,SNL1=19;
  32.                                 //用于存放修改值的變量
  33. uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  34.                                 //0~~~~9段選碼
  35. uchar code LIGHT[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};
  36.                                 //交通信號燈控制代碼
  37. /*****延時函數**********************/
  38. void        Delay(uchar         a)
  39.         {
  40.        
  41.                 while(a--);
  42.         }


  43. /*****顯示函數,顯示倒計時的值**********************/
  44. void        Display(void)
  45.         {
  46.                 char h,l;
  47.                 h=Time_EW/10;                //EW方向計時的十位數
  48.                 l=Time_EW%10;                //EW方向計時的個位數
  49.               P0=table[l];                //顯示EW計時時間的低位
  50.                 EW_LED2=1;
  51.                 Delay(2);
  52.                 EW_LED2=0;
  53.             P0=table[h];                //顯示EW計時時間的高位
  54.                 EW_LED1=1;
  55.                 Delay(2);
  56.                 EW_LED1=0;

  57.                 h=Time_SN/10;                //SN方向計時的十位數
  58.                 l=Time_SN%10;                //SN方向計時的個位數
  59.                 P0=table[l];                //顯示SN計時時間的低位
  60.                 SN_LED2=1;
  61.                 Delay(2);
  62.                 SN_LED2=0;
  63.             P0=table[h];                //顯示SN計時時間的高位
  64.                 SN_LED1=1;
  65.                 Delay(2);
  66.                 SN_LED1=0;
  67.                

  68.                 h= EW1/10;                        //直行時間的十位
  69.                 l= EW1%10;                        //直行時間的個位
  70.                 P0=table[l];                //時間的個位顯示
  71.                 Time_Show_LED1=1;
  72.                 Delay(2);
  73.         Time_Show_LED1=0;
  74.                 P0=table[h];                //時間的十位顯示
  75.                 Time_Show_LED2=1;
  76.                 Delay(2);
  77.             Time_Show_LED2=0;
  78. }


  79. /*****外部中斷0,用來增加或減少通行時間值**********************/
  80. void        EXINT0(void) interrupt 0
  81.         {
  82.                 EA = 0;                    //關中斷
  83. if(Add_Button==0)                  //時間加
  84.        {
  85.             EW1+=5;                                   //通行時間加5s
  86.             SN1+=5;
  87.               if(EW1>=100)                   //通行時間不得大于100s,80s
  88.                            {
  89.                              EW1=99;
  90.                              SN1=79;
  91.                }
  92.             }
  93. if(Reduces_Button==0)             //時間減
  94.        {
  95.             EW1-=5;                              //通行時間減5s
  96.             SN1-=5;
  97.             if(EW1<=40)                      //通行時間不得小于40s,20s
  98.               {
  99.                              EW1=40;
  100.                  SN1=20;
  101.                }
  102.                     }                
  103.                 EA = 1;                  //開中斷
  104.         }

  105. /*****外部中斷2,用來強制通行**********************/
  106. void EXINT1(void) interrupt 2
  107. {
  108. EA = 0;  

  109. if(QZ_EW_Btton==0)              //EW方向強制通行按鍵是否按下
  110.       {
  111.              Delay(2);
  112.                   if(QZ_EW_Btton==0)
  113.                    {            
  114.                         QZ_EW = ~QZ_EW;         //
  115.                         QZ_SN = 0;                                                                          
  116.                         }
  117.       }
  118. if(QZ_SN_Btton==0)             //測試按鍵是否按下,按下為特殊狀態
  119.         {
  120.                   Delay(2);
  121.                   if(QZ_SN_Btton==0)
  122.                    {
  123.                     QZ_SN = ~QZ_SN;
  124.                         QZ_EW = 0;         
  125.                    }
  126.             }                                      
  127. EA = 1;                         
  128. }


  129. /*****定時器中斷,用來為倒計時單元提供時鐘信號**********************/
  130.         void timer0(void)interrupt 1
  131. {
  132.         static uchar count;
  133.         TH0=(65536-20000)/256;
  134.         TL0=(65536-20000)%256;
  135.         count++;
  136.        
  137.         if(count==10)
  138.         {
  139.           if(Flag_SN_Yellow==1)       //測試SN黃燈標志位
  140.           {SN_Yellow=~SN_Yellow;}
  141.           if(Flag_EW_Yellow==1)       //測試EW黃燈標志位
  142.           {EW_Yellow=~EW_Yellow;}
  143.         }
  144.         if(count==20)
  145.         {
  146.         Time_EW--;
  147.         Time_SN--;
  148.         if(Flag_SN_Yellow==1)        //測試SN黃燈標志位
  149.             {SN_Yellow=~SN_Yellow;}
  150.         if(Flag_EW_Yellow==1)        //測試EW黃燈標志位
  151.             {EW_Yellow=~EW_Yellow;}
  152.         count=0;
  153.         }        
  154. }  

  155. /*****主函數**********************/
  156. void        main(void)

  157. {

  158.         QZ_EW = 0;
  159.         QZ_SN = 0;
  160.         IT0=1;                            //INT0負跳變觸發
  161.         IT1=1;                          //INT0負跳變觸發       
  162.     TMOD=0x01;                  //定時器工作于方式1
  163.         TH0=(65536-50000)/256;      //定時器賦初值
  164.         TL0=(65536-50000)%256;
  165.         EA=1;                       //CPU開中斷總允許
  166.         ET0=1;                      //開定時中斷
  167.         EX0=1;                      //開外部INTO中斷
  168.         EX1=1;                      //開外部INT1中斷
  169.     TR0=1;                      //啟動定時

  170.      while(1)
  171. {                               
  172.                 /*******SN通行,EW紅燈*** ***************/
  173.                 Flag_EW_Yellow=0;             //EW關黃燈顯示信號
  174.                                 Time_EW=EW;       
  175.                                 Time_SN=SN;               
  176.                                 while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)
  177.                             {P1=LIGHT[0];                      //SN通行,EW紅燈
  178.                                  SNleft_led=0; SNright_led=0;
  179.                                  EWleft_led=0; EWright_led=0;
  180.                          Display();}
  181.                                 /*******SN黃燈亮,等待左拐信號,EW紅燈***/
  182.                             P1=0x00;
  183.                                 while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)
  184.                            {Flag_SN_Yellow=1;                  //SN開黃燈信號位
  185.                             EW_Red=1;                     //SN黃燈亮,等待左拐信號,EW紅燈
  186.                                  SNleft_led=0; SNright_led=0;
  187.                                  EWleft_led=0; EWright_led=0;                                          
  188.                             Display();
  189.                                 }
  190.                                 /*******SN左拐綠燈亮,EW紅燈*************/
  191.                             Flag_SN_Yellow=0;             //SN關黃燈顯示信號
  192.                                 Time_SN=SNL;                                                                 
  193.                                 while(Time_SN>=15&QZ_EW == 0&QZ_SN == 0)
  194.                                 {P1=LIGHT[2];
  195.                                  SNleft_led=1; SNright_led=0;
  196.                                  EWleft_led=0; EWright_led=0;    //SN左拐綠燈亮,右拐紅燈亮,EW紅燈
  197.                                  Display();}
  198.                                 /*******SN黃燈亮,等待右拐信號,EW紅燈***/
  199.                                 P1=0x00;
  200.                                 while(Time_SN>=10&QZ_EW == 0&QZ_SN == 0)
  201.                            {Flag_SN_Yellow=1;                  //SN開黃燈信號位
  202.                             EW_Red=1;                     //SN黃燈亮,等待右拐信號,EW紅燈       
  203.                                  SNleft_led=1; SNright_led=0;
  204.                                  EWleft_led=0; EWright_led=0;               //SN左拐綠燈亮,右拐紅燈亮,EW紅燈                          
  205.                             Display();}       

  206.                                  /*******SN右拐綠燈亮,EW紅燈*************/
  207.                                                          
  208.                                 while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)
  209.                                 {P1=LIGHT[2];
  210.                                  SNleft_led=0; SNright_led=1;
  211.                                  EWleft_led=0; EWright_led=0;               //SN右拐綠燈亮,左拐紅燈亮,EW紅燈
  212.                                  Display();}

  213.                           /*******SN黃燈亮,等待停止信號,EW紅燈******/
  214.                                 P1=0x00;
  215.                                 while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)
  216.                            {Flag_SN_Yellow=1;                  //SN開黃燈信號位
  217.                             EW_Red=1;                     //SN黃燈亮,等待停止信號,EW紅燈       
  218.                                  SNleft_led=0; SNright_led=1;
  219.                                  EWleft_led=0; EWright_led=0;               //SN右拐綠燈亮,左拐紅燈亮,EW紅燈                          
  220.                             Display();}                  

  221.                            /***********賦值**********/
  222.                                 EW=EW1;
  223.                                 SN=SN1;
  224.                                 EWL=EWL1;
  225.                                 SNL=SNL1;

  226.                                 /*******EW通行,SN紅燈******************/
  227.                                 Flag_SN_Yellow=0;              //SN關黃燈顯示信號
  228.                                 Time_EW=SN;
  229.                                 Time_SN=EW;
  230.                             while(Time_EW>=5&QZ_EW == 0&QZ_SN == 0)
  231.                             {P1=LIGHT[4];                        //EW通行,SN紅燈
  232.                                   SNleft_led=0; SNright_led=0;
  233.                                   EWleft_led=0; EWright_led=0;
  234.                                  Display();}

  235.                                 /*****EW黃燈亮,等待左拐信號,SN紅燈****/
  236.                                 P1=0X00;
  237.                                 while(Time_EW>=0&QZ_EW == 0&QZ_SN == 0)
  238.                            {Flag_EW_Yellow=1;               //EW開黃燈信號位
  239.                             SN_Red=1;                       //EW黃燈亮,等待左拐信號,SN紅燈
  240.                                  SNleft_led=0; SNright_led=0;
  241.                                  EWleft_led=0; EWright_led=0;       
  242.                             Display();}

  243.                                 /*******EW左拐綠燈亮,SN紅燈**********/
  244.                                 Flag_EW_Yellow=0;                    //EW關黃燈顯示信號
  245.                                 Time_EW=EWL;
  246.                                 while(Time_EW>=15&QZ_EW == 0&QZ_SN == 0)
  247.                                 {P1=LIGHT[6];
  248.                                  SNleft_led=0; SNright_led=0;
  249.                                  EWleft_led=1; EWright_led=0;                  //EW左拐綠燈亮,右拐紅燈亮,SN紅燈
  250.                                  Display();}
  251.                                
  252.                                 /*****EW黃燈亮,等待右拐信號,SN紅燈****/
  253.                                 P1=0X00;                                                          
  254.                                 while(Time_EW>=10&QZ_EW == 0&QZ_SN == 0)
  255.                            {Flag_EW_Yellow=1;               //EW開黃燈信號位
  256.                             SN_Red=1;                       //EW黃燈亮,等待右拐信號,SN紅燈
  257.                                  SNleft_led=0; SNright_led=0;
  258.                                  EWleft_led=1; EWright_led=0;                 //EW左拐綠燈亮,右拐紅燈亮,SN紅燈       
  259.                             Display();}

  260.                                 /*******EW右拐綠燈亮,SN紅燈**********/
  261.                        
  262.                                 while(Time_EW>=5&QZ_EW == 0&QZ_SN == 0)
  263.                                 {P1=LIGHT[6];
  264.                                  SNleft_led=0; SNright_led=0;
  265.                                  EWleft_led=0; EWright_led=1;                 //EW右拐綠燈亮,左拐紅燈亮,SN紅燈
  266.                                  Display();}

  267.                                 /****EW黃燈亮,等待停止信號,SN紅燈***/
  268. ……………………

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

所有資料51hei提供下載:
交通燈再修改.rar (89.4 KB, 下載次數: 68)

評分

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

查看全部評分

回復

使用道具 舉報

ID:342565 發表于 2018-7-9 19:13 | 顯示全部樓層
可以看能不能用到
回復

使用道具 舉報

ID:342565 發表于 2018-7-9 20:53 | 顯示全部樓層
里面含代碼和仿真圖原理
回復

使用道具 舉報

ID:368765 發表于 2018-7-10 15:38 | 顯示全部樓層
很好用哦
回復

使用道具 舉報

ID:218113 發表于 2018-7-14 10:32 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:89286 發表于 2018-7-25 08:10 | 顯示全部樓層
thanks for sharing
回復

使用道具 舉報

ID:649259 發表于 2020-1-2 17:35 來自手機 | 顯示全部樓層
可以看下你的程序流程圖嗎
回復

使用道具 舉報

ID:628175 發表于 2020-1-5 19:56 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:692480 發表于 2020-2-12 15:33 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线| 一区二区av | 欧美精品一区二区三区在线 | 亚洲视频欧美视频 | 国产日韩视频 | 成人一区二区三区在线观看 | 日韩综合色 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区在线免费观看 | 狠狠综合久久av一区二区老牛 | 久久人人网 | 欧美一区二区三区日韩 | 免费av在线| 成人欧美一区二区三区在线播放 | 精品久久精品 | 免费在线观看一区二区三区 | 暖暖日本在线视频 | 亚洲精品国产电影 | 日本高清中文字幕 | 99精品久久久国产一区二区三 | 99re视频这里只有精品 | 国产在线观看一区二区 | 欧美男人天堂 | 久草在线 | 久久精品国产99国产精品 | 欧美精品网| 国产精品久久国产精品 | 久优草| 久久国产精品偷 | 日本三级黄视频 | caoporn免费在线视频 | 久久久综合精品 | 最近日韩中文字幕 | 欧美成人精品欧美一级 | 成人小视频在线观看 | 欧美日韩在线一区二区三区 | 精品九九久久 | 亚洲精品久久久久久久久久久久久 | 视频二区 | 欧美激情精品久久久久 | 色呦呦网站|