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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機做的交通燈程序和Proteus仿真圖

[復制鏈接]
跳轉到指定樓層
樓主
設計為交通燈仿真實驗,有AD電路圖。網上下載的資源,進行了修改,道路分為主道路和次干道,主干道作為主要交通線,通行時間比次干道多5秒左右。可以從程序進行修改

模擬真實生活中的交通燈情況,配有三個按鈕,用來控制燈的狀態。暫停/驅動,時間增加,時間減少。

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


電路原理圖如下:


單片機源程序如下:
  1. #include<stc10.h>
  2. #define D P1
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. /*******************************************函數聲明*****************************************/
  6. void z1(void);//南北通行
  7. void z2(void);//南北注意
  8. void z3(void);//東西通行
  9. void z4(void);//東西注意
  10. void gb(void);         //關閉所有
  11. void jinji(void);//緊急狀態,紅燈全亮
  12. void sm(void);   //掃描鍵盤
  13. void plus();         //通行時間加1掃描
  14. void minus();         //通行時間減1掃描
  15. void plus2();
  16. void minus2();
  17. void timer(void);//定時器T1初始化
  18. void time1(void);//定時器T1中斷服務程序
  19. void display(void);//顯示函數
  20. void delay(uint a);//10ms延時
  21. /*************************************數組及全局變量的定義***************************************/
  22. uint duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9的段碼
  23. uint y,gw,sw,gw2,sw2;                                                                  //全局變量
  24. int time,s,times,time2,times2,time3;
  25. /*********************************定義交通燈、數碼管的位選、按鍵對應的引腳*********************************/
  26. sbit d1 =P2^0; sbit d2 =P2^1; sbit d3= P2^2;   sbit w1=P0^0;   sbit H1 =P3^6;        sbit H2=P3^7;       
  27. sbit d4 =P2^3; sbit d5 =P2^4; sbit d6= P2^5;   sbit w2=P0^1;   sbit key1 =P0^5;       
  28. sbit d7 =P2^6; sbit d8 =P2^7; sbit d9= P3^2;   sbit w3=P0^2;   sbit key2 =P0^6;
  29. sbit d10=P3^3; sbit d11=P3^4; sbit d12=P3^5;   sbit w4=P0^3;   sbit key3 =P0^7;


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

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

  203. void sm(void)//緊急狀態掃描函數
  204. {
  205.         H1=0;                                        //按鍵另一端置零,當按鍵按下相當于接地,沒有按下,經上拉電阻拉高了
  206.         if(key1==0)                                //是否按下
  207.         {
  208.                 delay(2);                        //消抖
  209.                 while(!key1)        //松手檢測
  210.                 TR1=!TR1;                        //關閉定時器
  211.                 while(key1==1)            //進入緊急狀態
  212.                 {       
  213.                         gb();
  214.                         jinji();               
  215.                         gw=gw2=sw=sw2=8;
  216.                         display();               
  217.                 }
  218.                 while(key1==0)                //松手檢測
  219.                 display();          
  220.                 TR1=1;                           //打開定時器,跳出
  221.         }
  222. }
  223. void plus()
  224. {
  225.         H1=0;                                        //按鍵另一端置零,當按鍵按下相當于接地,沒有按下,經上拉電阻拉高了
  226.         if(key2==0)                                //是否按下
  227.         delay(2);                        //消抖
  228.         if(key2==0)
  229.         {
  230.         time+=1;
  231.         times+=1;}
  232.         while(!key2);                //松手檢測
  233. }
  234. void minus()
  235. ……………………

  236. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
Keil代碼與Proteus仿真下載:
仿真和代碼.7z (244.62 KB, 下載次數: 55)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 草草影院ccyy | 久草视频网站 | 久久久蜜桃一区二区人 | 精品九九 | 日韩精品极品视频在线观看免费 | 久久亚洲精品久久国产一区二区 | 国产一区二区三区在线 | 日韩一区精品 | 国产精品福利视频 | 亚洲视频二区 | 久久精品色欧美aⅴ一区二区 | 国产一级视频在线播放 | 国产乱码精品1区2区3区 | 国产一区二区精品自拍 | 成人免费在线观看视频 | 91 在线 | 91麻豆精品国产91久久久久久久久 | 亚洲在线一区二区 | va在线| 精品国产精品三级精品av网址 | 羞羞免费网站 | 青青青伊人 | 日韩一级欧美一级 | 日本精品在线观看 | 天天操欧美 | 欧美精品在线一区 | 午夜精品一区二区三区免费视频 | 中文字幕中文字幕 | www日韩高清| 性做久久久久久免费观看欧美 | 嫩草视频入口 | 91精品国产综合久久久久久 | 综合久久综合久久 | 欧美精品1区 | 亚洲一区二区三区高清 | 国产精品久久九九 | 视频一区二区中文字幕 | 中文字幕综合 | 久久高清国产 | 不卡一区 | 91视频.com |