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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1728|回復: 0
收起左側

單片機數碼管系統交通燈程序

[復制鏈接]
ID:512872 發表于 2019-10-3 10:55 | 顯示全部樓層 |閱讀模式
甲乙主從通道實現,另外實現調節時間和暫停運行

單片機源程序如下:
  1. /***********************************************************
  2. 名稱:基于AT89S52數碼管系統交通燈程序
  3. 要求:紅祿燈燈電路,數碼管電路,獨立式鍵盤電路,蜂鳴器電路,統一交通燈設計
  4. 作者:黃*
  5. 時間:2019年9月1日
  6. 電路描述:S1到S5一鍵一功能;S1開始,S2暫停,S3調整時間加,S4調整時間減,S5進入緊急狀態;
  7. ************************************************************/
  8. #include<reg52.h>
  9. #include<intrins.h>
  10. #define uint unsigned int
  11. #define uchar unsigned char

  12. sbit S1=P1^0;  //開始運行按鍵
  13. sbit S2=P1^1;  //暫停運行按鍵
  14. sbit S3=P1^2;  //調整時間加按鍵
  15. sbit S4=P1^3;  //調整時間減按鍵
  16. sbit S5=P1^4;  //進入緊急狀態按鍵
  17. sbit red1=P3^2;  //甲通道紅燈
  18. sbit green1=P3^3;  //甲通道祿燈
  19. sbit yellow1=P3^4;  //甲通道黃燈
  20. sbit red2=P3^5;  //乙通道紅燈
  21. sbit green2=P3^6;  //乙通道祿燈
  22. sbit yellow2=P3^7;  //乙通道黃燈
  23. sbit beep=P3^1;          //蜂鳴器報警控制端

  24. uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        //送段碼0-9
  25. uchar code discode1[]={0x92,0x92,0x88,0x8C,0x8C,0xC0,0x87,0x92}; //送段碼STOP PASS
  26. uchar disbitcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                                   //送位碼
  27. uchar disbuf[2]={0,0};                                                      //顯示緩沖區
  28. uchar cent,second1=60,second=60,second2=30,a;

  29. /*函數申明*/
  30. void display(void);                       
  31. void ini(void);
  32. void t0(void);
  33. void stop(void);

  34. /*************延時程序**************/                                                                                         
  35. void delay(uint m)                 
  36.   {
  37.           while(--m);
  38.   }

  39. /*************初始化程序**************/
  40. void ini(void)                               
  41.          {
  42.                      TMOD=0x01;
  43.                   TH0=(65536-46082)/256;
  44.                   TL0=(65536-46082)%256;
  45.                   ET0=1;
  46.                   EA=1;
  47.          }
  48. /*************顯示緊急通道程序**************/
  49. void stop(void)                  
  50.   {
  51.           uchar i;
  52.           for(i=0;i<8;i++)
  53.          {
  54.                 P0=discode1[i];
  55.                 P2=disbitcode[i];
  56.                 delay(100);       
  57.                 P2=0X00;
  58.         }
  59.   }
  60. /*************顯示程序**************/
  61. void display(void)                  
  62.   {
  63.           uchar i;
  64.           for(i=0;i<2;i++)
  65.          {
  66.                 P0=discode[disbuf[i]];
  67.                 P2=disbitcode[i];
  68.                 delay(100);       
  69.                 P2=0X00;
  70.         }
  71.   }

  72. /*************中斷程序**************/
  73. void t0(void) interrupt 1 using 0     //用第0組寄存器
  74.          {
  75.                  cent++;
  76.                  if(cent==20)
  77.                          {
  78.                            cent=0;
  79.                            second--;
  80.                            if(second==0&&a==0)
  81.                                         {
  82.                                           second=3;
  83.                                           a=1;
  84.                                         }
  85.                                 if(second==0&&a==1)
  86.                                         {
  87.                                           second=second2;
  88.                                           a=2;
  89.                                         }
  90.                                 if(second==0&&a==2)
  91.                                         {
  92.                                           second=3;
  93.                                           a=3;
  94.                                         }
  95.                                 if(second==0&&a==3)
  96.                                         {
  97.                                           second=second1;
  98.                                           a=0;
  99.                                         }        
  100.                         }
  101.                                 disbuf[0]=second%10;  //更新顯示緩沖區
  102.                             disbuf[1]=second/10;  
  103.                         TH0=(65536-46082)/256;
  104.                         TL0=(65536-46082)%256;
  105.          }       
  106. /*************鍵掃描程序**************/
  107. uchar keyscan()
  108. {
  109. uchar tmp;                         //列號,行號
  110. P1=0xff;               //發全行0掃描碼
  111. if((P1&0xff)!=0xff)     //若有鍵按下
  112.   {
  113.    delay(1000);          // 延時去抖   
  114.    if((P1&0xff)!=0xff)          //有鍵按下
  115.        {
  116.                 tmp=(P1&0xff);
  117.             do{}while((P1&0xff)!=0xff);
  118.                 tmp=~tmp;                  
  119.         return (tmp);                         //還回鍵值
  120.                            }                        
  121.     }                                                                                                                       
  122.    return (0);                                //無鍵按下,還回0
  123. }  
  124. /*************主程序**************/

  125. void main(void)
  126.    {
  127.             uchar v,b=0;
  128.          ini();
  129.          v=keyscan();
  130.          while(v==0)
  131.           {
  132.            P0=0X0C;
  133.            P2=0X01;
  134.            P3=0XFF;
  135.            v=keyscan();                           
  136.           }
  137.          if(v==1||v==16)
  138.          {
  139.          while(1)
  140.          {       
  141.      switch(v)
  142.            {
  143.             case 1:          
  144.                           TR0=1;
  145.                           while(v==1||v==0)
  146.                               {
  147.                                   if(a==0)
  148.                                            {
  149.                                 loop1:                yellow2=1;                                               
  150.                                                 red1=1;
  151.                                             green1=0;
  152.                                             red2=0;
  153.                                            }
  154.                                           if(a==1)
  155.                                            {
  156.                                             yellow1=0;
  157.                                                 green1=1;
  158.                                                 delay(100);
  159.                                             yellow1=1;               
  160.                                            }
  161.                                    if(a==2)
  162.                                            {
  163.                                 loop2:            red1=0;
  164.                                                 red2=1;
  165.                                             green2=0;
  166.                                                 yellow1=1;
  167.                                            }
  168.                                           if(a==3)
  169.                                            {
  170.                                             green2=1;
  171.                                                 yellow2=0;
  172.                                                 delay(100);
  173.                                                 yellow2=1;                                                        
  174.                                            }
  175.                                            display();          
  176.                                           v=keyscan();                 //調鍵掃描程序
  177.                                         }
  178.                                    break;

  179.                  case 2:   
  180.                         while(v==2||v==0)
  181.                          {
  182.                                    TR0=0;
  183.                                    display();          
  184.                                    v=keyscan();
  185.                                  }
  186.                                    break;
  187.                  case 4:   
  188.                                    b++;
  189.                    v=keyscan();
  190.                                    break;         
  191.                  case 8:         
  192.                                  if(b%2==0)
  193.                                  {
  194.                           second1++;
  195.                                    if(second1==100)
  196.                                       second1=0;
  197.                                   disbuf[0]=second1%10;  //更新顯示緩沖區
  198.                               disbuf[1]=second1/10;
  199.                                   }
  200.                                 else
  201.                                  {
  202.                           second2++;
  203.                                    if(second2==100)
  204.                                       second2=0;
  205.                                   disbuf[0]=second2%10;  //更新顯示緩沖區
  206.                               disbuf[1]=second2/10;
  207.                                   }                                  
  208.                                   display();          
  209.                                   v=keyscan();
  210.                                  break;
  211.          
  212.            case 16:       
  213.                      if(b%2==0)
  214.                                  {                        
  215.                           second1--;
  216.                                    if(second1==0)
  217.                                        second1=99;
  218.                                   disbuf[0]=second1%10;  //更新顯示緩沖區
  219.                               disbuf[1]=second1/10;
  220.                                  }  
  221.                      else
  222.                                  {                        
  223.                           second2--;
  224.                                    if(second2==0)
  225.                                        second2=99;
  226.                                   disbuf[0]=second2%10;  //更新顯示緩沖區
  227.                               disbuf[1]=second2/10;
  228.                                  }                                                                               
  229.                                   display();          
  230.                                   v=keyscan();
  231.                                   break;

  232.           case 32:       
  233.                     while(v==32||v==0)                   /*顯示八個8*/
  234.                            {
  235.                                    P3=0XFF;
  236.                                    red1=0;
  237.                                    red2=0;
  238.                                    beep=0;
  239.                                    stop();
  240.                                    delay(10000);
  241.                                    beep=1;
  242.                                    v=keyscan();                            //調鍵掃描程序
  243.                  }
  244.                                    break;
  245.          case 64:
  246.                                    second=60;
  247.                                    P3=0XFF;
  248.                                    a=0;
  249.                        goto loop1;
  250.                                     break;
  251.          case 128:
  252.                                    second=30;
  253.                                    P3=0XFF;
  254.                                    a=2;
  255.                        goto loop2;
  256.                                     break;
  257.         }
  258.                                   display();          
  259.                                   v=keyscan();
  260.     }
  261. }
  262. }
復制代碼

所有資料51hei提供下載:
交通燈.zip (29.72 KB, 下載次數: 8)


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本超碰 | 久久777| 亚洲美女一区 | 在线毛片网 | 精品欧美 | 天天干天天爽 | 久久精品福利视频 | 国产探花在线观看视频 | 久久久久国产精品午夜一区 | 成人不卡 | 黄色a三级 | 成人在线播放 | 国产一极毛片 | 亚洲91精品 | 99成人在线视频 | 欧美在线观看免费观看视频 | 999热视频 | 国产成人精品a视频一区www | 久久精品国产一区二区三区 | 日本精品久久 | 色综合色综合色综合 | 黄色三级在线播放 | 在线观看www高清视频 | 免费中文字幕 | 中文字幕在线观看一区 | 精品久久精品 | 日韩在线中文字幕 | 中文字幕亚洲视频 | 老司机午夜性大片 | 国产精品一级在线观看 | 亚洲精品一区二区三区丝袜 | 亚洲精品免费视频 | 久久人人爽人人爽人人片av免费 | 午夜电影福利 | 国产亚洲精品综合一区 | av在线一区二区三区 | 成人免费视频观看视频 | 中文字幕在线免费视频 | 日韩第一区 | 99视频在线 | 午夜视频网 |