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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機四位動態數碼管顯示怎么只能顯示最后一位,其它三位沒有顯示?

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 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) //顯示函數
{        
        unsigned int c,d,e,f;
        

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

        
          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];//個
          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) ;
        }

}

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:277550 發表于 2024-1-16 14:23 | 只看該作者
掃描方式,每一位的延時多一點時間,因為眼睛不夠快的

回復

使用道具 舉報

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

P10P11P12P13位選,P27-0對應a-h,共陽數碼管
回復

使用道具 舉報

5#
ID:1057978 發表于 2024-1-16 15:27 | 只看該作者
每顯示一個數字后就執行P10=1;P11=1;P12=1;P13=1;  取消他的顯示了,連視覺暫留的機會都不給,理論上只能看到一個數字。
你把P10=1;P11=1;P12=1;P13=1;  這句扔循環外面去
回復

使用道具 舉報

6#
ID:1057978 發表于 2024-1-16 15:28 | 只看該作者
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是壞的
回復

使用道具 舉報

7#
ID:72649 發表于 2024-1-16 16:04 | 只看該作者
wangxiangtan 發表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是 ...

如果100ms延時,每個度都可以顯示
回復

使用道具 舉報

8#
ID:213173 發表于 2024-1-16 21:08 | 只看該作者
hjx5548 發表于 2024-1-16 15:16
P10P11P12P13位選,P27-0對應a-h,共陽數碼管

#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) //顯示函數
{        
        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();
        }
}
回復

使用道具 舉報

9#
ID:427868 發表于 2024-1-17 08:13 | 只看該作者
是因為你只讓P10位顯示,P1-3位不顯示,且是P10位輪流顯示4位數。
回復

使用道具 舉報

10#
ID:482001 發表于 2024-1-17 16:21 | 只看該作者
c=date/1000%10;                        //求千位
          d=date/100%10;                        //求百位
          e=date/10%10;                                  //求十位
          f=date%10;                                          //求個位
把這部分放到main的while循環外面
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];//個
          P10=1;P11=1;P12=1;P13=0;
          DelayXms(1);
這部分放到while循環里面試試呢?
回復

使用道具 舉報

11#
ID:72649 發表于 2024-1-20 09:52 | 只看該作者
wangxiangtan 發表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是 ...

1S顯示一次數碼管顯示數字都正常的
回復

使用道具 舉報

12#
ID:72649 發表于 2024-1-20 09:58 | 只看該作者
葉雨飛飛 發表于 2024-1-17 16:21
c=date/1000%10;                        //求千位
          d=date/100%10;                        // ...

循環里面還有程序,放進去了,速度跟不上去。
回復

使用道具 舉報

13#
ID:1080331 發表于 2024-1-20 11:03 | 只看該作者
根據你提供的代碼,你的單片機代碼只會顯示最后一位數碼管的數字,而其他三位數碼管沒有顯示。這是因為在顯示函數 Led_Code() 中,每次都會將四位數碼管的控制引腳 P10、P11、P12、P13 都設置為高電平(1),然后再依次設置相應的數碼管顯示內容。  然而,在你的代碼中,每次循環中只調用了一次 Led_Code(1234),并且沒有等待一段時間再進行下一次調用。因此,程序在每次循環中只有很短暫的時間來顯示數碼管,而且由于控制引腳被設置為高電平,其他三位數碼管無法正常顯示。  為了解決這個問題,你可以在每次調用 Led_Code() 函數之間添加一定的延時時間,以使得每個數碼管都能夠顯示出來。例如,你可以添加一個適當的延時函數 DelayXms() 在每次調用 Led_Code() 后,以便給數碼管足夠的時間來顯示數字。你可以根據需要調整延時時間,確保數碼管能夠正常顯示。
回復

使用道具 舉報

14#
ID:72649 發表于 2024-1-21 21:47 | 只看該作者
597329015 發表于 2024-1-20 11:03
根據你提供的代碼,你的單片機代碼只會顯示最后一位數碼管的數字,而其他三位數碼管沒有顯示。這是因為在顯 ...

原因找到了,非常感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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