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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

智能交通燈仿真與單片機源代碼

[復制鏈接]
跳轉到指定樓層
樓主
實現功能:
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)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:775597 發表于 2020-6-10 22:01 | 只看該作者
還是可以的,沒有錯誤
回復

使用道具 舉報

板凳
ID:782992 發表于 2020-6-18 11:33 | 只看該作者
和我們設計差不多,有用
回復

使用道具 舉報

地板
ID:781006 發表于 2020-6-26 20:30 | 只看該作者
程序和仿真圖都沒有錯,很好
回復

使用道具 舉報

5#
ID:796809 發表于 2020-7-4 12:01 | 只看該作者
仿真跟內容不一樣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色三级在线播放 | 亚洲三级在线观看 | 求毛片| 精品国产一区二区三区日日嗨 | 成人av免费在线观看 | 久久久久久网站 | 色影视 | 亚洲色欲色欲www | 午夜丰满少妇一级毛片 | 99精品久久久久 | 国产精品久久久久久吹潮 | 国产日韩欧美另类 | 美国黄色毛片 | 涩涩视频在线看 | 天天影视综合 | 在线一区视频 | 亚洲午夜精品一区二区三区 | 色偷偷噜噜噜亚洲男人 | 91伦理片 | 欧美日韩精品久久久免费观看 | 色综合色综合色综合 | a在线视频观看 | 欧美色性| 日日夜夜精品免费视频 | 午夜播放器在线观看 | 国产专区视频 | 欧美一区二区三区在线看 | 亚洲第一黄色网 | 欧美 日韩 国产 在线 | 亚洲视频区| 97色伦网 | 国产高清免费 | 亚洲免费视频在线观看 | 久久在线 | 色伊人网 | 午夜免费视频观看 | 国产三区精品 | 亚洲黄色片免费观看 | 国产男女猛烈无遮掩视频免费网站 | 蜜桃视频在线观看免费视频网站www | 中文字幕电影在线观看 |