单片机驱动8位数码管怎么让其中2位闪烁,求助大佬

单片机驱动8位数码管怎么让其中2位闪烁,求助大佬,现在情况是只能整体闪烁不知道怎么控制其中2位闪烁 代码如下 #include  “reg52.h&…

单片机驱动8位数码管怎么让其中2位闪烁,求助大佬,现在情况是只能整体闪烁不知道怎么控制其中2位闪烁
代码如下

  1. #include  “reg52.h”
  2. sbit  a=P2^2;
  3. sbit  b=P2^3;
  4. sbit  c=P2^4;
  5. sbit  k1=P3^0;
  6. sbit  k2=P3^1;
  7. sbit  k4=P3^3;
  8. sbit  k8=P3^7;
  9.    unsigned  char  i=0;
  10.    unsigned  int   l=0;
  11.    unsigned   int  flag=0;
  12.    unsigned   int  cishu=1;
  13.    unsigned    ssec=0,sec=5,min=0;
  14.    unsigned   DisplayData[8];
  15.    unsigned code  dongtai[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16.                                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  17.      void  delay(unsigned  int  i)
  18.      {
  19.         while(i–);
  20.      }
  21.             void Timer0Init()
  22.           {
  23.             
  24.                          TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
  25.             TH0=0Xd8;        //给定时器赋初值,定时10ms
  26.                 TL0=0Xf0;        
  27.                 ET0=1;//打开定时器0中断允许
  28.                 EA=1;//打开总中断
  29.                 TR0=1;//打开定时器                        
  30.           }
  31.                      void Timer1Init()
  32.             {
  33.                     TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
  34.                     TH1=0XFC;        //给定时器赋初值,定时1ms
  35.                     TL1=0X18;        
  36.                     ET1=1;//打开定时器1中断允许
  37.                     EA=1;//打开总中断
  38.                     TR1=1;//打开定时器                        
  39.             }
  40.   void  aaa()
  41. {
  42.         DisplayData[4]=dongtai[min/10];
  43.         DisplayData[5]=dongtai[min%10]+0x80;
  44.         DisplayData[6]=dongtai[sec/10];
  45.         DisplayData[7]=dongtai[sec%10];
  46.          
  47.             DisplayData[0]=dongtai[cishu];        
  48.             DisplayData[1]=0x80;
  49.             DisplayData[2]=0x80;
  50.             DisplayData[3]=0x80;
  51.          
  52.          
  53.            if(min==0&&sec==0)
  54.             {
  55.                    DisplayData[4]= 0x3f;
  56.                    DisplayData[5]= 0x3f+0x80;
  57.                    DisplayData[6]= 0x3f;
  58.                    DisplayData[7]= 0x3f;
  59.             }
  60. }
  61.   void  abc()
  62. {
  63.         for(i=0;i<8;i++)
  64.         { switch(i)
  65.           { case(0): a=0;b=0;c=0; break;
  66.             case(1): a=1;b=0;c=0; break;
  67.             case(2): a=0;b=1;c=0; break;
  68.                 case(3): a=1;b=1;c=0; break;
  69.                 case(4): a=0;b=0;c=1; break;
  70.                 case(5): a=1;b=0;c=1; break;
  71.                 case(6): a=0;b=1;c=1; break;
  72.                 case(7): a=1;b=1;c=1; break;
  73.           }
  74.            if(l==1&&(i==0||i==1))
  75.            {
  76.                   Timer1Init();
  77.                            
  78.            }            
  79.           P0=DisplayData[i];
  80.                   
  81.                 delay(100);  
  82.                 P0=0x00;
  83.         
  84.     }                 
  85. }
  86.   void  main()
  87. {
  88.              P0=0x00;
  89.          while(1)
  90.        {  
  91.                    if(k1!=0xFF)
  92.                    delay(1000);
  93.                    if(k1!=0xFF)
  94.                   {                        
  95.                       flag++;
  96.                       if(flag==1)
  97.                         {
  98.                                        
  99.                     }
  100.                    else  if(flag>1)
  101.                   {
  102.                           flag=1;
  103.                           cishu++;
  104.                           if(cishu>=9)
  105.                         {
  106.                             cishu=1;
  107.                     }
  108.                   }
  109.                           Timer0Init();
  110.                                  sec=5;
  111.                             min=0;
  112.                  }  
  113.                  while(!k1);
  114.                              
  115.                   
  116.                    if(k2!=0xFF)
  117.                    delay(30000);
  118.                    if(k2!=0xFF)
  119.                   {                 
  120.                          l++;
  121.                          while(!k2);
  122.                           if(l>=5)
  123.                           {
  124.                            l=0;
  125.                           }
  126.                   }
  127.                   
  128.                   
  129.                   abc();        
  130.                   aaa();
  131.            }                                 
  132. }         
  133.    void Timer0() interrupt 1
  134. {
  135.         TH0=0Xd8;        //给定时器赋初值,定时10ms
  136.         TL0=0Xf0;
  137.         
  138.         ssec++;
  139.         if(ssec>=100)  //1s
  140.         {
  141.           ssec=0;
  142.           sec–;        
  143.           if(sec<=0)
  144.          {
  145.             if(min>0)
  146.            {
  147.                  sec=60;
  148.              min–;
  149.            }
  150.                 if(min<=0)
  151.            {         
  152.                    if(sec==0)
  153.                   {
  154.                       TR0=0;
  155.                   }
  156.            }
  157.          }
  158.         }
  159. }
  160.   void Timer1() interrupt 3
  161. {
  162.         static unsigned  int  j=0;
  163.         TH1=0XFC;        //给定时器赋初值,定时1ms
  164.         TL1=0X18;         
  165.         j++;  
  166.         if(j>=500)         
  167.         {
  168.                 j=0;
  169.           P0=0x00;
  170.           delay(20000);
  171.                   
  172.         }        
  173. }   

复制代码

   

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115