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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16965|回復: 1
收起左側

單片機LED模擬交通燈原理圖+仿真+代碼(帶加減時間按鈕)

[復制鏈接]
ID:380001 發表于 2018-11-21 22:18 | 顯示全部樓層 |閱讀模式
LED模擬交通燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png 0.png

單片機源程序如下:
  1. /*********************************************************************************
  2. *                                                                                                                                                                 *
  3. *                           課程設計:交通信號燈控制                                                                             *
  4. *                          要    點:1、十字路口交通燈控制                                                                      *
  5. *                                   2、分別用紅、綠、黃發光二級管顯示                                             *
  6. *                                    3、紅、綠、黃發光二級管顯示時間自定                                                 *
  7. *                                4、用PROTEUS仿真                                                                                         *
  8. *                              5、焊接電路板并調試運行                                                                         *
  9. *                          創    新:時間可調,可調范圍1~60S                                                                         *                                                                                                                                                                                       
  10. *                          出    品:信息與控制工程學院自動化3班馬洪璽                               *                  
  11. *                          時    間:2014年12月                                                                                    *
  12. *                                                                                                                                                                 *
  13. **********************************************************************************/
  14. /************************************程序開始*************************************/                                                                                                                                          
  15. #include <reg51.h>                                                                                                               
  16. #define uchar unsigned char
  17. #define  uint unsigned int

  18. sbit RED_A=P0^0;                         //定義東西方向紅燈
  19. sbit YELLOW_A=P0^1;                         //定義東西方向黃燈
  20. sbit GREEN_A=P0^2;                         //定義東西方向綠燈
  21. sbit RED_B=P0^3;                         //定義南北方向紅燈
  22. sbit YELLOW_B=P0^4;                         //定義南北方向黃燈
  23. sbit GREEN_B=P0^5;                         //定義南北方向綠燈
  24. sbit add=P3^3;                                 //定義東西綠燈時間加按鍵
  25. sbit sub=P3^4;                                 //定義東西綠燈時間減按鍵
  26. sbit K1=P3^2;                                 //定義設定時間按鍵
  27. sbit add2=P3^5;                             //定義調南北綠燈時間加按鍵
  28. sbit sub2=P3^6;                             //定義調南北綠燈時間減按鍵
  29. int time_1=2000,time_2=2000; //定義東西和南北綠燈亮時可調變量并賦予初值2S
  30. uchar Flash_Count=0;                 //黃燈閃爍次數初始為0
  31. Operation_Type=1;                         //從模式1開始
  32. void DelayMS(uint x);                 //延時子函數聲明
  33. void Traffic_lignt();                 //交通燈循環亮子程序聲明
  34. /************************************主函數************************************/
  35. void main()
  36. {
  37.         P3=0xff;                                 //預讀先寫1
  38.         EA=1;                                         //打開總中斷
  39.         EX0=1;                                         //打開外部中斷0
  40.         IT0=0;                                         //觸發方式為低電平觸發
  41.   
  42.                 while(1)
  43.                 {
  44.                    Traffic_lignt();        
  45.                 }
  46. }
  47. /*********************************延時子程序*************************************/
  48. void DelayMS(uint x)                  //延時ms
  49. {
  50.     uchar t;
  51.     while(x--)
  52.     {
  53.         for(t=120;t>0;t--);
  54.     }
  55. }
  56. /**************************交通燈循環亮程序************************************/
  57. void Traffic_lignt()                 
  58. {
  59.          switch(Operation_Type)
  60.         {
  61.                  case 1:
  62.                         RED_A=1;YELLOW_A=1;GREEN_A=0;                 //東西方向紅燈和黃燈滅,綠燈亮
  63.                         RED_B=0;YELLOW_B=1;GREEN_B=1;                 //南北方向綠燈和黃燈滅,紅燈亮
  64.                         DelayMS(time_1);                                         //東西方向綠燈延時時間
  65.                         while(K1==0);                                                 //產生中斷時可靠停止
  66.                         Operation_Type = 2;                                         //轉到模式2
  67.                         break;
  68.                 case 2:
  69.                         GREEN_A=1;                                                         //東西方向綠燈滅
  70.                         DelayMS(200);                                                 //黃燈延時時間
  71.                         while(K1==0);                                                 //產生中斷時可靠停止
  72.                         YELLOW_A=~YELLOW_A;                                         //黃燈閃爍
  73.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  74.                                 return;
  75.                         Flash_Count=0;                                                 //黃燈閃爍次數清零
  76.                         Operation_Type = 3;                                         //轉到模式3
  77.                         break;
  78.                 case 3:
  79.                         RED_A=0;YELLOW_A=1;GREEN_A=1;                 //東西方向僅紅燈亮
  80.                         RED_B=1;YELLOW_B=1;GREEN_B=0;                 //南北方向僅綠燈亮
  81.                         DelayMS(time_2);                                     //南北方向綠燈延時時間
  82.                         while(K1==0);                                                 //產生中斷時可靠停止
  83.                         Operation_Type = 4;                                         //轉到模式4
  84.                         break;        
  85.                 case 4:
  86.                         GREEN_B=1;                                                         //南北方向綠燈滅
  87.                         DelayMS(200);                                                 //黃燈延時時間
  88.                         while(K1==0);                                                 //產生中斷時可靠停止
  89.                         YELLOW_B=~YELLOW_B;                                         //黃燈閃爍
  90.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  91.                                 return;
  92.                         Flash_Count=0;                                                 //黃燈閃爍次數清零
  93.                         Operation_Type = 1;                                         //轉到模式1
  94.                         break;        
  95.         }
  96. }
  97. /*******************************外部中斷0子程序**********************************************/
  98. void exter_0() interrupt 0
  99. {
  100.         while(!(add&&sub&&add2&&sub2))                        //掃描是否有按鍵按下
  101.                 {
  102.                 while(add==0)                                    //如果第一個按鍵按下東西方向綠燈延續時間加1秒
  103.                                         {
  104.                                             DelayMS(10);
  105.                                                 while(add==0);
  106.                                                 time_1=time_1+1000;
  107.                                                 if(time_1>60000)   //當時間超過60秒將時間置為60秒
  108.                                                 {time_1=60000;}
  109.                                         }
  110.                         while(sub==0)                                   //如果第二個按鍵按下東西方向綠燈延續時間減1秒
  111.                                         {        
  112.                                                 DelayMS(10);
  113.                                                 while(sub==0);
  114.                                                 time_1=time_1-1000;
  115.                                                 if(time_1<=0)           //當時間減到小于或等于0時將時間置為1秒
  116.                                                 {time_1=1000;}
  117.                                         }
  118.                     while(add2==0)                                   //如果第三個按鍵按下南北方向綠燈延續時間加1秒
  119.                                         {        
  120.                                                 DelayMS(10);
  121.                                                 while(add2==0);
  122.                                                 time_2=time_2+1000;
  123.                                                 if(time_2>60000)   //當時間超過60秒將時間置為60秒
  124.                                                 {time_2=60000;}
  125.                                         }
  126.                         while(sub2==0)                                   //如果第四個按鍵按下南北方向綠燈延續時間減1秒
  127.                                         {                                          
  128.                                                 DelayMS(10);
  129.                                                 while(sub2==0);
  130.                                                 time_2=time_2-1000;
  131.                                                 if(time_2<=0)           //當時間減到小于或等于0時將時間置為1秒
  132.                                                 {time_2=1000;}
  133.                                         }
  134.            }
  135. }
  136. /**********************************程序結束*********************************************************/
復制代碼

所有資料51hei提供下載:
http://www.zg4o1577.cn/bbs/dpj-142615-1.html


回復

使用道具 舉報

ID:585365 發表于 2021-8-18 17:33 | 顯示全部樓層
太及時了。我剛好要用來參考
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区 | 免费国产一区 | 亚洲精品成人在线 | 日本视频在线 | 欧美日韩国产一区二区三区 | 欧美一级片在线观看 | 日本成人一区二区 | 国产中文字幕在线 | 亚洲国产一区在线 | 夜夜爽99久久国产综合精品女不卡 | 美女黄频| 欧美激情在线精品一区二区三区 | 国产成人精品一区二三区在线观看 | 精品视频在线播放 | 超碰在线人人 | 午夜小影院 | 超碰97人人人人人蜜桃 | 国产精品久久久久久二区 | 亚洲人成人一区二区在线观看 | 免费小视频在线观看 | 亚洲女人天堂成人av在线 | 亚洲国产一区二区三区四区 | 九九热国产视频 | 久久成人国产 | 精品国产欧美一区二区三区成人 | 亚洲一区二区三区在线视频 | 99久久免费精品国产男女高不卡 | 99精品欧美一区二区蜜桃免费 | 亚洲第一成人影院 | 国产一区二区三区在线看 | 成人免费一区二区 | 啪啪免费 | 成人精品一区二区 | 夜夜爆操 | www.蜜桃av| 日韩av成人| 天天插日日操 | 91久久精品一区二区三区 | 久久中文视频 | 久久久91精品国产一区二区三区 | 成人性视频免费网站 |