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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2146|回復: 1
打印 上一主題 下一主題
收起左側

基于89c51的交通燈

[復制鏈接]
跳轉到指定樓層
樓主
基于89c51的交通燈


單片機源程序如下:
  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. uchar num,num1,key,a,b,c,d;
  14. uint t0,t1;        /*t0,t1,要大于255!!*/       
  15. uchar code table[]={
  16. 0x3f,0x06,0x5b,0x4f,
  17. 0x66,0x6d,0x7d,0x07,
  18. 0x7f,0x6f,0x77,0x7c,
  19. 0x39,0x5e,0x79,0x71,0};


  20. void init();                 //初值函數
  21. void display(uchar a,uchar b,uchar c,uchar d);                //顯示程序
  22. void Keyscan();                //  按鍵

  23. void delay (uint z)           //延時函數
  24. {
  25.         uint x,y;
  26.         for(x=z;x>0;x--)
  27.                 for(y=110;y>0;y--);
  28. }
  29. void main()//主函數
  30. {       
  31.        
  32.         init();
  33.         while(1)
  34.         {
  35.                 display(a,b,c,d);
  36.                 Keyscan();
  37.                 if(key)                  //如果有按鍵按下,
  38.                 {
  39.                         TR0=0;
  40.                         TR1=0;                  //不計時
  41.                         P0=table[9];         //顯示99
  42.                         P2=0;                         //全部顯示
  43.                         if(key==1)                  //東西方向
  44.                         {
  45.                                 P1=0xde;          //LED狀態
  46.                         }
  47.                         if(key==2)                  //南北方向
  48.                         {
  49.                                 P1=0xf3;        //LED狀態
  50.                         }
  51.                
  52.                                        
  53.                         }
  54.                         while(key)
  55.                         {
  56.                                 Keyscan();           //等待按下正常
  57.                         }
  58.                
  59.                                
  60.                         TR0=1;
  61.                         TR1=1;
  62.                 }
  63.         }               

  64. void Keyscan()
  65. {
  66.         uchar temp;
  67.         temp=P3;
  68.         while(temp!=0xff)
  69.         {
  70.                 delay(5);                                //延時,消抖
  71.                 temp=P3;                                        //再次確認是否有健按下
  72.                 temp=temp&0xff;
  73.                 while(temp!=0xff)
  74.                 {
  75.                         temp=P3;

  76.                         switch(temp)
  77.                         {
  78.                                 case 0xfe:key=1;         //
  79.                                         break;
  80.                                 case 0xfd:key=2;
  81.                                         break;
  82.                                 case 0xfb:key=0;
  83.                                         break;
  84.                         }
  85.                         while(temp!=0xff)                        //松手檢測
  86.                         {
  87.                                 temp=P3;
  88.                                 temp=temp&0xff;
  89.                         }
  90.                 }
  91.         }
  92. }
  93. void init()                 //改初值函數
  94. {
  95.         g1=ON;
  96.         y1=OFF;
  97.         l1=OFF;
  98.         g2=OFF;
  99.         y2=OFF;
  100.         l2=ON;
  101.         num=20;
  102.         num1=23;
  103.         a=num/10;
  104.         b=num%10;
  105.         c=num1/10;
  106.         d=num1%10;
  107.         TMOD=0x11;
  108.         TH0=(65536-50000)/256;
  109.         TL0=(65536-50000)%256;
  110.         TH1=(65536-50000)/256;
  111.         TL1=(65536-50000)%256;
  112.         EA=1;
  113.         ET0=1;
  114.         ET1=1;
  115.         TR0=1;
  116.         TR1=1;
  117. }
  118. void timer0() interrupt 1                 //定時器0中斷              控制東西時間
  119. {
  120.         TH0=(65536-50000)/256;
  121.         TL0=(65536-50000)%256;
  122.         t0++;
  123.         if(t0%20==0)                  //每一秒進入 一次
  124.         {
  125.                 if(t0<=400)                 //綠燈        時間
  126.                 {
  127.                         num--;
  128.                         if(num==0)           //綠燈結束,開黃燈
  129.                         {
  130.                                 num=3;
  131.                                 g1=OFF;
  132.                                 y1=ON;
  133.                                 l1=OFF;
  134.                         }
  135.                 }
  136.                 if(t0>400&&t0<=460)         //黃燈時間
  137.                 {
  138.                         num--;
  139.                         if(num==0)                 //黃燈結束,開紅燈
  140.                         {
  141.                                 num=23;
  142.                                 g1=OFF;
  143.                                 y1=OFF;
  144.                                 l1=ON;
  145.                         }
  146.                 }
  147.                 if(t0>460&&t0<=920)          //紅燈時間
  148.                 {
  149.                         num--;
  150.                         if(num==0)                //紅燈結束,開綠燈
  151.                         {
  152.                                 num=20;
  153.                                 g1=ON;
  154.                                 y1=OFF;
  155.                                 l1=OFF;
  156.                         }
  157.                 if(t0==920)
  158.                                 t0=0;       
  159.                 }
  160.                 a=num/10;
  161.                 b=num%10;
  162.         }
  163. }

  164. void timer1() interrupt 3                 //定時器1中斷     控制南北時間     
  165. {
  166.         TH1=(65536-50000)/256;
  167.         TL1=(65536-50000)%256;
  168.         t1++;
  169.         if(t1%20==0)
  170.         {
  171.                 if(t1<=460)
  172.                 {                                             
  173.                         num1--;
  174.                         if(num1==0)
  175.                         {
  176.                                 num1=20;
  177.                                 g2=ON;
  178.                                 y2=OFF;
  179.                                 l2=OFF;
  180.                         }
  181.                 }
  182.                 if(t1>460&&t1<=860)
  183.                 {
  184.                         num1--;
  185.                         if(num1==0)
  186.                         {
  187.                                 num1=3;
  188.                                 g2=OFF;
  189.                                 y2=ON;
  190.                                 l2=OFF;
  191.                         }
  192.                 }
  193.                 if(t1>860&&t1<=920)
  194.                 {
  195.                         num1--;
  196.                         if(num1==0)
  197.                         {
  198.                                 num1=23;
  199.                                 g2=OFF;
  200.                                 y2=OFF;
  201.                                 l2=ON;
  202.                         }
  203.                         if(t1==920)
  204.                                 t1=0;
  205.                 }
  206.                 c=num1/10;
  207.                 d=num1%10;
  208.         }
  209. }
  210. /*void display(uchar a,uchar b,uchar c,uchar d)        //顯示程序
  211. {
  212.       
  213.         P0=table[a];
  214.         P2=1;
  215.         delay(1);
  216.         P2=255;

  217.         P0=table[b];
  218.         P2=2;
  219.         delay(1);
  220.         P2=255;

  221.         P0=table[c];
  222.         P2=4;
  223.         delay(1);
  224.         P2=255;

  225.         P0=table[d];
  226.         P2=8;
  227.         delay(1);
  228.         P2=255;

  229. }
  230. */
  231. void display(uchar a,uchar b,uchar c,uchar d)        //顯示程序
  232. {
  233.       
  234.         P0=table[a];
  235.         P2=0xfe;
  236.         delay(1);
  237.         P2=0xff;

  238.         P0=table[b];
  239.         P2=0xfd;
  240.         delay(1);
  241.         P2=0xff;

  242.         P0=table[c];
  243.         P2=0xfb;
  244.         delay(1);
  245.         P2=0xff;

  246.         P0=table[d];
  247.         P2=0xf7;
  248.         delay(1);
  249.         P2=0xff;

  250. }
復制代碼

所有資料51hei提供下載:
王建寶.zip (62.96 KB, 下載次數: 23)


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

使用道具 舉報

沙發
ID:1085175 發表于 2023-7-3 22:21 | 只看該作者
好厲害,也很全,謝謝分享我會學習的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91免费高清| 成人h视频在线 | 亚洲欧美一区二区三区1000 | 精品国产一区二区在线 | 欧美电影在线 | 91免费高清 | 欧美日韩久| 男女羞羞视频在线观看 | 天天射视频 | 99精品视频网 | 欧美日韩精品中文字幕 | 黄色片在线看 | 久久国产精品偷 | 日韩一区二区三区在线视频 | 精品国产18久久久久久二百 | 理论片午午伦夜理片影院 | 亚洲风情在线观看 | xx视频在线 | 精品免费国产一区二区三区 | 久久新视频| 国产精品一区三区 | 在线伊人网 | 欧美 日韩 国产 一区 | 国产在线二区 | 日本五月婷婷 | 欧美日韩视频在线 | 国产精品久久影院 | 精品国产伦一区二区三区观看体验 | 国产高清免费视频 | 精久久久| 中文字幕二区 | 久久久久国产一级毛片 | 天天看天天爽 | 精品国产一区二区在线 | 欧美激情五月 | 国产精品视频网址 | 水蜜桃久久夜色精品一区 | 激情影院久久 | 亚洲日韩中文字幕一区 | 天天操天天拍 | 成年视频在线观看福利资源 |