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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2471|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機交通燈仿真程序 具有夜間模式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:442196 發(fā)表于 2021-1-17 16:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
proteus 仿真,具有夜間模式

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. //東西 紅黃綠
  5. sbit RED_A=P0^0;
  6. sbit YELLOW_A=P0^1;
  7. sbit GREEN_A=P0^2;
  8. //南北 紅黃綠
  9. sbit RED_B=P0^3;
  10. sbit YELLOW_B=P0^4;
  11. sbit GREEN_B=P0^5;
  12. //加減按鍵
  13. sbit k1=P3^0;
  14. sbit k2=P3^1;
  15. //變量
  16. uchar Flash_Count = 0,scount=0,flag_mode=1,time_flag=0;
  17. uchar GT1=8,YT1=2,RT1=6;
  18. uchar GT2=8,YT2=2,RT2=6;
  19. //數(shù)碼管0-13
  20. uchar code DSY_CODE[]=
  21. {
  22.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1
  23. };
  24. //也是函數(shù)
  25. void DelayMS(uint x)
  26. {
  27.         uchar t;
  28.         while(x--)
  29.         {
  30.                  for(t=120;t>0;t--);
  31.         }
  32. }
  33. //定時器初始化
  34. void time_init()
  35. {
  36.         TMOD=0X01;
  37.         TH0=(65536-10000)/256;
  38.         TL0=(65536-10000)%256;
  39.         ET0=1;  
  40.         EA=1;
  41.         TR0=1;//定時器開
  42.         IT0=1;//中斷0
  43.         EX0=1;
  44.         IT1=1;//中斷1
  45.         EX1=1;
  46. }
  47. //交通燈處理函數(shù)
  48. void Traffic_lignt()
  49. {
  50.         if(flag_mode%2)  //默認(rèn)白天
  51.         {       
  52.                 if(scount>GT1+YT1+RT1)  //東西
  53.                         scount=0;
  54.                 if(scount<GT1)  //綠燈
  55.                 {
  56.                         P2=DSY_CODE[GT1-scount];  //數(shù)碼管顯示時間
  57.                         RED_A=1;
  58.                         YELLOW_A=1;
  59.                         GREEN_A=0;
  60.                 }
  61.                 else if(scount<GT1+YT1)  //黃燈
  62.                 {
  63.                         P2=DSY_CODE[GT1+YT1-scount];//數(shù)碼管顯示時間
  64.                         RED_A=1;
  65.                         YELLOW_A=0;
  66.                         GREEN_A=1;
  67.                 }
  68.                 else if(scount<GT1+YT1+RT1) //紅點
  69.                 {
  70.                         P2=DSY_CODE[GT1+YT1+RT1-scount];//數(shù)碼管顯示時間
  71.                         RED_A=0;
  72.                         YELLOW_A=1;
  73.                         GREEN_A=1;
  74.                 }
  75.                  //南北
  76.                 if(scount<RT2)         //紅燈   
  77.                 {
  78.                         P1=DSY_CODE[RT2-scount];//數(shù)碼管顯示時間
  79.                         RED_B=0;
  80.                         YELLOW_B=1;
  81.                         GREEN_B=1;
  82.                 }
  83.                 else if(scount<RT2+GT2) //綠燈
  84.                 {
  85.                         P1=DSY_CODE[RT2+GT2-scount];//數(shù)碼管顯示時間
  86.                         RED_B=1;
  87.                         YELLOW_B=1;
  88.                         GREEN_B=0;
  89.                 }
  90.                 else if(scount<RT2+GT2+YT2)//黃燈
  91.                 {
  92.                         P1=DSY_CODE[RT2+GT2+YT2-scount];//數(shù)碼管顯示時間
  93.                         RED_B=1;
  94.                         YELLOW_B=0;
  95.                         GREEN_B=1;
  96.                 }
  97.         }
  98.         else  //晚上 黃燈閃爍
  99.         {
  100.                     RED_A=RED_B=1;
  101.                         YELLOW_A=YELLOW_B=0;
  102.                         GREEN_A=GREEN_B=1;
  103.                    DelayMS(500);
  104.                     RED_A=RED_B=1;
  105.                         YELLOW_A=YELLOW_B=1;
  106.                         GREEN_A=GREEN_B=1;
  107.                    DelayMS(500);
  108.         }
  109. }
  110. void key_pose()  //按鍵處理
  111. {
  112.        
  113.         if(time_flag==1)        //GT1
  114.         {
  115.                 if(k1==0)
  116.                 {
  117.                         DelayMS(5);
  118.                         if(k1==0)
  119.                         {
  120.                                 GT1++;     //時間+
  121.                         }
  122.                         while(!k1);
  123.                 }
  124.                 if(k2==0)
  125.                 {
  126.                         DelayMS(5);
  127.                         if(k2==0)
  128.                         {
  129.                                 GT1--; //時間-
  130.                         }
  131.                         while(!k2);
  132.                 }
  133.                 if(GT1>=9)  //限制時間
  134.                         GT1=9;
  135.                 if(GT1<=3)
  136.                         GT1=3;
  137.                 RED_B=1;
  138.                         YELLOW_B=1;
  139.                         GREEN_B=1;
  140.                 P1=0XFF;
  141.                 P2=DSY_CODE[GT1];//數(shù)碼管顯示時間
  142.                 RED_A=1;
  143.                         YELLOW_A=1;
  144.                         GREEN_A=0;
  145.                         GT2=RT1-YT1;
  146.         YT2=YT1;
  147.         RT2=GT1+YT1;
  148.         }
  149.         else if(time_flag==2)        //RT1
  150.         {
  151.                
  152.                 if(k1==0)
  153.                 {
  154.                         DelayMS(5);
  155.                         if(k1==0)
  156.                         {
  157.                                 RT1++;  //時間+
  158.                         }
  159.                         while(!k1);
  160.                 }
  161.                 if(k2==0)
  162.                 {
  163.                         DelayMS(5);
  164.                         if(k2==0)
  165.                         {
  166.                                 RT1--;//時間-
  167.                         }
  168.                         while(!k2);
  169.                 }
  170.                 if(RT1>=9)  //限制時間
  171.                         RT1=9;
  172.                 if(RT1<=3)
  173.                         RT1=3;
  174.                 P2=DSY_CODE[RT1];//數(shù)碼管顯示時間
  175.                 RED_A=0;
  176.                         YELLOW_A=1;
  177.                         GREEN_A=1;
  178.                
  179.                 //東西南北時間處理
  180.                         GT2=RT1-YT1;
  181.         YT2=YT1;   
  182.         RT2=GT1+YT1;
  183.         }

  184. }
  185. void main()
  186. {
  187.         time_init();//定時器初始化
  188.        
  189.         GT2=RT1-YT1;//東西南北時間處理
  190.         YT2=YT1;
  191.         RT2=GT1+YT1;
  192.         P1=P2=0XFF;
  193.         /*主函數(shù)*/
  194.         while(1)
  195.         {
  196.                 if(time_flag==0)
  197.                    Traffic_lignt();          //交通燈處理函數(shù)
  198.                 key_pose();  //按鍵處理
  199.         }
  200. }
  201. //定時器0服務(wù)函數(shù)
  202. void tim0() interrupt 1
  203. {
  204.         static uchar i;
  205.         TH0=(65536-10000)/256;
  206.         TL0=(65536-10000)%256;
  207.         i++;
  208.         if(i==100)  //時間1S
  209.         {
  210.                 scount++;
  211.                 i=0;
  212.         }
  213. }
  214. //中斷0服務(wù)函數(shù)   模式設(shè)置
  215. void init0() interrupt 0
  216. {
  217.         flag_mode++;
  218.         P1=P2=0XFF;
  219.         if(flag_mode%2)  //默認(rèn)白天
  220.         {
  221.                 TR0=1;
  222.                 scount=0;
  223.         }
  224.         else
  225.                 TR0=0;
  226. }
  227. //中斷1服務(wù)函數(shù)   時間設(shè)置
  228. void init1() interrupt 2
  229. {
  230.         time_flag++;  //時間選擇
  231.         P1=0XFF;
  232.         RED_B=1;
  233.                         YELLOW_B=1;
  234.                         GREEN_B=1;
  235.         if(time_flag>=3)  //
  236.         {
  237.                 time_flag=0;
  238.                 TR0=1;
  239.                 scount=0;
  240.         }
  241.         else
  242.         {
  243.                 TR0=0;
  244.                
  245.         }
  246. }
復(fù)制代碼

所有資料51hei提供下載:
05 LED模擬交通燈.zip (2.84 MB, 下載次數(shù): 35)





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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久草日韩| 成人h动漫精品一区二区器材 | 亚洲成人一区 | 亚洲成av人片在线观看无码 | 成人18亚洲xxoo | 国产亚洲一区二区三区 | 狠狠操你| 成人在线网 | 51ⅴ精品国产91久久久久久 | 国产精品国产三级国产aⅴ入口 | 超碰人人91 | 欧美精品一区二区免费 | 国产一区二区在线免费观看 | 97伦理 | 久久综合九色综合欧美狠狠 | 欧美精品一区二区免费视频 | 欧美美女二区 | 精品一区二区三区av | 久草免费在线视频 | 亚洲永久精品国产 | 成人在线播放网站 | 丝袜美腿一区二区三区动态图 | 一级片毛片| 久久国产精品久久久久久 | 精品久草 | 日韩国产在线观看 | 国产91在线 | 中日 | 在线免费观看成人 | 国产乱码一区 | 欧美日韩在线观看一区 | 精品久久香蕉国产线看观看亚洲 | caoporn视频在线 | 成年人在线视频 | 日韩视频在线播放 | 91高清视频 | 欧美日韩在线一区二区 | 日韩精品影院 | 黄色网页在线 | 日韩一区二区三区av | 97国产一区二区精品久久呦 | 国产综合精品一区二区三区 |