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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7857|回復: 4
收起左側(cè)

51單片機交通燈proteus仿真和代碼(適用于課程設(shè)計)

[復制鏈接]
ID:404878 發(fā)表于 2018-11-22 17:10 | 顯示全部樓層 |閱讀模式
(分享設(shè)計)通過定時器計數(shù),數(shù)碼管顯示倒計時,led燈顯示通行狀態(tài)。按鍵1功能是在緊急車輛通過時,按下開關(guān),使四個方向均為紅燈,放行20S。按鍵2可改變紅綠燈的狀態(tài)。

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

protues仿真圖

protues仿真圖


單片機源程序如下:
  1. /*****************************************************
  2.        十字路口交通燈控制 C 程序

  3. ******************************************************/
  4. #include        <reg52.h>
  5. #define        uchar        unsigned char
  6. #define        uint        unsigned int
  7. /*****定義控制位**********************/
  8. //東西方向交通燈
  9. sbit        EW_LED2=P2^3;        //EW_LED2控制位
  10. sbit        EW_LED1=P2^2;        //EW_LED1控制位
  11. //南北方向交通燈
  12. sbit        SN_LED2=P2^1;        //SN_LED2控制位
  13. sbit        SN_LED1=P2^0;        //SN_LED1控制位

  14. sbit    SN_Yellow=P1^6;//SN黃燈
  15. sbit    EW_Yellow=P1^2;//EW黃燈

  16. bit     Flag_SN_Yellow; //SN黃燈標志位
  17. bit     Flag_EW_Yellow;//EW黃燈標志位
  18. uchar   flag_EW=0;//EW方向交通管制標志位
  19. uchar   flag_SN=0;//SN方向交通管制標志位
  20. int        Time_EW;//東西方向倒計時單元
  21. int        Time_SN;//南北方向倒計時單元
  22. static uchar count;           //計數(shù)用的變量
  23. uchar a,b,c,d,e,f,g;   //保護斷點變量
  24. char red_time=30,yellow_time=5,green_time=25; //程序初始化賦值,正常模式
  25. uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰極段碼0~~~~9段選碼
  26. uchar code S[5]={0XD7,0XE7,0X7D,0X7E,0x77};//交通信號燈控制代碼
  27. /**********************延時子程序************************/
  28. void        Delay(uchar         a)
  29.         {
  30.                 uchar        i;
  31.                 i=a;
  32.                 while(i--){;}
  33.         }
  34. /*****************顯示子函數(shù)**************************/
  35. void        Display(void)
  36.         {        //顯示東西方向交通燈
  37.                 char h,l;
  38.                 h=Time_EW/10;
  39.                 l=Time_EW%10;
  40.               P0=table[l];
  41.                 EW_LED2=1; //東西方向選中個位
  42.                 Delay(2);
  43.                 EW_LED2=0; //清屏
  44.             P0=table[h];
  45.                 EW_LED1=1; //東西方向選中十位
  46.                 Delay(2);
  47.                 EW_LED1=0; //清屏
  48.            //顯示南北方向交通燈
  49.                 h=Time_SN/10;
  50.                 l=Time_SN%10;
  51.                 P0=table[l];
  52.                 SN_LED2=1; //南北方向選中個位
  53.                 Delay(2);
  54.                 SN_LED2=0; //清屏
  55.             P0=table[h];
  56.                 SN_LED1=1; //南北方向選中十位
  57.                 Delay(2);
  58.                 SN_LED1=0; //清屏
  59. }
  60. /**********************T0中斷服務(wù)程序*******************/
  61.         void timer0(void)interrupt 1 using 1
  62. {        
  63.         TH0=(65536-50000)/256;         //定時器定時50ms
  64.         TL0=(65536-50000)%256;
  65.         count++;
  66.         if(count==10)
  67.         { //黃燈閃爍程序
  68.           if(Flag_SN_Yellow==1) //測試南北黃燈標志位
  69.           {SN_Yellow=~SN_Yellow;}
  70.           if(Flag_EW_Yellow==1)  //測試東西黃燈標志位
  71.           {EW_Yellow=~EW_Yellow;}
  72.         }
  73.         if(count==20)
  74.         {
  75.         //倒計時
  76.         Time_EW--;
  77.         Time_SN--;
  78.         //黃燈閃爍程序
  79.         if(Flag_SN_Yellow==1)//測試南北黃燈標志位
  80.             {SN_Yellow=~SN_Yellow;}
  81.         if(Flag_EW_Yellow==1)//測試東西黃燈標志位
  82.             {EW_Yellow=~EW_Yellow;}
  83.         count=0;
  84.         }
  85. }
  86. /*********************主程序開始**********************/
  87. void        main(void)
  88. {         
  89.     TMOD=0x01;//定時器工作于方式1
  90.         TH0=(65536-50000)/256;//定時器賦初值
  91.         TL0=(65536-50000)%256;
  92.         EA=1; //CPU開中斷總允許
  93.         ET0=1;//開定時中斷
  94.     TR0=1;//啟動定時
  95.         EX0=1;//外部中斷0允許位
  96.         IT0=1;//選擇外部中斷0是跳沿觸發(fā)
  97.         EX1=1;//外部中斷1允許位
  98.         IT1=1;//選擇外部中斷1是跳沿觸發(fā)
  99.         while(1)         
  100.         {                flag_EW=0;//EW方向交通管制標志位                        
  101.                         Flag_EW_Yellow=0;           //EW關(guān)黃燈顯示信號
  102.                         Time_EW=red_time;                                          
  103.                         Time_SN=green_time;               
  104.                                 while(Time_SN>0)
  105.                             {
  106.                                  P1=S[0];         //SN通行,EW紅燈
  107.                              Display();
  108.                                 }
  109.                         /*******黃燈閃爍**********/
  110.                            P1=0xF7;
  111.                         Time_SN=yellow_time;                          //
  112.                                 while(Time_SN>0)
  113.                            {
  114.                             Flag_SN_Yellow=1;         //SN開黃燈信號位                 
  115.                             Display();
  116.                            }
  117.                         
  118.                           flag_SN=0;//SN方向交通管制標志位
  119.                         Flag_SN_Yellow=0;  //SN關(guān)黃燈顯示信號
  120.                         Time_EW=green_time;
  121.                         Time_SN=red_time;
  122.                             while(Time_EW>0)
  123.                             {P1=S[2];         //EW通行,SN紅燈
  124.                                  Display();}
  125.                         /*******黃燈閃爍**********/
  126.                         P1=0X7F;
  127.                         Time_EW=yellow_time;
  128.                                 while(Time_EW>0)
  129.                            {Flag_EW_Yellow=1;//EW開黃燈信號位        
  130.                             Display();}               
  131.         }
  132. }
  133. /*
  134. *********************外部中斷0服務(wù)程序******************
  135. 緊急情況按下鍵后四個方向的燈都變?yōu)榧t色并倒計時20秒
  136. */
  137. void int0_int (void) interrupt 0 using 0
  138. {        
  139.         EA=0;
  140.         a=TH0;b=TL0;c=Time_EW;d=Time_SN;e=Flag_EW_Yellow;f=P1;g=count;//保護斷點
  141.         EA=1;
  142.         IP=0x02;
  143.         Time_EW=Time_SN=20;                                          
  144.         while(Time_EW>0)
  145.         {P1=0X77;Display();}                        
  146.         Flag_EW_Yellow=0;                                                                  
  147.         Flag_SN_Yellow=0;
  148.         while(Time_EW==0)
  149.         {TH0=a;TL0=b;Time_EW=c;Time_SN=d;Flag_EW_Yellow=e;P1=f;count=g;}//恢復現(xiàn)場
  150. }
  151. /**********************外部中斷1服務(wù)程序******************
  152. 在SN放行期間,若EW有車而SN無車,按下開關(guān)K供EW放行15S;
  153. 在EW放行期間,若SN有車而EW無車,按下開關(guān)K供SN放行15S。
  154. */
  155. void int1_int (void) interrupt 2  
  156. {
  157.   EA=0;
  158.   a=TH0;b=TL0;c=Time_EW;d=Time_SN;e=Flag_EW_Yellow;f=P1;g=count;//保護斷點
  159.   EA=1;
  160.   IP=0X02;
  161.   if(P1==S[0])
  162.   {
  163.   if(flag_EW==0)
  164.   {
  165.   Time_EW=Time_SN=15;
  166.   while(Time_EW>0)
  167.   {P1=S[2];Display();}                        
  168.   Flag_EW_Yellow=0;                                                                  
  169.   Flag_SN_Yellow=0;
  170.   }
  171.   flag_SN=1;
  172.   }
  173.   if(P1==S[2])
  174.   {
  175.   if(flag_SN==0)
  176.   {
  177.   Time_EW=Time_SN=15;
  178.   while(Time_EW>0)
  179.   {P1=S[0];Display();}                        
  180.   Flag_EW_Yellow=0;                                                                  
  181.   Flag_SN_Yellow=0;
  182.   }
  183.   flag_EW=1;
  184.   }
  185.   while(Time_EW==0)
  186. {TH0=a;TL0=b;Time_EW=c;Time_SN=d;Flag_EW_Yellow=e;P1=f;count=g;}//恢復現(xiàn)場
  187. }
復制代碼

所有資料51hei提供下載:
交通燈.zip (43.53 KB, 下載次數(shù): 173)


評分

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

查看全部評分

回復

使用道具 舉報

ID:404878 發(fā)表于 2018-11-22 17:10 | 顯示全部樓層
有問題的可以交流一下。
回復

使用道具 舉報

ID:430334 發(fā)表于 2019-1-17 22:14 | 顯示全部樓層
仿真在哪
回復

使用道具 舉報

ID:731522 發(fā)表于 2020-5-4 12:55 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:768157 發(fā)表于 2020-6-7 08:28 來自觸屏版 | 顯示全部樓層
lzDestiny 發(fā)表于 2018-11-22 17:10
有問題的可以交流一下。

hex文件打不開啊
回復

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99视频这里只有精品 | 精品一区二区在线观看 | 狠狠操狠狠干 | www.成人免费视频 | 亚洲精品欧美一区二区三区 | 日韩成人在线一区 | 成人免费在线播放 | 91视频免费视频 | 国产乱码精品一区二区三区中文 | 亚洲三级在线观看 | 国产在线精品一区二区三区 | 午夜午夜精品一区二区三区文 | 亚洲h视频| 男人天堂网址 | 日本久久一区二区三区 | 99精品视频免费在线观看 | 日本一区二区高清不卡 | 日韩欧美在线视频观看 | 免费a级毛片在线播放 | 免费在线一区二区三区 | 日韩久久精品 | 久久综合伊人 | 天堂av资源| 夜夜夜久久 | 国产激情视频在线观看 | 在线观看国产网站 | 一区二区精品 | 青青草精品 | 欧美日韩在线成人 | 日韩国产免费观看 | 99久久久国产精品 | 色久伊人 | 九九热这里 | 欧美不卡| 成人免费网站www网站高清 | 欧美一区二区三区四区视频 | 91看片免费版 | 欧美日韩亚洲视频 | 久久久视频在线 | 日韩国产精品一区二区三区 | 美女131mm久久爽爽免费 |