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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的紅綠燈Proteus仿真設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)模擬紅綠燈仿真原理圖如下(proteus仿真工程和程序文件可到本帖附件中下載)

單片機(jī)代碼如下:
  1. #include<reg52.h>  

  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define ON 0
  5. #define OFF 1
  6.         
  7.         sbit g1=P1^0;
  8.         sbit y1=P1^1;
  9.         sbit l1=P1^2;
  10.         sbit g2=P1^3;
  11.         sbit y2=P1^4;
  12.         sbit l2=P1^5;
  13.          
  14.         uchar num,num1,key,a,b,c,d;
  15.         uint t0,t1; /*t0,t1,要大于255!!*/  
  16.         uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0};
  17.         /*uchar code table[]={ 0xf9,0xdb,0xa4,0xb0,0x80,0x90,0x88,0x83,0x99,0x92,0x82,0xf8, 0xc6,0xa1,0x86,0x8e,0xff};*/  
  18.         
  19. void init();                 //初值函數(shù)
  20.         
  21. void display(uchar a,uchar b,uchar c,uchar d);  //顯示程序
  22.         
  23. void Keyscan();  
  24.         
  25. void delay (uint z)           //延時(shí)函數(shù)
  26. {
  27.          uint x,y;  
  28.         for(x=z;x>0;x--)   
  29.                 for(y=110;y>0;y--);
  30. }

  31. void main()
  32. {     
  33.         init();  
  34.         while(1)  
  35.         {
  36.                   display(a,b,c,d);   
  37.                 Keyscan();
  38.                   if(key)    //如果有按鍵按下,   
  39.                 {   
  40.                         TR0=0;
  41.                            TR1=0;    //不計(jì)時(shí)   
  42.                         P0=table[9];  //顯示99   
  43.                         P2=0;    //全部顯示   
  44.                         if(key==1)    //東西方向   
  45.                         {
  46.                             P1=0xde;   //LED狀態(tài)   
  47.                         }
  48.                            if(key==2)    //南北方向   
  49.                         {
  50.                             P1=0xf3; //LED狀態(tài)   
  51.                         }
  52.                            while(key)   
  53.                         {
  54.                             Keyscan();    //等待按下正常  
  55.                           }
  56.                            if(t0<=400)
  57.                             P1=0xde;      //11 01 1 110  綠紅   
  58.                         else if(t0>400&&t0<=460)
  59.                             P1=0xdd;      //11 01 1 101    黃紅   
  60.                         else if(t0>460&&t0<=920)
  61.                      if(t1>860)       //南北為黃燈        
  62.                                 P1=0xeb;      //11 10 1 011      
  63.                         else
  64.                                 P1=0xf3;        //11 11 0 011         
  65.                                 TR0=1;   
  66.                                 TR1=1;   
  67.                 }  
  68.         }   
  69. }  

  70. void Keyscan()
  71. {
  72.          uchar temp;  
  73.         temp=P3;
  74.          while(temp!=0xff)  
  75.         {
  76.                   delay(5);    //延時(shí),消抖
  77.                   temp=P3;     //再次確認(rèn)是否有健按下
  78.                   temp=temp&0xff;   
  79.                 while(temp!=0xff)   
  80.                 {
  81.                            temp=P3;  
  82.                            switch(temp)   
  83.                         {
  84.                             case 0xfe:key=1;      break;     
  85.                                 case 0xfd:key=2;      break;     
  86.                                 case 0xfb:key=0;      break;   
  87.                         }
  88.                            while(temp!=0xff)   //松手檢測   
  89.                         {
  90.                             temp=P3;     
  91.                                 temp=temp&0xff;   
  92.                         }   
  93.                 }  
  94.         }
  95. }
  96.          
  97. void init()                 //初值函數(shù)
  98. {
  99.         g1=ON;  
  100.         y1=OFF;  
  101.         l1=OFF;  
  102.         g2=OFF;  
  103.         y2=OFF;  
  104.         l2=ON;  
  105.         num=20;  
  106.         num1=25;  
  107.         a=num/10;  
  108.         b=num%10;  
  109.         c=num1/10;  
  110.         d=num1%10;
  111.          
  112.         TMOD=0x11;
  113.          TH0=(65536-50000)/256;  
  114.         TL0=(65536-50000)%256;  
  115.         TH1=(65536-50000)/256;  
  116.         TL1=(65536-50000)%256;  
  117.         EA=1;  
  118.         ET0=1;  
  119.         ET1=1;  
  120.         TR0=1;  
  121.         TR1=1;
  122. }

  123. void timer0() interrupt 1   //定時(shí)器0中斷
  124. {
  125.         TH0=(65536-50000)/256;  
  126.         TL0=(65536-50000)%256;  
  127.         t0++;
  128.         if(t0%20==0)    //每一秒進(jìn)入 一次  
  129.         {
  130.                   if(t0<=400)   //綠燈 時(shí)間   
  131.                 {   
  132.                         num--;
  133.                            if(num==0)    //綠燈結(jié)束,開黃燈   
  134.                         {     
  135.                                 num=5;     
  136.                                 g1=OFF;     
  137.                                 y1=ON;     
  138.                                 l1=OFF;   
  139.                         }   
  140.                 }
  141.                  if(t0>400&&t0<=500)  //黃燈時(shí)間   
  142.                 {   
  143.                         num--;
  144.                            if(num==0)   //黃燈結(jié)束,開紅燈   
  145.                         {
  146.                             num=25;     
  147.                                 g1=OFF;
  148.                                 y1=OFF;     
  149.                                 l1=ON;   
  150.                         }   
  151.                 }
  152.                   if(t0>500&&t0<=1000)   //紅燈時(shí)間   
  153.                 {   
  154.                         num--;
  155.                            if(num==0)  //紅燈結(jié)束,開綠燈   
  156.                         {
  157.                             num=20;     
  158.                                 g1=ON;     
  159.                                 y1=OFF;     
  160.                                 l1=OFF;   
  161.                         }   
  162.                         if(t0==1000)     
  163.                         t0=0;   
  164.                 }   
  165.                 a=num/10;   
  166.                 b=num%10;  
  167.         }
  168. }  

  169. void timer1() interrupt 3   //定時(shí)器1中斷
  170. {
  171.         TH1=(65536-50000)/256;  
  172.         TL1=(65536-50000)%256;  
  173.         t1++;  
  174.         if(t1%20==0)  
  175.         {
  176.                 if(t1<=500)   
  177.                 {
  178.                            num1--;   
  179.                         if(num1==0)   
  180.                         {
  181.                             num1=20;     
  182.                                 g2=ON;     
  183.                                 y2=OFF;     
  184.                                 l2=OFF;   
  185.                         }   
  186.                 }
  187.                   if(t1>500&&t1<=900)   
  188.                 {
  189.                            num1--;   
  190.                         if(num1==0)   
  191.                         {
  192.                             num1=5;     
  193.                                 g2=OFF;     
  194.                                 y2=ON;
  195.                                 l2=OFF;   
  196.                         }  
  197.                 }
  198.                   if(t1>900&&t1<=1000)   
  199.                 {
  200.                            num1--;   
  201.                         if(num1==0)   
  202.                         {
  203.                             num1=25;     
  204.                                 g2=OFF;     
  205.                                 y2=OFF;     
  206.                                 l2=ON;   
  207.                         }
  208.                            if(t1==1000)     
  209.                         t1=0;   
  210.                 }
  211.                   c=num1/10;   
  212.                 d=num1%10;  
  213.         }
  214. }

  215. /*void display(uchar a,uchar b,uchar c,uchar d) //顯示程序
  216. {         
  217.         P0=table[a];  P2=1;  delay(1);  P2=255;  
  218.          P0=table[b];  P2=2;  delay(1);  P2=255;  
  219.          P0=table[c];  P2=4;  delay(1);  P2=255;  
  220.          P0=table[d];  P2=8;  delay(1);  P2=255;  } */

  221. void display(uchar a,uchar b,uchar c,uchar d) //顯示程序
  222. {  
  223.         P0=table[a];  P2=0xfe;  delay(1);  P2=0xff;  
  224.          P0=table[b];  P2=0xfd;  delay(1);  P2=0xff;  
  225.          P0=table[c];  P2=0xfb;  delay(1);  P2=0xff;  
  226.          P0=table[d];  P2=0xf7;  delay(1);  P2=0xff;  
  227. }
復(fù)制代碼
全部資料51hei下載地址:
紅綠燈(proteus仿真+程序).rar (77.63 KB, 下載次數(shù): 35)

評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清黄色 | 国产精品久久久久久久久免费樱桃 | 亚洲另类春色偷拍在线观看 | 日韩中文不卡 | 黄色国产 | 亚洲精品福利在线 | 久久久久国产一区二区三区 | 久久综合久色欧美综合狠狠 | 亚洲欧美成人 | 欧美一级免费看 | 中文字幕一区二区三区乱码在线 | 日本不卡高字幕在线2019 | 中文字字幕一区二区三区四区五区 | 在线视频日韩精品 | 黑人一级黄色大片 | 国产精品无码专区在线观看 | 在线不卡视频 | 日日噜噜噜夜夜爽爽狠狠视频97 | 国产欧美精品一区二区色综合朱莉 | 欧美福利视频一区 | 丝袜 亚洲 欧美 日韩 综合 | 91久久久久 | 91精品国产91久久久久久吃药 | 久久久精品一区二区三区四季av | 色综合天天天天做夜夜夜夜做 | 国产露脸对白88av | 天天爱av| 日本精品一区二区三区四区 | 中文字幕av网站 | 亚洲精品欧美 | 在线看av的网址 | 久久久久91| 91视频在线看 | 国产精品a久久久久 | h片在线免费观看 | 国产精品欧美一区二区三区 | 美女一区| 一区二区av | 九色porny自拍视频 | 国产乱码精品一区二区三区中文 | 中文字幕人成乱码在线观看 |