找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2502|回復(fù): 13
收起左側(cè)

單片機(jī)四位動(dòng)態(tài)數(shù)碼管顯示怎么只能顯示最后一位,其它三位沒有顯示?

[復(fù)制鏈接]
ID:72649 發(fā)表于 2024-1-16 13:16 | 顯示全部樓層 |閱讀模式
#include "STC8H.h"
#include "intrins.h"

unsigned char NixieTable[]={ 0x03,/*0*/
        0x9F,/*1*/
        0x25,/*2*/
        0x0D,/*3*/
        0x99,/*4*/
        0x49,/*5*/
        0x41,/*6*/
        0x1F,/*7*/
        0x01,/*8*/
        0x09,/*9*/};
        
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}

void DelayXms(unsigned int x) //@11.0592MHz
{
        while (--x)
        {
   Delay1ms();
         }
}

void Led_Code(unsigned long date) //顯示函數(shù)
{        
        unsigned int c,d,e,f;
        

          c=date/1000%10;                        //求千位
          d=date/100%10;                        //求百位
          e=date/10%10;                                  //求十位
          f=date%10;                                          //求個(gè)位
        

        
          P10=1;P11=1;P12=1;P13=1;  
             P2=NixieTable[c];//千
          P10=0;P11=1;P12=1;P13=1;
          DelayXms(1);
               
          P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[d];//百
          P10=1;P11=0;P12=1;P13=1;
          DelayXms(1);
               
                P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[e];//十
          P10=1;P11=1;P12=0;P13=1;
          DelayXms(1);
               
                P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[f];//個(gè)
          P10=1;P11=1;P12=1;P13=0;
          DelayXms(1);


}

void main()
{
    P1M0 = 0x3f; P1M1 = 0xc0;
    P2M0 = 0xff; P2M1 = 0x00;
        while (1)
        {
                Led_Code(1234) ;
        }

}

回復(fù)

使用道具 舉報(bào)

ID:226055 發(fā)表于 2024-1-16 14:21 | 顯示全部樓層
    1、電路圖沒有給出來,不好推測你的程序與硬件的控制方式是否一致。
    2、建議你可以把每一位顯示之間的延時(shí)加長,看看是不是4位都可以顯示。目前是1ms,加大到1s。
回復(fù)

使用道具 舉報(bào)

ID:277550 發(fā)表于 2024-1-16 14:23 | 顯示全部樓層
掃描方式,每一位的延時(shí)多一點(diǎn)時(shí)間,因?yàn)檠劬Σ粔蚩斓?br />
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-16 15:16 來自觸屏版 | 顯示全部樓層
cocolala 發(fā)表于 2024-1-16 14:21
1、電路圖沒有給出來,不好推測你的程序與硬件的控制方式是否一致。
    2、建議你可以把每一位顯示之 ...

P10P11P12P13位選,P27-0對應(yīng)a-h,共陽數(shù)碼管
回復(fù)

使用道具 舉報(bào)

ID:1057978 發(fā)表于 2024-1-16 15:27 | 顯示全部樓層
每顯示一個(gè)數(shù)字后就執(zhí)行P10=1;P11=1;P12=1;P13=1;  取消他的顯示了,連視覺暫留的機(jī)會(huì)都不給,理論上只能看到一個(gè)數(shù)字。
你把P10=1;P11=1;P12=1;P13=1;  這句扔循環(huán)外面去
回復(fù)

使用道具 舉報(bào)

ID:1057978 發(fā)表于 2024-1-16 15:28 | 顯示全部樓層
另外這種涉及多段顯示的你要一個(gè)一個(gè)測試,都測試沒問題顯示正常了,再多個(gè)顯示,你咋知道某個(gè)數(shù)碼管是不是壞的
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-16 16:04 | 顯示全部樓層
wangxiangtan 發(fā)表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個(gè)一個(gè)測試,都測試沒問題顯示正常了,再多個(gè)顯示,你咋知道某個(gè)數(shù)碼管是不是 ...

如果100ms延時(shí),每個(gè)度都可以顯示
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2024-1-16 21:08 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-16 15:16
P10P11P12P13位選,P27-0對應(yīng)a-h,共陽數(shù)碼管

#include "STC8H.h"
#include "intrins.h"

unsigned char NixieTable[]={ 0x03,/*0*/
        0x9F,/*1*/
        0x25,/*2*/
        0x0D,/*3*/
        0x99,/*4*/
        0x49,/*5*/
        0x41,/*6*/
        0x1F,/*7*/
        0x01,/*8*/
        0x09,/*9*/};
        
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;
        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}

void Led_Code(unsigned int date) //顯示函數(shù)
{        
        static unsigned  i;
        unsigned char a[4];
        a[0]=date/1000%10;
        a[1]=date/100%10;
        a[2]=date/10%10;
        a[3]=date%10;
        P2=0xff;
        P1=0x01<<i;
        P2=NixieTable[a[i ]];
        i=++i%4;
}

void main()
{
        P1M0 = 0x0f; P1M1 = 0x00;
        P2M0 = 0xff; P2M1 = 0x00;
        while (1)
        {
                Led_Code(1234);
                Delay1ms();
        }
}
回復(fù)

使用道具 舉報(bào)

ID:427868 發(fā)表于 2024-1-17 08:13 | 顯示全部樓層
是因?yàn)槟阒蛔孭10位顯示,P1-3位不顯示,且是P10位輪流顯示4位數(shù)。
回復(fù)

使用道具 舉報(bào)

ID:482001 發(fā)表于 2024-1-17 16:21 | 顯示全部樓層
c=date/1000%10;                        //求千位
          d=date/100%10;                        //求百位
          e=date/10%10;                                  //求十位
          f=date%10;                                          //求個(gè)位
把這部分放到main的while循環(huán)外面
P10=1;P11=1;P12=1;P13=1;  
             P2=NixieTable[c];//千
          P10=0;P11=1;P12=1;P13=1;
          DelayXms(1);
               
          P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[d];//百
          P10=1;P11=0;P12=1;P13=1;
          DelayXms(1);
               
                P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[e];//十
          P10=1;P11=1;P12=0;P13=1;
          DelayXms(1);
               
                P10=1;P11=1;P12=1;P13=1;  
      P2=NixieTable[f];//個(gè)
          P10=1;P11=1;P12=1;P13=0;
          DelayXms(1);
這部分放到while循環(huán)里面試試呢?
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-20 09:52 | 顯示全部樓層
wangxiangtan 發(fā)表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個(gè)一個(gè)測試,都測試沒問題顯示正常了,再多個(gè)顯示,你咋知道某個(gè)數(shù)碼管是不是 ...

1S顯示一次數(shù)碼管顯示數(shù)字都正常的
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-20 09:58 | 顯示全部樓層
葉雨飛飛 發(fā)表于 2024-1-17 16:21
c=date/1000%10;                        //求千位
          d=date/100%10;                        // ...

循環(huán)里面還有程序,放進(jìn)去了,速度跟不上去。
回復(fù)

使用道具 舉報(bào)

ID:1080331 發(fā)表于 2024-1-20 11:03 | 顯示全部樓層
根據(jù)你提供的代碼,你的單片機(jī)代碼只會(huì)顯示最后一位數(shù)碼管的數(shù)字,而其他三位數(shù)碼管沒有顯示。這是因?yàn)樵陲@示函數(shù) Led_Code() 中,每次都會(huì)將四位數(shù)碼管的控制引腳 P10、P11、P12、P13 都設(shè)置為高電平(1),然后再依次設(shè)置相應(yīng)的數(shù)碼管顯示內(nèi)容。  然而,在你的代碼中,每次循環(huán)中只調(diào)用了一次 Led_Code(1234),并且沒有等待一段時(shí)間再進(jìn)行下一次調(diào)用。因此,程序在每次循環(huán)中只有很短暫的時(shí)間來顯示數(shù)碼管,而且由于控制引腳被設(shè)置為高電平,其他三位數(shù)碼管無法正常顯示。  為了解決這個(gè)問題,你可以在每次調(diào)用 Led_Code() 函數(shù)之間添加一定的延時(shí)時(shí)間,以使得每個(gè)數(shù)碼管都能夠顯示出來。例如,你可以添加一個(gè)適當(dāng)?shù)难訒r(shí)函數(shù) DelayXms() 在每次調(diào)用 Led_Code() 后,以便給數(shù)碼管足夠的時(shí)間來顯示數(shù)字。你可以根據(jù)需要調(diào)整延時(shí)時(shí)間,確保數(shù)碼管能夠正常顯示。
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-21 21:47 | 顯示全部樓層
597329015 發(fā)表于 2024-1-20 11:03
根據(jù)你提供的代碼,你的單片機(jī)代碼只會(huì)顯示最后一位數(shù)碼管的數(shù)字,而其他三位數(shù)碼管沒有顯示。這是因?yàn)樵陲@ ...

原因找到了,非常感謝
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表