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

標(biāo)題: 交通燈仿真工程+程序-帶按鍵-LED數(shù)碼管顯示數(shù)值 [打印本頁]

作者: wfudyz    時(shí)間: 2017-11-8 19:03
標(biāo)題: 交通燈仿真工程+程序-帶按鍵-LED數(shù)碼管顯示數(shù)值
交通燈,僅供參考!

交通燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. bit red,green,yellow,turnred;          //定義紅、黃、綠及轉(zhuǎn)紅標(biāo)志
  3. code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  4.                                         0x7f,0x6f}; //共陰極數(shù)碼管碼表
  5. #define  LIGHT P0
  6. #define  SEG P1
  7. #define  BITR P2
  8. unsigned char Dis_Shiwei;//定義十位
  9. unsigned char Dis_Gewei; //定義個(gè)位
  10. unsigned char second,count=0; //初值60

  11. #define uchar unsigned char
  12. #define uint unsigned int

  13. sbit add=P3^3;                                 //定義東西綠燈時(shí)間加按鍵
  14. sbit sub=P3^4;                                 //定義東西綠燈時(shí)間減按鍵
  15. sbit K1=P3^1;                                 //定義設(shè)定時(shí)間按鍵
  16. sbit add2=P3^5;                             //定義調(diào)南北綠燈時(shí)間加按鍵
  17. sbit sub2=P3^6;                             //定義調(diào)南北綠燈時(shí)間減按鍵


  18. unsigned char timeDX=13,timeNB=15; //定義東西和南北綠燈亮?xí)r可調(diào)變量并賦予初值2S

  19. void delay(unsigned int cnt)          //用于動(dòng)態(tài)掃描數(shù)碼管的延時(shí)程序
  20.         {
  21.         while(--cnt);
  22.         }
  23. /*********************************延時(shí)子程序*************************************/
  24. void DelayMS(unsigned int x)                  //延時(shí)ms
  25. {
  26.     unsigned char t;
  27.     while(x--)
  28.     {
  29.         for(t=120;t>0;t--);
  30.     }
  31. }



  32. void key_scan( )
  33. {
  34.         uchar s1num=0;                        //s1num記錄光標(biāo)的位置的編號(hào)
  35.         
  36.         if(K1==0)
  37.         {
  38.                 DelayMS(5);
  39.                 if(K1==0)
  40.                 {
  41.                         while(!K1);          //menum測(cè)試到由0到1的變化,也就是按下松開的變化,s1num加1
  42.                         s1num++;
  43.                         while(1)
  44.                         {
  45.                                 if(K1==0)
  46.                                 {
  47.                                 DelayMS(5);
  48.                                 if(K1==0)
  49.                                 {
  50.                                 while(!K1);
  51.                                 s1num++;        //menum測(cè)試到由0到1的變化,也就是按下松開的變化,s1num再加1
  52.                                 }
  53.                                 }

  54.                
  55.                
  56.                                 if(s1num==1)
  57.                                 {
  58.                         
  59.                         

  60.                 while(add==0)                                    //如果第一個(gè)按鍵按下東西方向綠燈延續(xù)時(shí)間加1秒
  61.                                         {
  62.                                             DelayMS(10);
  63.                                                 while(add==0);
  64.                                                 timeDX++;
  65.                                                 if(timeDX>60)   //當(dāng)時(shí)間超過60秒將時(shí)間置為60秒
  66.                                                 {timeDX=0;}

  67.                                                 Dis_Shiwei=tab[timeDX/10];//十位顯示值處理
  68.                                                 Dis_Gewei=tab[timeDX%10]; //個(gè)位顯示處理  


  69.                                         }
  70.                         while(sub==0)                                   //如果第二個(gè)按鍵按下東西方向綠燈延續(xù)時(shí)間減1秒
  71.                                         {        
  72.                                                 DelayMS(10);
  73.                                                 while(sub==0);
  74.                                                 timeDX--;
  75.                                                 if(timeDX<=0)           //當(dāng)時(shí)間減到小于或等于0時(shí)將時(shí)間置為1秒
  76.                                                 {timeDX=60;}

  77.                                                 Dis_Shiwei=tab[timeDX/10];//十位顯示值處理
  78.                                                 Dis_Gewei=tab[timeDX%10]; //個(gè)位顯示處理  



  79.                                         }
  80.                     while(add2==0)                                   //如果第三個(gè)按鍵按下南北方向綠燈延續(xù)時(shí)間加1秒
  81.                                         {        
  82.                                                 DelayMS(10);
  83.                                                 while(add2==0);
  84.                                                 timeNB++;
  85.                                                 if(timeNB>60)   //當(dāng)時(shí)間超過60秒將時(shí)間置為60秒
  86.                                                 {timeNB=0;}

  87.                                                  Dis_Shiwei=tab[timeNB/10];//十位顯示值處理
  88.                         Dis_Gewei=tab[timeNB%10]; //個(gè)位顯示處理



  89.                                         }
  90.                         while(sub2==0)                                   //如果第四個(gè)按鍵按下南北方向綠燈延續(xù)時(shí)間減1秒
  91.                                         {                                          
  92.                                                 DelayMS(10);
  93.                                                 while(sub2==0);
  94.                                                 timeNB--;
  95.                                                 if(timeNB<=0)           //當(dāng)時(shí)間減到小于或等于0時(shí)將時(shí)間置為1秒
  96.                                                 {timeNB=60;}

  97.                                                  Dis_Shiwei=tab[timeNB/10];//十位顯示值處理
  98.                         Dis_Gewei=tab[timeNB%10]; //個(gè)位顯示處理

  99.                                            }
  100.                                 }

  101.                                 if(s1num==2)
  102.                                 {

  103.                                 s1num=0;//s1num清零//
  104.                                 break;
  105.                                 }
  106.                         }
  107.                 }
  108.         }
  109. }

  110. void LINGHTLED( )

  111. {
  112.         if (count==100)
  113.             {
  114.             count=0;
  115.             second--;//秒減1
  116.                 if(second==0)
  117.             { //這里添加定時(shí)到0的代碼 ,可以是燈電路,繼電器吸合等,或者執(zhí)行一個(gè)程序
  118.                         if(red)   //紅滅,先轉(zhuǎn)黃
  119.                         {
  120.                                 red=0;
  121.                                 yellow=1;
  122.                                 second=4;
  123.                                 LIGHT=0xdd;//黃燈亮4秒,黃燈為過渡燈,再根據(jù)情況轉(zhuǎn)綠或轉(zhuǎn)紅
  124.                         while(K1==0);        

  125.                         }
  126.             else if(yellow && !turnred)
  127.                                         {
  128.                                         yellow=0;
  129.                                         green=1;
  130.                                         second=timeDX;
  131.                                         LIGHT=0xf3;//綠燈亮25秒,
  132.                                 while(K1==0);        
  133.                                         }
  134.                                 else if(green)
  135.                                                 {
  136.                                                 yellow=1;
  137.                                                 green=0;
  138.                                                 second=4;
  139.                                                 LIGHT=0xeb;//黃燈亮4秒
  140.                                         while(K1==0);        
  141.                                                 turnred=1;

  142.                                                 }
  143.                                                 else if(yellow && turnred)   //綠燈滅,轉(zhuǎn)黃燈,后紅燈,turnred=1時(shí)
  144.                                                         {
  145.                                                         red=1;
  146.                                                         yellow=0;
  147.                                                         LIGHT=0xde;//紅燈亮60秒
  148.                                                 while(K1==0);        
  149.                                                         second=timeNB;
  150.                                                         turnred=0;   //接下來是轉(zhuǎn)黃,綠。
  151.                                                         }
  152.              }

  153.         }

  154.         Dis_Shiwei=tab[second/10];//十位顯示值處理
  155.         Dis_Gewei=tab[second%10]; //個(gè)位顯示處理  







  156. }


  157. void inti( )
  158. {

  159.         TMOD |=0x11;//定時(shí)器設(shè)置 10ms in 12M crystal定時(shí)器0,工作方式1,16位定時(shí)器
  160.         TH0=0xd8;            //65535-10000=55535=D8F0(十六進(jìn)制)
  161.         TL0=0xf0;
  162.         IE= 0x8A; //中斷控制,EA=1開總中斷,ET0=1:定時(shí)器0中斷允許
  163.         IP=0x02;
  164.         TR0=1;    //開定時(shí)器0中斷
  165. TR1=1;    //開定時(shí)器0中斷


  166. }



  167. void main()
  168. {

  169.         
  170. inti( );


  171.         LIGHT=0xde;//紅燈亮,根據(jù)紅黃綠接燈的順序。
  172.         red =1;
  173.    second=timeDX;

  174.         while(1)
  175.         {


  176.          key_scan();//鍵盤掃描程序


  177.    
  178.    LINGHTLED( );






  179.         }
  180. }

  181. /********************************/
  182. /*      定時(shí)中斷                */
  183. /********************************/
  184. void tim(void) interrupt 1
  185. {

  186.         TH0=(65536-10000)/256;//重新賦值,10毫秒定時(shí)
  187.         TL0=(65536-10000)%256;;               
  188.         count++;
  189. }


  190. /********************************/
  191. /*      定時(shí)中斷                */
  192. /********************************/
  193. void tim2(void) interrupt 3
  194. {
  195.         TR1=0;
  196.    TH1=(65536-5000)/256;//重新賦值,5毫秒定時(shí)
  197.         TL1=(65536-5000)%256;;                        
  198.         

  199.         BITR=0xfE;
  200.         SEG=Dis_Shiwei;//顯示十位,這里實(shí)現(xiàn)用8位數(shù)碼管,即左1位
  201.         delay(30);//短暫延時(shí)
  202.         BITR=0XfD;
  203.         SEG=Dis_Gewei; //顯示個(gè)位,左數(shù),2位
  204.         delay(30);

  205.         TR1=1;
  206. …………
  207. …………
  208. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
交通燈.rar (53.16 KB, 下載次數(shù): 49)







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产亚韩 | 精品av| 久久精品一区二 | 特级毛片www | 久久成人一区 | 久久精品一区二 | 久久精品国产99国产精品 | 免费看片在线播放 | av一区二区在线观看 | 日韩高清电影 | 国内av在线| 激情网站在线观看 | 成人免费av | 少妇久久久久 | 毛片免费观看视频 | 凹凸日日摸日日碰夜夜 | 伊人精品在线视频 | 久久久久久精 | 日韩一区不卡 | 91影院在线观看 | av网站在线播放 | 久久精品91 | 色综合色综合色综合 | 亚洲91av | 久久天天躁狠狠躁夜夜躁2014 | 国产精品久久久久久久模特 | 亚洲精品一区在线观看 | 亚洲精品成人 | 一级a性色生活片久久毛片 午夜精品在线观看 | 午夜精品久久 | 久国产精品 | 99在线资源| 日日操日日舔 | 国产一二三视频在线观看 | 四虎影音| 亚洲精品一二区 | 亚洲国产免费 | 毛片免费观看 | 视频一二三区 | 国产二区在线播放 | 一区二区三区四区免费在线观看 |