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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)四項(xiàng)交通燈程序,帶按鍵

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我做的51單片機(jī)交通燈設(shè)計(jì)。
用了一個(gè)多星期,
里面包含了keil源代碼和proteus的仿真圖。






交通燈.rar (97.68 KB, 下載次數(shù): 160)
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar data a[4];
  5. uchar data time_dx=20;//東西數(shù)默認(rèn)
  6. uchar data time_nb=30;//南北默認(rèn)值
  7. uchar data set_timedx=20;//存放設(shè)置的數(shù)值
  8. uchar data set_timenb=30;
  9. int n; uchar data b;//定時(shí)器中斷次數(shù)

  10. sbit k1=P3^4;//時(shí)間加按鍵
  11. sbit k2=P3^5;//時(shí)間減按鍵
  12. sbit k3=P2^7;//確認(rèn)/恢復(fù)按鍵
  13. sbit k4=P3^0;//切換方向按鍵
  14. sbit k5=P3^1;//緊急按鍵(都不通行60s)
  15. sbit k6=P3^2;//東西通行60s (使用外部中斷T0)
  16. sbit k7=P3^3;//南北通行60s (使用外部中斷T1)

  17. sbit Yellow_nb=P2^5; //南北黃燈
  18. sbit Yellow_dx=P2^2; //東西黃燈
  19. sbit Green_nb=P2^4; //東西綠燈
  20. sbit Green_dx=P2^1;//南北綠燈
  21. sbit Red_nb=P2^6;//南北紅燈
  22. sbit Red_dx=P2^3;//東西紅燈
  23. bit time=0;//燈狀態(tài)循環(huán)標(biāo)志
  24. bit set=1;//調(diào)時(shí)方向切換鍵標(biāo)志
  25. uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  26.                        0x7d,0x07,0x7f,0x6f,0x00}; //共陰數(shù)碼管編碼

  27. void key();//按鍵掃描子程序
  28. void key_t1();//鍵處理子程序
  29. void key_t2();
  30. void key_t3();
  31. void display();//顯示子程序
  32. void logo(); //開機(jī) LOGO
  33. void delay(int ms);//延時(shí)子程序

  34. void main()
  35. {
  36.     TMOD=0X01;//使用定時(shí)器T0的模式1
  37.     TH0=0XD8; //定時(shí)器T0的高8位賦初值
  38.     TL0=0XF0;// 定時(shí)器T0的低8位賦初值
  39.     EA=1; //開總中斷
  40.     ET0=1;//定時(shí)器T0中斷允許
  41.     TR0=1;//開定時(shí)器
  42.     EX0=1;//開外部中斷0
  43.     EX1=1;//開外部中斷1
  44.     logo();//調(diào)用logo子程序,顯示開機(jī)logo
  45.     P2=0Xc3;// 開始默認(rèn)狀態(tài),東西綠燈,南北紅燈
  46.     time_nb=time_dx+5; //南北比東西大5s
  47.     while(1)
  48.     {  
  49.         key(); //調(diào)用按鍵掃描程序
  50.                 display(); //調(diào)用顯示程序  
  51.     }
  52. }

  53. void key() //按鍵掃描子程序
  54. {
  55.     if(k1!=1) //k1時(shí)間加
  56.         {  
  57.             delay(10);  
  58.                 if(k1!=1)  
  59.                 {
  60.                     while(k1!=1) //如果檢測到k1按下,則調(diào)用key_to1子程序
  61.                         {
  62.                             key_t1();
  63.                                 for(n=0;n<60;n++)//用一個(gè)循環(huán),延時(shí),以達(dá)到消抖,使每按一次按鈕只加一個(gè)數(shù)
  64.                                 { display();}
  65.                         }  
  66.                 }
  67.         }
  68.         if(k2!=1) //k2時(shí)間減
  69.         {  
  70.             delay(10);  
  71.                 if(k2!=1)  
  72.                 {
  73.                     while(k2!=1) //如果檢測到k2按下,則調(diào)用key_to2子程序
  74.                         {
  75.                             key_t2();
  76.                                 for(n=0;n<60;n++)//用一個(gè)循環(huán),延時(shí),以達(dá)到消抖,使每按一次按鍵只減一個(gè)數(shù)
  77.                                 { display();}
  78.                         }  
  79.                 }
  80.         }
  81.         if(k3!=1)//k3確認(rèn)/恢復(fù)
  82.         {  
  83.             TR0=1; //啟動(dòng)定時(shí)器
  84.         time_nb=set_timenb; //從中斷回復(fù),顯示設(shè)置的數(shù)值
  85.                 time_dx=set_timedx;  
  86.                 if(time==0) //檢測燈循環(huán)標(biāo)志位,若time=0,則南北綠燈,東西紅燈,并南北時(shí)間比東西大5s
  87.                 { P2=0X99;time_nb=time_dx+5; }  
  88.                 else { P2=0xC3;time_dx=time_nb+5; }//否則東西綠燈,南北紅燈,并東西時(shí)間比南北大5s
  89.         }  
  90.         if(k4!=1) //k4切換方向
  91.         {  TR0=0;
  92.            delay(5);  
  93.            if(k4!=1)  
  94.            {while(k4!=1); set=!set;}//如果檢測到k4按下,則改變方向標(biāo)志位set
  95.         }
  96.         if(k5!=1) //k5緊急按鍵,都不通行
  97.         {
  98.             delay(5);
  99.                 if(k5!=1)
  100.                 {
  101.                     while(k5!=1)//如果檢測到k5按下,則調(diào)用key_to3子程序
  102.                         key_t3();
  103.                 }
  104.         }
  105. }

  106. void key_t1() // 加時(shí)間
  107. {
  108.     TR0=0; //關(guān)定時(shí)器
  109.         if(set==0)
  110.             set_timenb++; //南北加 1S
  111.         else
  112.             set_timedx++; //東西加 1S
  113.         if(set_timenb==100)//加到 100時(shí)置 1   
  114.             set_timenb=1;
  115.         if(set_timedx==100)  
  116.             set_timedx=1;  
  117.         time_nb=set_timenb; //設(shè)置的數(shù)值賦給南北
  118.         time_dx=set_timedx;//設(shè)置的數(shù)值賦給東西
  119. }

  120. void key_t2() //減時(shí)間
  121. {
  122.     TR0=0; //關(guān)定時(shí)器
  123.         if(set==0)
  124.             set_timenb--; //南北減 1S
  125.     else
  126.             set_timedx--; //東西減 1S
  127.         if(set_timenb==0)  
  128.             set_timenb=99;
  129.         if(set_timedx==0)  
  130.                 set_timedx=99; //減到 1 時(shí)重置 99
  131.         time_nb=set_timenb ; //設(shè)置的數(shù)值賦給南北
  132.         time_dx=set_timedx;//設(shè)置的數(shù)值賦給東西
  133. }

  134. void key_t3() //緊急(都不通行)
  135. {
  136.     TR0=1; //打開定時(shí)器
  137.         P2=0Xc9;
  138.         time_dx=60;
  139.         time_nb=60;
  140. }

  141. void display() //顯示子程序
  142. {  
  143.      a[0]=time_dx/10; //東西十位
  144.         a[1]=time_dx%10; //東西個(gè)位
  145.         a[2]=time_nb/10; //南北十位
  146.         a[3]=time_nb%10; //南北個(gè)位
  147.         P1=0xff; // 初始燈為滅的
  148.         P0=0x00;
  149.         P1=0xfe; //片選 LCD1
  150.         P0=table[a[0]];
  151.         delay(1);  
  152.         P1=0xff;
  153.         P0=0x00;
  154.         P1=0xfd; //片選 LCD2
  155.         P0=table[a[1]];
  156.         delay(1);
  157.         P1=0xff;
  158.         P0=0x00;
  159.         P1=0Xfb; //片選 LCD3  
  160.         P0=table[a[2]];
  161.         delay(1);  
  162.         P1=0xff;
  163.         P0=0x00;  
  164.         P1=0Xf7;  
  165.         P0=table[a[3]]; //片選 LCD4
  166.         delay(1);
  167. }

  168. void time0(void) interrupt 1 using 1 //定時(shí)中斷子程序
  169. {
  170.     b++;
  171.         if(b==19) // 定時(shí)器中斷次數(shù)
  172.         {
  173.             b=0;  
  174.                 time_dx--;  
  175.                 time_nb--;  
  176.                 if(time_nb<=5&&time==0) //東西黃燈閃
  177.                 {   Green_dx=0;Yellow_dx=!Yellow_dx;}
  178.                 if(time_dx<=5&&time==1) //南北黃燈閃
  179.                 {   Green_nb=0;Yellow_nb=!Yellow_nb;}
  180.         if(time_dx==0&&time_nb==5)  
  181.                 time_dx=5;  
  182.             if(time_nb==0&&time_dx==5)  
  183.                 time_nb=5;
  184.             if(time==0&&time_nb==0)
  185.             {
  186.                 P2=0x99;time=!time;
  187.                     time_nb=set_timenb;
  188.                     time_dx=set_timenb+5;
  189.             }  
  190.             if(time==1&&time_dx==0)  
  191.             {
  192.                 P2=0Xc3;
  193.                     time=!time;
  194.                     time_dx=set_timedx;
  195.                     time_nb=set_timedx+5;
  196.             }  
  197.         }
  198. }

  199. void int0(void) interrupt 0 using 1  //使用外部中斷控制,東西通行,南北不通行
  200. {
  201.     TR0=1;//打開定時(shí)器
  202.         P2=0Xc3;//東西綠燈,南北紅燈  
  203.         time_dx=60;
  204.         time_nb=60;
  205. }

  206. void int1(void) interrupt 2 using 1  //使用外部中斷控制,南北通行,東西不通行
  207. {
  208.     TR0=1; //打開定時(shí)器
  209.         P2=0X99;//南北綠燈,東西紅燈  
  210.         time_nb=60;
  211.         time_dx=60;
  212. }

  213. void logo()//開機(jī)顯示"- -"
  214. {
  215.     for(n=0;n<50;n++)
  216.         { P0=0x40;
  217.       P1=0xfe;
  218.           delay(1);
  219.           P1=0xfd;
  220.           delay(1);
  221.           P1=0Xfb;
  222.           delay(1);
  223.           P1=0Xf7;
  224.           delay(1);
  225.           P1 = 0xff;
  226.           }
  227. }

  228. void delay(int ms) //延時(shí)子程序
  229. {
  230.     uint j,k;
  231.         for(j=0;j<ms;j++)
  232.         for(k=0;k<124;k++);
  233. }        
復(fù)制代碼



請大家多多指教。

評分

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

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:863537 發(fā)表于 2020-12-19 17:40 來自觸屏版 | 只看該作者
謝謝了 最近正在做單片機(jī)設(shè)計(jì) 學(xué)習(xí)!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:79544 發(fā)表于 2021-11-16 17:16 | 只看該作者
樓主辛苦感謝分享!!!!!!!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩久久 | 精品九九 | 亚洲一区二区精品视频在线观看 | 日韩三级免费观看 | 日韩一区二区在线视频 | 天天综合久久 | 国产免费福利小视频 | 精品久久99 | 精品国产成人 | 另类a v| 99精品一区二区 | 久久久久黄色 | 欧美在线视频一区 | 亚洲91视频 | 免费播放一级片 | 久久国产精品免费一区二区三区 | 国产高清在线 | 国产伦精品一区二区三区精品视频 | 黄色一级免费 | 国产成人小视频 | 国产精品影视 | 日韩一区二区三区精品 | a级黄色片在线观看 | 欧美亚洲日本 | 韩日精品视频 | av网站免费在线观看 | 人人干97| 欧美性受xxxx | 久久精品综合 | 亚洲一区成人 | 久久伊人影院 | 国产精品三级久久久久久电影 | 成人免费网站www网站高清 | 欧美在线免费 | 97久久精品午夜一区二区 | 国产精品视频免费观看 | 蜜桃在线视频 | 青青草av在线播放 | 精品欧美一区免费观看α√ | 免费激情av | 天天天插|