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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機倒計時程序,數碼管閃爍太快,該怎么解決啊?

[復制鏈接]
跳轉到指定樓層
樓主

數碼管在設置時狂閃,該怎樣解決啊,或者說調慢點

單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

#define duan P1               
#define wei  P3      
sbit key1 = P2^3;  
sbit key2 = P2^4;
sbit key3 = P2^5;  
sbit key4 = P2^6;
sbit key5 = P2^7;  
sbit out  = P2^2;  
sbit di   = P2^0;  

bit flag=0,flag1=0,shan=0;
uchar knum,shan_cont,i;
uchar shi=0,fen=0,miao=0;  
uint cont,cont1,cont2;
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
                  
uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      
                                   
uchar LedBuff[]={0,0,0,0,0,0,0,0};                                 

void init()               
{
        TMOD |= 0x01;         
        TH0 = (65536-1000)/256;
        TL0 = (65536-1000)%256;
        EA = 1;                       
        ET0 = 1;                       
        TR0 = 1;                        
}

void dis()        
{
        LedBuff[0] = duanma[miao%10];
        LedBuff[1] = duanma[miao/10];
        LedBuff[2] = 0x40;
        LedBuff[3] = duanma[fen%10];
        LedBuff[4] = duanma[fen/10];
        LedBuff[5] = 0x40;
        LedBuff[6] = duanma[shi%10];
        LedBuff[7] = duanma[shi/10];
}


void keysan()      
{
        static bit  kf1=0,kf2=0,kf3=0;
        static uint i=0,j=0,k=0,l=0,m=0        if(knum==0)                       
        {
            if(key4 == 1)      
            {
                m=0;               
                kf2=0;                  
            
            }
            else if(kf2 == 0
            {
                ++m;  
                if( (m>20) && ((miao != 0) || (fen != 0) || (shi != 0)) )
                {      
                       
                m=0;      
                kf2=1;               
                flag = !flag;
                out  = !out;  
                }
            }        
        }         
        if(out==1)   
        {
            if(key1==1)  
            {
                i=0;         
                kf1=0;      
            }
            else if(kf1 == 0)
            {
                ++i;                  
                if(i>12)
                {
                    i=0;                  
                    kf1=1;   
                    knum++;      
                    if(knum==4) knum = 0;
                }        
            }
        }               
        if(key2==0)                  
        {
                j++;
                if(j >= 3000)        
                                       
                                 {                    
                                        if(knum==1)
                                       
                        {
                            miao++;                                       
                            if(miao==60) miao = 0;        
                                                                                         
                        }
      
                        if(knum==2)
                        {
                        fen++;                                       
                        if(fen==60) fen=0;               
                        }
      
                        if(knum==3)
                        {
                        shi++;                                       
                        if(shi==24) shi=0;               
                        }
      
                        j=100;           
                }                        
        }                                                                                          
        else                                                                        
        {
                        if(knum==1)
                        {
                            miao++;                                       
                            if(miao==60) miao = 0;        
                        }
      
                        if(knum==2)
                        {
                        fen++;                                       
                        if(fen==60) fen=0;               
                        }
      
                        if(knum==3)
                        {
                        shi++;                                       
                        if(shi==24) shi=0;               
                        }
                        j=0;
      
        }        
///////
        if(key3==0)                 
        {
        k++;
        if(k >= 3000)           
        {                                                
            if(knum==1)
            {
                miao--;                                         
                if(miao==255) miao = 59;
            }      
            if(knum==2)
            {
                fen--;                                         
                if(fen==255) fen=59;         
            }      
            if(knum==3)
            {
                    shi--;                                 
                    if(shi==255) shi=23;
            }      
            k=100;
        }
        }               
        else
        {
        if(k>500 && k<3000)
        {
            if(knum==1)
            {
                miao--;                                         
                if(miao==255) miao = 59;
            }      
            if(knum==2)
            {
                fen--;                                         
                if(fen==255) fen=59;         
            }      
            if(knum==3)
            {
                    shi--;                                 
                    if(shi==255) shi=23;
            }
        }
                k=0;        
        }
//////
}


void main()
{
        init();                        
        out = 1;
        while(1)
        {
            keysan();        
            dis();               
            if(shi==0 && fen==0 && miao==0 && flag == 1 )  
            {
                flag=0;   
                flag1=1;  
                out=1;   
            }
        }        
}

void timer() interrupt 1
{
        TH0 = (65536-1000)/256;         
        TL0 = (65536-1000)%256;
//////
        if(flag)
        {
                cont++;
                if(cont == 1000)                  
                {
                    cont = 0;                                 
                    miao--;                                         
                    if(miao==255)                        
                    {
                            miao=59;
                            fen--;                                 
                            if(fen==255)                 
                            {
                            fen=59;
                            shi--;                        
                            if(shi==255) shi=0;                  
                            if(shi==0) fen=59;                  
                            if(fen==0 && shi==0) fen=0;
                            }
                    }
                }
        }
//////////
        if(flag1)              
        {
            cont1++;
            if(cont1==500)
            {
                cont1=0;
                di=!di;
                cont2++;
                if(cont2==20)
                {
                        cont2=0;
                        flag1=0;
                }
            }
        }
///////////
        if(knum != 0)
        {
            shan_cont++;
            if(shan_cont==100)  
            {
                shan_cont=0;
                shan = !shan;
            }
        }

        i++;                          
        if(i>=8) i=0;         
        duan = 0x00;         
        switch(i)
        {
            case 0:
                    if(knum==1)
                    {
                                         if(shan==1) {wei = 0x00; duan = LedBuff[0];}  
                                         
                     else {wei = weima[0]; duan = LedBuff[0];}
                    }
                    else{wei = weima[0]; duan = LedBuff[0];}        break;        
            case 1:                                   
                    if(knum==1)        
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[1];}   
                     else{wei = weima[1]; duan = LedBuff[1];}
                    }
                    else{wei = weima[1]; duan = LedBuff[1];}  break;        

            case 2:  wei = weima[2]; duan = LedBuff[2];        break;        
            case 3:        
                    if(knum==2)
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[3];}   
                     else{wei = weima[3]; duan = LedBuff[3];}
                    }
                    else{wei = weima[3]; duan = LedBuff[3];}    break;

            case 4:        
                    if(knum==2)
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[4];}  
                     else{wei = weima[4]; duan = LedBuff[4];}
                    }
                    else{wei = weima[4]; duan = LedBuff[4];}        break;        
            case 5:  wei = weima[5]; duan = LedBuff[5];        break;               
            case 6:        
                    if(knum==3)
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[6];}
                     else{wei = weima[6]; duan = LedBuff[6];}
                    }
                    else{wei = weima[6]; duan = LedBuff[6];}        break;
            case 7:        
                    if(knum==3)
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[7];}   
                     else{wei = weima[7]; duan = LedBuff[7];}
                    }
                    else{wei = weima[7]; duan = LedBuff[7];}        break;           
            default: break;        

        }
}


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

使用道具 舉報

沙發
ID:161164 發表于 2022-1-5 16:51 | 只看該作者
uint shan_cont;//<<<<<<<<<<<<<<<<<<<<<<<
///////////
    if(knum != 0)
    {
        shan_cont++;
        if(shan_cont == 10000)//<<<<<<<<<<<<<<<<<<<<<<<<
        {
            shan_cont = 0;
            shan = !shan;
        }
    }
回復

使用道具 舉報

板凳
ID:999060 發表于 2022-1-5 19:48 | 只看該作者

修改之后還是一樣的呀,是不是我程序寫的有問題啊?孩子蒙了求指教
回復

使用道具 舉報

地板
ID:161164 發表于 2022-1-6 00:09 | 只看該作者
uhl0 發表于 2022-1-5 19:48
修改之后還是一樣的呀,是不是我程序寫的有問題啊?孩子蒙了求指教

以為你是說閃的太快
上Proteus一看
原來是亂閃
if(key2==0)的else里缺了短按判斷if(j>500 && j<3000)
回復

使用道具 舉報

5#
ID:999060 發表于 2022-1-6 08:41 | 只看該作者
lkc8210 發表于 2022-1-6 00:09
以為你是說閃的太快
上Proteus一看
原來是亂閃

建議以采納,謝謝大佬
回復

使用道具 舉報

6#
ID:213173 發表于 2022-1-6 10:20 | 只看該作者

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. #define duan P1               
  6. #define wei  P3      
  7. sbit key1 = P2^3;  
  8. sbit key2 = P2^4;
  9. sbit key3 = P2^5;  
  10. sbit key4 = P2^6;
  11. sbit key5 = P2^7;  
  12. sbit out  = P2^2;  
  13. //sbit di   = P2^0;  

  14. bit count_down=0;//倒計時標志
  15. bit flag=0;//啟動標志
  16. char shi=12,fen=0,sec=0;
  17. uchar KeySec=0;//鍵值
  18. uint cont,cont1;
  19. uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                  
  20. uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                                         
  21. uchar LedBuff[8];                                 

  22. void init()               
  23. {
  24.         TMOD |= 0x01;         
  25.         TH0 = (65536-1000)/256;
  26.         TL0 = (65536-1000)%256;
  27.         EA = 1;                       
  28.         ET0 = 1;                       
  29.         TR0 = 1;                        
  30. }

  31. void dis()        
  32. {
  33.         if(KeySec==3)LedBuff[0] = duanma[sec%10]|0x80;//加提示點
  34.         else LedBuff[0] = duanma[sec%10];
  35.         LedBuff[1] = duanma[sec/10];
  36.         if(KeySec==2)LedBuff[3] = duanma[fen%10]|0x80;//加提示點
  37.         else LedBuff[3] = duanma[fen%10];
  38.         LedBuff[4] = duanma[fen/10];
  39.         if(KeySec==1)LedBuff[6] = duanma[shi%10]|0x80;//加提示點
  40.         else LedBuff[6] = duanma[shi%10];
  41.         LedBuff[7] = duanma[shi/10];
  42. }

  43. void keysan()
  44. {
  45.         static bit  sign=0;
  46.         static uint count=0;
  47.         if(!key1||!key2||!key3||!key4||!key5)                       
  48.         {
  49.                 if(++count>=250 && sign==0)  //消抖與鎖定
  50.                 {
  51.                         sign=1;               
  52.                         if(!key1)//設置
  53.                         {
  54.                                 if(++KeySec>=4)
  55.                                 {
  56.                                         KeySec=0;
  57.                                         cont=0;
  58.                                 }
  59.                                 flag=0;//停止計時
  60.                         }
  61.                         if(!key2 && KeySec>0)//++
  62.                         {
  63.                                 switch(KeySec)
  64.                                 {
  65.                                         case 1: shi++;if(shi>23)shi=0; break;
  66.                                         case 2: fen++;if(fen>59)fen=0; break;
  67.                                         case 3: sec++;if(sec>59)sec=0; break;
  68.                                 }
  69.                         }
  70.                         if(!key3 && KeySec>0)//--
  71.                         {
  72.                                 switch(KeySec)
  73.                                 {
  74.                                         case 1: shi--;if(shi<0)shi=23; break;
  75.                                         case 2: fen--;if(fen<0)fen=59; break;
  76.                                         case 3: sec--;if(sec<0)sec=59; break;
  77.                                 }
  78.                         }
  79.                         if(!key4 && KeySec==0)//正/倒計時
  80.                                 count_down=~count_down;

  81.                         if(!key5)//啟動/停止
  82.                         {
  83.                                 flag=~flag;
  84.                                 KeySec=0;
  85.                         }
  86.                 }
  87.         }               
  88.         else
  89.         {
  90.                 sign=0;
  91.                 count=0;
  92.         }
  93. }

  94. void main()
  95. {
  96.         init();
  97.         out = 1;
  98.         LedBuff[2] = 0x40;
  99.         LedBuff[5] = 0x40;
  100.         while(1)
  101.         {
  102.                 keysan();
  103.                 dis();
  104.                 if(shi==0 && fen==0 && sec==0 && KeySec==0 )  
  105.                 {
  106.                         flag=0;
  107.                         out=0;   
  108.                 }
  109.         }
  110. }

  111. void timer() interrupt 1
  112. {
  113.         TH0 = (65536-1000)/256;
  114.         TL0 = (65536-1000)%256;
  115.         if(flag)
  116.         {
  117.                 cont++;
  118.                 if(cont >= 1000)                  
  119.                 {
  120.                         cont = 0;
  121.                         if(count_down)//正計時
  122.                         {
  123.                                 if(++sec>=60)
  124.                                 {
  125.                                         sec=0;
  126.                                         if(++fen>=60)
  127.                                         {
  128.                                                 fen=0;
  129.                                                 if(++shi>=24)shi=0;
  130.                                         }
  131.                                 }
  132.                         }
  133.                         else                        //倒計時
  134.                         {
  135.                                 if(--sec<0)
  136.                                 {
  137.                                         sec=59;
  138.                                         if(--fen<0)
  139.                                         {
  140.                                                 fen=59;
  141.                                                 if(--shi<0)shi=23;
  142.                                         }
  143.                                 }
  144.                         }
  145.                 }
  146.         }
  147.         duan=0x00;//段消隱
  148.         wei=0x01<<cont1;//位碼
  149.         duan=LedBuff[cont1];//段碼
  150.         cont1=++cont1%8;//循環計數
  151. }
復制代碼



回復

使用道具 舉報

7#
ID:999060 發表于 2022-1-6 11:08 | 只看該作者

謝謝大佬,剛好用上
回復

使用道具 舉報

8#
ID:999060 發表于 2022-1-7 09:40 | 只看該作者
lkc8210 發表于 2022-1-6 00:09
以為你是說閃的太快
上Proteus一看
原來是亂閃

大佬我現在秒表數碼管顯示正常了,但分鐘和小時那里又亂閃了,是我后面的短按判斷錯了嗎?求指點
回復

使用道具 舉報

9#
ID:161164 發表于 2022-1-7 10:19 | 只看該作者
uhl0 發表于 2022-1-7 09:40
大佬我現在秒表數碼管顯示正常了,但分鐘和小時那里又亂閃了,是我后面的短按判斷錯了嗎?求指點

你是怎么改的?
上代碼啊~
回復

使用道具 舉報

10#
ID:999060 發表于 2022-1-7 13:01 | 只看該作者
lkc8210 發表于 2022-1-7 10:19
你是怎么改的?
上代碼啊~

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

#define duan P1                //段選
#define wei  P3                //位選
sbit key1 = P2^3;   //設置
sbit key2 = P2^4;   //加
sbit key3 = P2^5;   //減
sbit key4 = P2^6;   //啟動
sbit key5 = P2^7;   //手動
sbit out  = P2^2;   //輸出控制 ,低電平有效
sbit di   = P2^0;   //蜂鳴器

void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 5;
        j = 52;
        k = 195;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

bit flag=0,flag1=0,shan=0;
uchar knum,shan_cont,i;
uchar shi=0,fen=0,miao=0;  //時分秒
uint cont,cont1,cont2;
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰段碼表
                   //  0          1         2          3           5        6         7          8          9
uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};           //位碼        加反相器用
                                   //  1   2    3    4   5     6    7    8
uchar LedBuff[]={0,0,0,0,0,0,0,0};                                      //數碼管顯示緩沖區

void init()                        //定時器初始化
{
        TMOD |= 0x01;             //設置定時器0為工作方式1(M1M0為01)
        TH0 = (65536-1000)/256;   //1ms初值 @12MHz
        TL0 = (65536-1000)%256;
        EA = 1;                                          //開總中斷
        ET0 = 1;                                  //開定時器0中斷
        TR0 = 1;                          //啟動定時器0
}

void dis()          //顯示函數
{
        LedBuff[0] = duanma[miao%10];
        LedBuff[1] = duanma[miao/10];
        LedBuff[2] = 0x40;
        LedBuff[3] = duanma[fen%10];
        LedBuff[4] = duanma[fen/10];
        LedBuff[5] = 0x40;
        LedBuff[6] = duanma[shi%10];
        LedBuff[7] = duanma[shi/10];
}


void keysan()                //按鍵掃描函數
{
        static bit  kf1=0,kf2=0,kf3=0;   //自鎖標志,這里一定要加static(或者用全局變量),否則按鍵不靈
        static uint i=0,j=0,k=0,l=0,m=0; //消抖延時變量
//////////////////////////////////////啟動/暫停鍵//////////////////////////////////////
        if(knum==0)                           //只要時分秒都不等于0
        {
            if(key4 == 1)           //啟動 暫停鍵
            {
                m=0;                   //按鍵消抖計時變量清零
                kf2=0;                   //按鍵自鎖標志清零
            
            }
            else if(kf2 == 0 ) //有按鍵按下,且是第一次被按下
            {
                               
                                        ++m;  //消抖
                if( (m>20) && ((miao != 0) || (fen != 0) || (shi != 0)) )
                {      
                           //時分秒都為0時,不能啟動輸出,只要其中之一不為0,就能啟動輸出
                m=0;                   //按鍵消抖計時變量清零
                kf2=1;                   //自鎖按鍵置位,避免一直觸發
                flag = !flag;  //啟動、暫停計時標志
                out  = !out;   //LED狀態取反
                }
            }        
        }         

//////////////////////////////////////啟動/暫停鍵//////////////////////////////////////                
        if(out==1)            //加這句,只有在輸出關閉的時候,才能設置計時時間,在倒計時的過程中是不能設置的
        {
            if(key1==1)   //設置   //IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
            {
                       
                i=0;           //按鍵消抖計時變量清零
                kf1=0;         //按鍵自鎖標志清零
            }
            else if(kf1 == 0)  //有按鍵按下,且是第一次被按下
            
                        {
               
                ++i;                   //消抖
                if(i>12)
                {
                    i=0;                   //按鍵消抖計時變量清零
                    kf1=1;         //自鎖按鍵置位,避免一直觸發
                    knum++;                   //調節時分秒--->123
                    if(knum==4) knum = 0;  //按第四次關閉設置
                }        
            }
        }       
//////////////////////////////////////加1按鍵//////////////////////////////////////       
        if(key2==0)                     //加1按鍵        快速加數
        {
                j++;
                if(j >= 3000)           //長按,數碼管掃描放中斷里面,這里的值就要取得大才行
                {                       //因為沒用delay延時,CPU跑的很快
                        if(knum==1)
                        {
                            miao++;                                        //秒鐘加1
                            if(miao==60) miao = 0;        //超過60s變成0
                        }
       
                        if(knum==2)
                        {
                        fen++;                                        //分鐘加1
                        if(fen==60) fen=0;                //超過60變0
                        }
       
                        if(knum==3)
                        {
                        shi++;                                        //小時加1
                        if(shi==24) shi=0;                //超過24變0
                        }
       
                        j=1000;           //這里j的值可以設置連加的快慢,j的值越大就越快
                }                         //因為初值越大,加到3000的時間就越短
        }                                                                                          
        else                                                                         //慢速加數
        {
if(j>500 && j<3000)                      
                                                                 if(knum==1)
                        {
                            miao++;                                        //秒鐘加1
                            if(miao==60) miao = 0;        //超過60s變成0
                        }
       
                        if(knum==2)
                        {
                        fen++;                                        //分鐘加1
                        if(fen==60) fen=0;                //超過60變0
                        }
       
                        if(knum==3)
                        {
                        shi++;                                        //小時加1
                        if(shi==24) shi=0;                //超過24變0
                        }
                        j=0;
       
        }        
//////////////////////////////////////減1按鍵//////////////////////////////////////               
        if(key3==0)                 //減1按鍵        快速減數
        {
        k++;
        if(k >= 3000)           //長按,數碼管掃描放中斷里面,這里的值就要取得大才行
        {                                                //因為沒用delay延時,CPU跑的很快
            if(knum==1)
            {
                miao--;                                         //秒鐘減1
                if(miao==255) miao = 59; //小于0就等于59
                                                         
            }       
            if(knum==2)
            {
                fen--;                                         //分鐘減1
                if(fen==255) fen=59;         //小于0就等于59
                                                               
            }       
            if(knum==3)
            {
                    shi--;                                 //時鐘減1
                    if(shi==255) shi=23; //小于0就等于23
                                                                               
            }       
            k=1000;
        }
        }               
        else
        {
        if(j>500 && j<3000)
                               
        {
            if(knum==1)
            {
                miao--;                                         //秒鐘減1
                if(miao==255) miao = 59; //小于0就等于59
                                                       
            }       
            if(knum==2)
            {
                fen--;                                         //分鐘減1
                if(fen==255) fen=59;         //小于0就等于59
                                                               
            }       
            if(knum==3)
            {
                    shi--;                                 //時鐘減1
                    if(shi==255) shi=23; //小于0就等于23
                                                                               
            }
        }
                k=0;        //消抖變量清零,為下次按鍵做準備        
        }
////////////////////////////////////////////////////////////////////////////      
}


void main()
{
        init();                        //定時器初始化
        out = 1;
        while(1)
        {
            keysan();        //按鍵掃描函數
            dis();                //顯示函數
            if(shi==0 && fen==0 && miao==0 && flag == 1 )  //倒計時時間到
            {
                flag=0;   //停止計時
                flag1=1;  //啟動蜂鳴器標志置1
                out=1;    //關閉輸出
            }
        }        
}

void timer() interrupt 1
{
        TH0 = (65536-1000)/256;          //1毫秒初值
        TL0 = (65536-1000)%256;
//////////////////////////////////////1s計時//////////////////////////////////////        
        if(flag)
        {
                cont++;
                if(cont == 1000)                   //1s到
                {
                    cont = 0;                                 //清0
                    miao--;                                         //秒數減1
                    if(miao==255)                         //如果小于0,就是59
                    {
                            miao=59;
                            fen--;                                 //分鐘數減1
                            if(fen==255)                 //如果小于0,就是59
                            {
                            fen=59;
                            shi--;                         //小時減1
                            if(shi==255) shi=0;                   //時鐘小于0,就是0
                            if(shi==0) fen=59;                   //時鐘小于0,就是255
                            if(fen==0 && shi==0) fen=0;//時鐘分鐘都為0,就是0         
                            }
                    }
                }
        }
//////////////////////////////////////蜂鳴器控制//////////////////////////////////////
        if(flag1)              //倒計時時間到,啟動蜂鳴器
        {
            cont1++;
            if(cont1==500) //500ms蜂鳴器響一次
            {
                cont1=0;
                di=!di;
                cont2++;
                if(cont2==20)//500*20=10000ms=10s,蜂鳴器響10s后停止
                {
                        cont2=0;
                        flag1=0;
                }
            }
        }
//////////////////////////////////////啟動/暫停鍵//////////////////////////////////////
        if(knum != 0)
        {
            shan_cont++;
            if(shan_cont==100)  //設置時,100ms閃爍時間 可根據實際效果調整
            {
                shan_cont=0;
                shan = !shan;
            }
        }
/**********************************數碼管掃描函數**********************************/
        i++;                          //挨個顯示
        if(i>=8) i=0;          //清0
        duan = 0x00;          
        switch(i)
        {
            case 0:
                    if(knum==1) //如果設置鍵第一次按下
                    {
                                         if(shan==1) {wei = 0x00; duan = LedBuff[0];}  //設置秒位閃爍
                                         
                     else {wei = weima[0]; duan = LedBuff[0];}
                    }
                    else{wei = weima[0]; duan = LedBuff[0];}        break;        //否則正常顯示           
            case 1:                                   
                    if(knum==1)        //如果設置鍵第一次按下
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[1];}   //設置秒位閃爍
                     else{wei = weima[1]; duan = LedBuff[1];}
                    }
                    else{wei = weima[1]; duan = LedBuff[1];}  break;        //否則正常顯示
   
            case 2:  wei = weima[2]; duan = LedBuff[2];        break;        //顯示-            
            case 3:        
                    if(knum==2) //如果設置鍵第二次按下
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[3];}   //設置分位閃爍
                     else{wei = weima[3]; duan = LedBuff[3];}
                    }
                    else{wei = weima[3]; duan = LedBuff[3];}    break;//否則正常顯示
            
            case 4:        
                    if(knum==2) //如果設置鍵第二次按下
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[4];}  //設置分位閃爍
                     else{wei = weima[4]; duan = LedBuff[4];}
                    }
                    else{wei = weima[4]; duan = LedBuff[4];}        break;        //否則正常顯示            
            case 5:  wei = weima[5]; duan = LedBuff[5];        break;                //顯示-            
            case 6:        
                    if(knum==3) //如果設置鍵第三次按下
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[6];} //設置時位閃爍
                     else{wei = weima[6]; duan = LedBuff[6];}
                    }
                    else{wei = weima[6]; duan = LedBuff[6];}        break;//否則正常顯示        
            case 7:        
                    if(knum==3) //如果設置鍵第三次按下
                    {
                                         if(shan==1){wei = 0x00; duan = LedBuff[7];}    //設置時位閃爍
                     else{wei = weima[7]; duan = LedBuff[7];}
                    }
                    else{wei = weima[7]; duan = LedBuff[7];}        break;//否則正常顯示            
            default: break;        

        }
}
感謝大佬回信,我聽你的建議加了在if(key2==0)的else里加了短按判斷if(j>500 && j<3000),秒表問題解決,但我時分顯示也有這個問題,我改了幾次發現不行不知道怎么改了
回復

使用道具 舉報

11#
ID:213173 發表于 2022-1-7 20:21 | 只看該作者
本帖最后由 wulin 于 2022-1-7 20:23 編輯
uhl0 發表于 2022-1-7 09:40
大佬我現在秒表數碼管顯示正常了,但分鐘和小時那里又亂閃了,是我后面的短按判斷錯了嗎?求指點

數碼管閃爍提示的實際視覺效果不如閃點好。給你改成數碼管閃爍提示供參考 測試程序 仿真.rar (96.63 KB, 下載次數: 8)




回復

使用道具 舉報

12#
ID:161164 發表于 2022-1-7 22:08 | 只看該作者
uhl0 發表于 2022-1-7 13:01
#include
#include
#define uchar unsigned char

if(key2==0)的else里缺了一對{}






這里應該是k




回復

使用道具 舉報

13#
ID:999060 發表于 2022-1-7 23:09 | 只看該作者
lkc8210 發表于 2022-1-7 22:08
if(key2==0)的else里缺了一對{}

問題已解決,感謝
回復

使用道具 舉報

14#
ID:999060 發表于 2022-1-7 23:10 | 只看該作者
wulin 發表于 2022-1-7 20:21
數碼管閃爍提示的實際視覺效果不如閃點好。給你改成數碼管閃爍提示供參考

問題已解決,感謝您的寶貴建議
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线精品 | 亚洲视频精品在线 | 免费黄色的网站 | 免费久久网 | 狠狠干在线 | 99久热在线精品视频观看 | 国产在线一区二区 | 国产午夜精品一区二区三区四区 | 亚洲91| 日韩成人在线播放 | a级黄色片在线观看 | 亚洲一区日韩 | 国产成人综合一区二区三区 | 亚洲欧美bt| 正在播放亚洲 | 成人久草| 午夜精品视频在线观看 | 2018国产大陆天天弄 | 夜久久| 五月综合激情在线 | 一级久久久久久 | 日本精品久久久久久久 | 久久三级av | 欧美精品一区二区在线观看 | 日本精品在线观看 | 欧美精品网站 | 中文字幕在线免费观看 | 99爱免费 | 天堂久久网 | 欧美lesbianxxxxhd视频社区 | 精品国产一区二区在线 | 国产欧美日韩一区二区三区 | 国产高清在线观看 | 国产欧美精品 | 美女久久久久久久 | 精品日韩一区二区 | 99爱免费 | 国产成人精品一区二区三 | av黄色片在线观看 | 婷婷去俺也去 | 中文字幕在线二区 |