欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機驅動數碼管微微發亮,這種問題有沒有解?附程序電路圖

查看數: 4243 | 評論數: 32 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-11-8 11:28

正文摘要:

    共陽數碼管顯示:com1 com2 com3顯示數字正常,但com4位選控制的這六個燈,前三個為單位顯示,后三個為電量顯示,單位或電量顯示時,正常是不需要亮的燈是不亮,但是不亮時會微微發亮?我也明白 ...

回復

ID:397054 發表于 2023-10-31 15:43
一年過去了,問題解決了沒有啊?
ID:466505 發表于 2023-10-31 14:52
有沒有可能有LED反向輕微漏電導致其它LED微亮?
ID:170800 發表于 2023-10-31 14:10
我也是初學者,學了一年左右,據對消隱的理解看似乎是程序消隱問題:
1、程序是反復掃描來改變狀態的,所以位碼沒有消隱會是最后一次掃描的狀態;
2、我看程序是,swtich后,第4位狀態最后一次開啟后關沒有關閉;
3、下一個循環送段時,第四位閃亮狀態,在送完段碼后的一瞬間,第四位是亮的,然后第一位碼送到,才同時就相當于關閉第四位,瞬間點亮的余輝形成微亮,典型的第4位沒有消隱的處理;
4、26樓的程序是正確的,所以仿真沒有問題,如果樓主的仿真也沒有問題的話,是軟件仿真與實際的差異問題;
5、我個人認為正確的消隱是:如果先送段碼則前先作位消隱,如果先送位碼,則先作段碼消隱,所以14樓程序也是正確的;交換送顯示數據的順序,消隱的對象是不同的,我初學的程序不懂,就在送顯示數據前,所有的狀態恢復到最初的狀態,慢慢看別人的程序,再看書后,理解才清晰點;
——不知道說清楚沒有,因為知識很多是從51Hei學到的,所以回復特有耐性,與其他學習者共勉。
ID:170800 發表于 2023-10-31 13:52
所謂的消隱沒有做好:因為位碼最后一次在掃描第4位在開啟的狀態并沒有改變,而段碼是下一次送數據時變成顯示了,所有消隱最好將所有的段碼與位碼狀態恢復才行!
ID:686513 發表于 2022-11-10 12:56
Y_G_G 發表于 2022-11-10 00:16
幾天都沒有搞定?
這只是一個數碼管而已呀
在每次顯示之前,先消隱

是哪,還沒搞定,請大師指點呀!今天發現是com4的哪路不對(單位和電量顯示燈都會隨顯示數字的變化微亮),com1 com2 com3顯示數字沒有這種現像。也就是說com4控制的這路好像沒有消隱。
ID:686513 發表于 2022-11-10 12:56
wulin 發表于 2022-11-9 21:34
你的程序框架一定有問題,導致顯示異常。給你簡化一下測試,仿真正常。

wulin老師,今天發現是com4的哪路不對(單位和電量顯示燈都會隨顯示數字的變化微亮),com1 com2 com3顯示數字沒有這種現像。也就是說com4控制的這路好像沒有消隱。
ID:401564 發表于 2022-11-10 00:16
幾天都沒有搞定?
這只是一個數碼管而已呀
在每次顯示之前,先消隱

duan = 0x00;
wei = 0x00;
delay_us(10);//自己寫一個uS延時程序

這個放在 Display()里面,最先執行,然后再執行其它的顯示
如果還不行,那就是你程序的其它問題
ID:213173 發表于 2022-11-9 21:34
zhth1979 發表于 2022-11-9 09:29
您的代碼很不錯,簡潔,直接使用您這段代碼還是老樣子,這樣看不像是底層顯示的問題了,是不是數字分解或 ...

你的程序框架一定有問題,導致顯示異常。給你簡化一下測試,仿真正常。



  1. #include <reg51.H>
  2. #define duan P2
  3. #define wei P3 //      
  4. //共陽數碼管編碼表
  5. unsigned char code leddata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x00};
  6.                               //0,  1,   2    3     4    5    6    7    8    9    A    B    C    D   E    F    16    17  
  7. //數據顯示緩沖區
  8. unsigned char LEDBuf[4];      
  9. //位選信號
  10. unsigned char code PLACE_CODE[] ={0x02,0x04,0x08,0x20};
  11. //1111 1101  1111 1011   1111 0111  1101 1111

  12. //單位段碼
  13. unsigned char code unit[] ={0xfe,0xfd,0xfb,0xf8};
  14. //                      1111 1110 /1111 1101/1111 1011/1111 1000   
  15. //電池段碼
  16. unsigned char code BAT[] ={0xff,0xef,0xcf,0x8f};
  17. //                      1111 1111/1110 1111/1100 1111/1000 1111;   // 1000 1111
  18. unsigned int t;

  19. void Display()
  20. {
  21.         static unsigned char i;//靜態變量
  22.         switch(i)
  23.         {
  24.                 case 0:LEDBuf[i]=leddata[1];break;
  25.                 case 1:LEDBuf[i]=leddata[2]&0x7f;break;//加小數點
  26.                 case 2:LEDBuf[i]=leddata[3];break;
  27.                 case 3:LEDBuf[i]=leddata[4];break;
  28.         }
  29.         wei&=0xd1;//位消隱
  30.         duan=LEDBuf[i];//送段碼
  31.         wei|=PLACE_CODE[i];//送位碼
  32.         i=++i%4;
  33. }

  34. void main()
  35. {
  36.         while(1)
  37.         {
  38.                 Display();               
  39.                 t=110;
  40.                 //延時T=t*9+16us(12M晶振)約1ms
  41.                 while(t--);
  42.         }
  43. }
復制代碼



ID:384109 發表于 2022-11-9 17:04
消隱沒有延時,等于沒消隱
ID:686513 發表于 2022-11-9 16:21
xiaoshan7748 發表于 2022-11-8 17:19
送數之前位選要全都置位也就是送0xff,這樣才是真正的消隱

先送位選也一樣,沒變化。
ID:686513 發表于 2022-11-9 12:12
zhth1979 發表于 2022-11-9 11:32
1和4,底層顯示,我放在1ms定時器里了,1ms掃描一位。2.改為靜態函數也一樣 3.段碼和位碼先送哪個應該沒 ...

想了想,不管數字,單位,電量如何變化,最終還是通過個底層去顯示呀。按說這個底層沒問題顯示應該就不會有問題才對呀!
ID:686513 發表于 2022-11-9 11:32
yscbg 發表于 2022-11-8 18:07
1,可能每位顯示時間短(主程序循環一次的時間)太小,LED還沒點亮就掃描下一位了
2.static unsigned char ...

1和4,底層顯示,我放在1ms定時器里了,1ms掃描一位。2.改為靜態函數也一樣 3.段碼和位碼先送哪個應該沒關系吧?我對調試過,并且直用了wulin老師的代碼放進去還是老樣子。
ID:686513 發表于 2022-11-9 09:29
wulin 發表于 2022-11-8 19:02
函數放在1~4ms循環周期環境為佳

您的代碼很不錯,簡潔,直接使用您這段代碼還是老樣子,這樣看不像是底層顯示的問題了,是不是數字分解或是按鍵加減閃爍導致的。
ID:686513 發表于 2022-11-9 09:06
大漠落日 發表于 2022-11-8 20:26
如果排除程序問題,還不行,要換三極管,換個別的類型的,我常用8550做共陽的位選

我現在用的就是2TY.
ID:686513 發表于 2022-11-9 09:04
lkc8210 發表于 2022-11-8 18:09
代碼看了,消影消了個寂莫
次序應該是這樣:

今天發現是com4的哪路不對(單位和電量顯示燈都會隨顯示數字的變化微亮),com1 com2 com3顯示數字沒有這種現像。也就是說com4控制的這路好像沒有消隱。
ID:686513 發表于 2022-11-9 08:46
lkc8210 發表于 2022-11-8 18:09
代碼看了,消影消了個寂莫
次序應該是這樣:

按您的次序改了,還是老樣子,先送段碼和先送位選應該是沒關系的。
ID:195496 發表于 2022-11-8 20:26
如果排除程序問題,還不行,要換三極管,換個別的類型的,我常用8550做共陽的位選
ID:624769 發表于 2022-11-8 20:17
zhth1979 發表于 2022-11-8 19:12
換了,并且還換了別的型號,沒用。

看13樓的正確答案。
ID:686513 發表于 2022-11-8 19:12
發表于 2022-11-8 17:49
換com4驅動三極管。

換了,并且還換了別的型號,沒用。
ID:213173 發表于 2022-11-8 19:02
zhth1979 發表于 2022-11-8 13:30
#include "display.h"

       

函數放在1~4ms循環周期環境為佳
  1. void Display()
  2. {
  3.         static unsigned char i;//靜態變量

  4.         duan=0xff;//段消隱
  5.         switch(i)
  6.         {
  7.                 case 0:
  8.                         wei=PLACE_CODE[0];
  9.                         if(digdot0==1)duan=leddata[LEDBuf[0]]&0x7f;
  10.                         else duan=leddata[LEDBuf[0]];  
  11.                 break;

  12.                 case 1:
  13.                         wei=PLACE_CODE[1];
  14.                         if(digdot1==1)
  15.                                 duan=leddata[LEDBuf[1]]&0x7f;      
  16.                         else duan=leddata[LEDBuf[1]];
  17.                 break;

  18.                 case 2:                       
  19.                         wei=PLACE_CODE[2];
  20.                         duan=leddata[LEDBuf[2]];
  21.                 break;

  22.                 case 3:                       
  23.                         wei=PLACE_CODE[3];
  24.                         duan=unit[LEDBuf[3]];
  25.                 break;

  26.                 case 4:                       
  27.                         wei=PLACE_CODE[3];
  28.                         duan=BAT[LEDBuf[4]];
  29.                 break;

  30.                 default:break;
  31.         }
  32.         i=++i%5;
  33. }
復制代碼
ID:161164 發表于 2022-11-8 18:09

代碼看了,消影消了個寂莫
次序應該是這樣:


ID:160893 發表于 2022-11-8 18:07
1,可能每位顯示時間短(主程序循環一次的時間)太小,LED還沒點亮就掃描下一位了
2.static unsigned char i;//要定義靜態函數
3.顯示段位碼注意順序消隱--->位碼---->段碼,否則有殘影,如下OK
                case 0:
                        duan=0xff;        //消隱
                                 wei=PLACE_CODE[0];   //位碼              
                                               if(digdot0==1)
                                                {
                                                      duan=leddata[LEDBuf[0]]&0x7f; //段加小數點      
                                                }
                                        else
                                                {
                                                        duan=leddata[LEDBuf[0]];
                                                }
                  i++;
                  break;
4.定時器控制Dsplay()<4ms執行一次(>60Hz掃描防閃爍)
ID:521890 發表于 2022-11-8 17:49
換com4驅動三極管。
ID:194257 發表于 2022-11-8 17:19
送數之前位選要全都置位也就是送0xff,這樣才是真正的消隱
ID:686513 發表于 2022-11-8 15:14

有消隱,前三位數字都正常。
ID:686513 發表于 2022-11-8 13:39
本帖最后由 zhth1979 于 2022-11-8 13:52 編輯
lkc8210 發表于 2022-11-8 13:05
估計是沒消影
最好貼代碼來分析

代碼已貼,麻煩大神幫我看看哪里有問題。
ID:686513 發表于 2022-11-8 13:32
lkc8210 發表于 2022-11-8 13:05
估計是沒消影
最好貼代碼來分析

消影有的。
ID:686513 發表于 2022-11-8 13:32
xuyaqi 發表于 2022-11-8 13:11
微微發亮不舒服,可以LED回路串電阻減弱。

這種方法試了,是可以減弱,但還是微微亮。
ID:686513 發表于 2022-11-8 13:30
lkc8210 發表于 2022-11-8 13:05
估計是沒消影
最好貼代碼來分析

#include "display.h"

       
//共陽數碼管編碼表
unsigned char code leddata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x00};
                              //0,  1,   2    3     4    5    6    7    8    9    A    B    C    D   E    F    16    17  
                                                                                                               
//數據顯示緩沖區
unsigned char LEDBuf[]= {17,17,17,3,3};       

//位選信號
unsigned char code PLACE_CODE[] ={0xfd,0xfb,0xf7,0xdf};
//1111 1101  1111 1011   1111 0111  1101 1111
//單位段碼
unsigned char code unit[] ={0xfe,0xfd,0xfb,0xf8};
//                      1111 1110 /1111 1101/1111 1011            //1111 1000   
//電池段碼
unsigned char code BAT[] ={0xFF,0xEF,0xCF,0x8F};
//                      1111 1111/1110 1111/1100 1111/1000 1111;   // 1000 1111

unsigned char digdot0=0,digdot1=0;

void Display()
{
        unsigned char i;
        //1.送段碼       
        //2.送位選
  //3.延時 1ms  全部數碼管顯示時間<10ms內
  //4.消隱
        switch(i)
        {
                case 0:
                        duan=0xff;
                        duan=leddata[LEDBuf[0]];
       if(digdot0==1)
                         {
                                duan=leddata[LEDBuf[0]]&0x7f;       
                         }                         
                  wei=PLACE_CODE[0];                 
                  i++;
                  break;
               
          case 1:
                  duan=0xff;
                        duan=leddata[LEDBuf[1]];
                  if(digdot1==1)
                         {
                                duan=leddata[LEDBuf[1]]&0x7f;       
                         }
                  wei=PLACE_CODE[1];       
                  i++;
                  break;
                 
                case 2:                       
                  duan=0xff;
                        duan=leddata[LEDBuf[2]];                  
                  wei=PLACE_CODE[2];                  
                  i++;
                break;
               
                case 3:                       
                  duan=0xff;
                        duan=unit[LEDBuf[3]];
                  wei=PLACE_CODE[3];          
                  i++;
                break;
               
                case 4:                       
                  duan=0xff;
                        duan=BAT[LEDBuf[4]];
                  wei=PLACE_CODE[3];          
                  i=0;
                break;
               
                default:break;
               
        }
       
}
ID:94031 發表于 2022-11-8 13:11
微微發亮不舒服,可以LED回路串電阻減弱。
ID:161164 發表于 2022-11-8 13:05
估計是沒消影
最好貼代碼來分析
ID:955673 發表于 2022-11-8 12:29
沒加消隱?

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表