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

標題: 智能交通燈仿真與單片機源代碼 [打印本頁]

作者: 2027223340    時間: 2017-12-13 12:58
標題: 智能交通燈仿真與單片機源代碼
實現功能:
1.該控制系統能控制東西南北四個路口的紅黃綠燈正常工作。東西和南北方向分時準行和禁行。
2.兩垂直方向的準行時間均為50s或100s,可以進行控制轉換。
3.準行方向亮綠燈與禁行方向亮最后3秒時,四個路口同時加亮一黃燈進行閃爍,以警告車輛及行人,準行方向與禁行方向即將改變。
4.四個道口用數碼管顯示準行或禁行的剩余時間
5.在交通情況特殊情況下可以通過K1、K2、K3按鍵對交通燈進行控制。實現:
1)當有緊急情況發生時按下K1四個路口同時加亮黃燈進行閃燈(閃燈時間為3s)且倒計時顯示關閉。黃燈閃爍完畢后四路口全變紅燈禁行,處理緊急情況。
2)有某方向上車輛過多,可以使用K2、K3鍵控制東西或南北方向通行,另一方向禁行。按下控制鍵后先在四個路口加3s的黃燈閃爍。

單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit k1=P1^6;
  6. sbit k2=P1^7;
  7. sbit k3=P2^7;
  8. sbit yellowled_nb=P1^4;        //南北黃燈
  9. sbit yellowled_dx=P1^1;        //東西黃燈
  10. uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  11. uchar data dig;        //位選
  12. uchar data led;        //偏移量
  13. uchar data buf[4];
  14. uchar data sec_dx=50;//東西數碼指示值
  15. uchar data sec_nb=50;//南北數碼指示值
  16. uchar data set_timedx=50;
  17. uchar data set_timenb=50;//倒計時設置的鍵值保存
  18. uchar data b;//定時器中斷次數
  19. bit time;//燈狀態循環標志
  20. bit int0_time;//中斷強行標志
  21. bit set;//調時切換鍵標志
  22. uint i;
  23. void delay(int ms)
  24. {
  25.         uint j,k;
  26.         for(j=0;j<ms;j++)
  27.                 for(k=0;k<124;k++);
  28. }
  29. void key()
  30. {
  31.         if (k1!=1)        //故障時禁止通行
  32.         {
  33.                 while(k1!=1);
  34.                 TR0=0;
  35.                 for(i=0;i<3;i++)
  36.                 {
  37.          yellowled_dx=1;
  38.                  yellowled_nb=1;
  39.                  delay(500);
  40.                  yellowled_dx=0;
  41.                  yellowled_nb=0;
  42.                  delay(500);
  43.         }
  44.                 P1=0xf6;
  45.                 sec_nb=88;
  46.                 sec_dx=88;
  47.                 int0_time=1;
  48.         }
  49.         if(k2!=1&&set==1)        //切換準行時間100s
  50.         {
  51.                 while(k2!=1);       
  52.                 TR0=0;
  53.                 set_timedx=99;
  54.                 set_timenb=99;
  55.                 sec_dx=99;
  56.                 sec_nb=99;
  57.                 set=0;
  58.         }
  59.         if(k2!=1&&set==0)        //切換準行時間50s
  60.         {
  61.                 while(k2!=1);
  62.                 TR0=0;
  63.                 set_timedx=50;
  64.                 set_timenb=50;
  65.                 sec_dx=50;
  66.                 sec_nb=50;
  67.                 set=1;
  68.         }
  69.         if(k3!=1)        //復位
  70.         {
  71.                 sec_dx=set_timedx;
  72.                 sec_nb=set_timenb;
  73.                 TR0=1;
  74.         }
  75. }
  76. void display()
  77. {
  78.         buf[1]=sec_dx/10; //第1位 東西秒十位
  79.         buf[2]=sec_dx%10; //第2位 東西秒個位
  80.         buf[3]=sec_nb/10; //第3位 南北秒十位
  81.         buf[0]=sec_nb%10; //第4位 南北秒個位
  82.         P0=table[buf[led]];
  83.         delay(2);        //先延時,提前顯示一位
  84.         P2=dig;
  85.         dig=_crol_(dig,1);
  86.         led++;
  87.         if(led==4)
  88.         {
  89.                 led=0;
  90.                 dig=0xfe;
  91.         }
  92. }
  93. void main()
  94. {
  95.         TMOD=0x01;       
  96.         TH0=0x3C;
  97.         TL0=0xB0;
  98.         EA=1;
  99.         ET0=1;
  100.         TR0=1;
  101.         EX0=1;
  102.         EX1=1;
  103.         P1=0Xf3;// 東西通行
  104.         while(1)
  105.         {
  106.                 key(); //調用按鍵掃描程序
  107.                 display(); //調用顯示程序
  108.         }       
  109. }
  110. void t0() interrupt 1 using 1  //定時中斷子程序
  111. {
  112.         b++;
  113.         if(b==10)          // 定時器中斷次數。
  114.         {
  115.                 b=0;
  116.                 sec_dx--;
  117.                 sec_nb--;               
  118.                 if(sec_nb==3&&time==0)
  119.                 {
  120.                         yellowled_nb=1;//南北黃燈亮
  121.             yellowled_dx=1;        //東西黃燈亮
  122.                         delay(500);
  123.                         yellowled_nb=0;
  124.             yellowled_dx=0;
  125.                 }
  126.                 if(sec_nb==2&&time==0)
  127.                 {
  128.                         yellowled_nb=1;//南北黃燈亮
  129.             yellowled_dx=1;        //東西黃燈亮
  130.                         delay(500);
  131.                         yellowled_nb=0;
  132.             yellowled_dx=0;
  133.                 }
  134.                 if(sec_nb==1&&time==0)
  135.                 {
  136.                      yellowled_nb=1;//南北黃燈亮
  137.             yellowled_dx=1;        //東西黃燈亮
  138.                         delay(500);
  139.                         yellowled_nb=0;
  140.             yellowled_dx=0;
  141.                 }                 
  142.                 //東西黃燈閃判斷            
  143.                 if(sec_dx==3&&time==1)
  144.                 {
  145.                         yellowled_nb=1;//南北黃燈亮
  146.             yellowled_dx=1;        //東西黃燈亮
  147.                         delay(500);
  148.                         yellowled_nb=0;
  149.             yellowled_dx=0;
  150.                 }                
  151.                 if(sec_dx==2&&time==1)
  152.                 {
  153.                         yellowled_nb=1;//南北黃燈亮
  154.             yellowled_dx=1;        //東西黃燈亮
  155.                         delay(500);
  156.                         yellowled_nb=0;
  157.             yellowled_dx=0;
  158.                 }
  159.                 if(sec_dx==1&&time==1)
  160.                 {
  161.                         yellowled_nb=1;//南北黃燈亮
  162.             yellowled_dx=1;        //東西黃燈亮
  163.                         delay(500);
  164.                         yellowled_nb=0;
  165.             yellowled_dx=0;
  166.                 }       
  167.                 if(sec_dx==0||sec_nb==0) //東西或南北先到達1S時即開始重新計時
  168.                 {
  169.                         sec_dx=set_timedx;
  170.                         sec_nb=set_timenb; //第一次循環結束重置
  171.                         if(time==1)
  172.                         {
  173.                                 P1=0xF3;  //東西通行
  174.                         }
  175.                         else
  176.                         {
  177.                                 P1=0xde; //南北通行
  178.                         }
  179.                         time=!time;   //取反
  180.                 }
  181.         }
  182. }
  183. void nb1() interrupt 2 using 1          //南北通行 東西禁行
  184. {
  185.         TR0=0;
  186.         for(i=0;i<3;i++)
  187.         {
  188.      yellowled_dx=1;
  189.          yellowled_nb=1;
  190.          delay(500);
  191.          yellowled_dx=0;
  192.          yellowled_nb=0;
  193. ……………………

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

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



作者: 我就是一小白    時間: 2020-6-10 22:01
還是可以的,沒有錯誤
作者: shiewfwtb    時間: 2020-6-18 11:33
和我們設計差不多,有用
作者: qzzzzzz1    時間: 2020-6-26 20:30
程序和仿真圖都沒有錯,很好
作者: 山川飄雪    時間: 2020-7-4 12:01
仿真跟內容不一樣




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久精品一区二区三区 | 精品日韩一区二区 | 国产精品99久久久久久久久 | 一级做a毛片 | 日本久久久久久久久 | 日韩精品一区二区三区高清免费 | 视频一区二区在线观看 | 成人久草 | 国产三级网站 | 久草在线影 | 中国一级毛片免费 | 精品国产欧美一区二区三区不卡 | 精品国产乱码久久久久久丨区2区 | 在线视频一区二区三区 | 欧美午夜精品理论片a级按摩 | 伊人超碰在线 | 男女国产视频 | 黄色一级大片在线免费看产 | 久久久久久国产精品免费免费 | 91精品国产综合久久小仙女图片 | 欧美日韩在线免费 | 一级黄色毛片a | 亚洲一区二区精品视频在线观看 | 国产精品99久久久久久动医院 | 精品久久免费 | 亚洲高清一区二区三区 | 国产福利资源在线 | 久久中文字幕av | 国产精品国色综合久久 | 国产精品久久久久久久久久不蜜臀 | 日本精品在线一区 | 日本一区二区在线视频 | 久久久久久久久久久久久久国产 | 伊人成人免费视频 | 亚洲免费一区二区 | 中文成人在线 | 欧美日韩一 | 日韩在线免费 | 国产精品视频一二三区 | 久久国产亚洲精品 | 国产精品亚洲一区二区三区在线观看 |