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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

簡(jiǎn)單的基于51單片機(jī)交通燈,需要的拿走

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  1. #include <reg51.h>                                //頭文件
  2. #define uchar unsigned char
  3. #define uint  unsigned int                //宏定義

  4. uchar data buf[5];                                        //秒顯示的變量
  5. uchar data sec_dx=20;                          //東西數(shù)默認(rèn)
  6. uchar data sec_nb=20;                        //南北默認(rèn)值
  7. uchar data set_timedx=20;                //設(shè)置東西方向的時(shí)間
  8. uchar data set_timenb=20;                //設(shè)置南北方向的時(shí)間

  9. uchar data countt0,countt1;//定時(shí)器0中斷次數(shù)
  10. //定義6組開關(guān)

  11. sbit  k1=P3^1;               
  12. sbit  k2=P3^4;               
  13. sbit  k3=P3^3;
  14. sbit  k4=P3^0;
  15. sbit Red_nb=P2^6;                //南北紅燈標(biāo)志
  16. sbit Yellow_nb=P2^5;        //南北黃燈標(biāo)志
  17. sbit Green_nb=P2^4;     //南北綠燈標(biāo)志

  18. sbit Red_dx=P2^3;                //東西紅燈標(biāo)志
  19. sbit Yellow_dx=P2^2;        //東西黃燈標(biāo)志
  20. sbit Green_dx=P2^1;                //東西綠燈標(biāo)志
  21.                
  22. bit set=0;                                //調(diào)時(shí)方向切換鍵標(biāo)志 =1時(shí),南北,=0時(shí),東西
  23. bit dx_nb=0;                        //東西南北控制位
  24. bit shanruo=0;                        //閃爍標(biāo)志位
  25. bit key1=1;
  26. bit key2=1;
  27. uchar code table[11]={        0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  28.                         0x7d,0x07,0x7f,0x6f,0x00};

  29. //函數(shù)的聲明部分
  30. void delay(int ms);                        //延時(shí)子程序
  31. void key();                                        //按鍵掃描子程序
  32. void key_to1();                                //鍵處理子程序
  33. void key_to2();
  34. void key_to3();
  35. void display();                                //顯示子程序
  36. //主程序
  37. void main()
  38. {
  39.         TMOD=0X11;                                           //定時(shí)器設(shè)置
  40.         TH1=0X3C;               
  41.         TL1=0XB0;
  42.         TH0=0X3C;                                        //定時(shí)器0置初值 0.05S
  43.         TL0=0XB0;
  44.         EA=1;                                                //開總中斷
  45.         ET0=1;                                                //定時(shí)器0中斷開啟
  46.         ET1=1;                                           //定時(shí)器1中斷開啟
  47.         TR0=1;                                                //啟動(dòng)定時(shí)0
  48.         TR1=1;                                                         //關(guān)閉定時(shí)1
  49.         EX0=1;                                                //開外部中斷0
  50.         EX1=1;                                                //開外部中斷1
  51.   
  52.         P2=0Xc3;                                        // 開始默認(rèn)狀態(tài),東西綠燈,南北黃燈   
  53.                             //默認(rèn)南北通行時(shí)間比東西多5秒
  54.         while(1)                                          //主循環(huán)
  55.         {         
  56.                 key();                                         //調(diào)用按鍵掃描程序
  57.                 display();                                 //調(diào)用顯示程序
  58.         }       
  59. }
  60. //函數(shù)的定義部分
  61. void key(void)        //按鍵掃描子程序
  62. {         
  63.        
  64. if(k1!=1)                                                        //當(dāng)K1(禁止)鍵按下時(shí)
  65. {
  66.          if(dx_nb==0)
  67.         {
  68.                 sec_dx=10;
  69.         sec_nb=10;                       
  70.         }
  71.          if(dx_nb==1)
  72.         {
  73.                 sec_dx=10;
  74.         sec_nb=10;                       
  75.         }
  76. }
  77.         if(k2!=1)                                                        //當(dāng)K2(確認(rèn))鍵按下時(shí)
  78.         {               
  79.          if(dx_nb==0)
  80.                 {  key1=0;
  81.                 sec_dx=10;
  82.         sec_nb=10;               
  83.                 }
  84.                  if(dx_nb==1)
  85.                  {
  86.         TR0=0;                                                                //關(guān)定時(shí)器0
  87.         TR1=0;
  88.         Green_nb=1;
  89.         sec_nb=99;                                                        //四個(gè)方向的時(shí)間都為00
  90.         sec_dx=99;
  91.                 }
  92.         }       
  93. if(k3!=1)                                                        //當(dāng)K2(確認(rèn))鍵按下時(shí)
  94.         {               
  95.          if(dx_nb==1)
  96.                 {  key2=0;
  97.                 sec_dx=10;
  98.         sec_nb=10;               
  99.                 }
  100.                  if(dx_nb==0)
  101.                  {
  102.         TR0=0;                                                                //關(guān)定時(shí)器0
  103.         TR1=0;
  104.         Green_dx=1;
  105.         sec_nb=99;                                                        //四個(gè)方向的時(shí)間都為00
  106.         sec_dx=99;
  107.                 }
  108.         }

  109. void display(void) //顯示子程序
  110. {               
  111.         buf[1]=sec_nb/10;                 //第1位 東西秒十位
  112.         buf[2]=sec_nb%10;                 //第2位 東西秒個(gè)位
  113.         buf[3]=sec_dx/10;                 //第3位 南北秒十位
  114.         buf[0]=sec_dx%10;                 //第4位 南北秒個(gè)位               
  115.         P1=0xff;                          // 初始燈為滅的
  116.         P0=0x00;                                     //滅顯示
  117.        
  118.         P1=0xfe;                           //片選LED1
  119.         P0=table[buf[1]];                //送東西時(shí)間十位的數(shù)碼管編碼                       
  120.         delay(1);                                //延時(shí)
  121.         P1=0xff;                                //關(guān)顯示
  122.         P0=0x00;                                //滅顯示
  123.                                                   
  124.         P1=0xfd;                     //片選LED2
  125.         P0=table[buf[2]];                 //送東西時(shí)間個(gè)位的數(shù)碼管編碼
  126.         delay(1);                                 //延時(shí)
  127.         P1=0xff;                                //關(guān)顯示
  128.         P0=0x00;                                //關(guān)顯示
  129.        
  130.         P1=0Xfb;                                  //片選LED3
  131.         P0=table[buf[3]];        //送南北時(shí)間十位的數(shù)碼管編碼
  132.         delay(1);                                //延時(shí)
  133.         P1=0xff;                                 //關(guān)顯示
  134.         P0=0x00;                                 //關(guān)顯示
  135.        
  136.         P1=0Xf7;                                 //片選LED4       
  137.         P0=table[buf[0]];        //送南北時(shí)間個(gè)位的數(shù)碼管編碼
  138.         delay(1);                                //延時(shí)
  139. }
  140. void time1(void) interrupt 3 using 1
  141. {    TH1=0X3C;                                                        //重賦初值
  142.          TL1=0XB0;
  143.          TR1=1;
  144.        
  145.         if(key1==0&&sec_dx==1)
  146.         {
  147.                
  148.         sec_dx=99;                        //重賦東西方向的起始值
  149.         sec_nb=99;
  150.         Green_dx=0;
  151.                 Green_nb=1;
  152.                 Red_dx=1;
  153.                 Red_nb=0;
  154.                
  155.                 TR0=0;       
  156.         }
  157.         if(key2==0&&sec_nb==1)
  158.         {
  159.                
  160.         sec_dx=99;                        //重賦東西方向的起始值
  161.         sec_nb=99;
  162.         Green_nb=0;
  163.                 Green_dx=1;
  164.                 Red_nb=1;
  165.                 Red_dx=0;
  166.                
  167.                 TR0=0;       
  168.         }
  169. }       
  170. void time0(void) interrupt 1 using 1          //定時(shí)中斷子程序
  171. {
  172.         TH0=0X3C;                                                        //重賦初值
  173.         TL0=0XB0;                                                        //12m晶振50ms//重賦初值
  174.         TR0=1;                                                                //重新啟動(dòng)定時(shí)器
  175.         countt0++;        //軟件計(jì)數(shù)加1

  176.        
  177.         if(countt0==10)                                                //加到10也就是半秒
  178.         {
  179.                 if((sec_dx<=10)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  180.         {
  181.                         Green_dx=0;
  182.                        
  183.                 }                                                  
  184.             if((sec_nb<=10)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  185.         {  
  186.                         Green_nb=0;
  187.                
  188.                 }       
  189.         }
  190.        
  191.                
  192.         if(countt0==20)              // 定時(shí)器中斷次數(shù)=20時(shí)(即1秒時(shí))
  193.         {        countt0=0;                                        //清零計(jì)數(shù)器
  194.                 sec_dx--;                                                //東西時(shí)間減1
  195.                 sec_nb--;                                                //南北時(shí)間減1

  196.                 if((sec_dx<=10)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  197.         {
  198.                         Green_dx=1;
  199.                
  200.                 }                                                  
  201.             if((sec_nb<=10)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  202.         {  
  203.                         Green_nb=1;
  204.                        
  205.                 }                                                                
  206.                
  207.                 if(dx_nb==0&&sec_dx==0)                        //當(dāng)黃燈閃爍時(shí)間倒計(jì)時(shí)到0時(shí),
  208.                 {
  209.                         P2=0x00;                                               //重置東西南北方向的紅綠燈
  210.                         Green_nb=1;
  211.                         Red_dx=1;
  212.                         dx_nb=!dx_nb;
  213.                         shanruo=0;
  214.                         sec_nb=set_timenb;                        //重賦南北方向的起始值
  215.                         sec_dx=set_timenb;                //重賦東西方向的起始值
  216.                 }               
  217.                 if(dx_nb==1&&sec_nb==0)                        //當(dāng)黃燈閃爍時(shí)間到
  218.                 {
  219.                         P2=0X00;                                         //重置東西南北的紅綠燈狀態(tài)
  220.                         Green_dx=1;                         //東西綠燈亮
  221.                         Red_nb=1;                          //南北紅燈亮
  222.                         dx_nb=!dx_nb;         //取反
  223.                         shanruo=0;          //閃爍
  224.                         sec_dx=set_timedx;                        //重賦東西方向的起始值
  225.                         sec_nb=set_timedx;                //重賦南北方向的起始值
  226.                 }
  227.         }       
  228.         if(sec_dx==10&&dx_nb==0)
  229.         {
  230.                 shanruo=1;         
  231.         }
  232.         if(sec_nb==10&&dx_nb==1)
  233.         {
  234.                 shanruo=1;         
  235.         }
  236.        
  237.        
  238.        
  239. }


  240. //外部中斷0

  241. void delay(int ms)                //延時(shí)子程序
  242. {
  243.         uint j,k;
  244.         for(j=0;j<ms;j++)                        //延時(shí)ms
  245.            for(k=0;k<124;k++);                //大約1毫秒的延時(shí)
  246. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:746907 發(fā)表于 2022-3-23 09:49 | 只看該作者
樓主能給個(gè)清楚點(diǎn)的仿真圖嗎?
你這個(gè)壓縮包里沒(méi)有仿真
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: avhd101在线成人播放 | 精品入口麻豆88视频 | 中文字幕电影在线观看 | 亚洲一区电影 | 中文在线一区 | 国产精品自拍视频 | 久久久久久高潮国产精品视 | 国产精品一区二区久久久久 | 综合视频在线 | 免费在线观看91 | 中文字幕一区二区三区在线观看 | 久久久久久国产精品免费免费男同 | 日本电影韩国电影免费观看 | 国产精品一区二区在线观看 | 欧美精品久久 | 色姑娘综合网 | 综合久久99 | 国产精品久久国产精品久久 | 欧美一区二区三区的 | 久久99久久99精品免视看婷婷 | 欧美夜夜| 美女国内精品自产拍在线播放 | 久久久久国产精品一区二区 | 色偷偷888欧美精品久久久 | www.色.com| 国产成人精品区一区二区不卡 | 国产精品美女久久久久久免费 | 色综合色综合色综合 | 69精品久久久久久 | 国产精品美女久久久久久免费 | 四虎影视一区二区 | 亚洲国产成人av | 91精品国产乱码久久久久久 | 逼逼视频 | 在线观看视频一区二区三区 | 久操亚洲 | 日韩在线xx | 一二区电影 | 看亚洲a级一级毛片 | 国产免国产免费 | 本道综合精品 |