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

標題: 單片機四位動態數碼管顯示怎么只能顯示最后一位,其它三位沒有顯示? [打印本頁]

作者: hjx5548    時間: 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) ;
        }

}


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

作者: devcang    時間: 2024-1-16 14:23
掃描方式,每一位的延時多一點時間,因為眼睛不夠快的


作者: hjx5548    時間: 2024-1-16 15:16
cocolala 發表于 2024-1-16 14:21
1、電路圖沒有給出來,不好推測你的程序與硬件的控制方式是否一致。
    2、建議你可以把每一位顯示之 ...

P10P11P12P13位選,P27-0對應a-h,共陽數碼管
作者: wangxiangtan    時間: 2024-1-16 15:27
每顯示一個數字后就執行P10=1;P11=1;P12=1;P13=1;  取消他的顯示了,連視覺暫留的機會都不給,理論上只能看到一個數字。
你把P10=1;P11=1;P12=1;P13=1;  這句扔循環外面去
作者: wangxiangtan    時間: 2024-1-16 15:28
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是壞的
作者: hjx5548    時間: 2024-1-16 16:04
wangxiangtan 發表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是 ...

如果100ms延時,每個度都可以顯示
作者: wulin    時間: 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();
        }
}
作者: 劉佑紅    時間: 2024-1-17 08:13
是因為你只讓P10位顯示,P1-3位不顯示,且是P10位輪流顯示4位數。
作者: 葉雨飛飛    時間: 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循環里面試試呢?
作者: hjx5548    時間: 2024-1-20 09:52
wangxiangtan 發表于 2024-1-16 15:28
另外這種涉及多段顯示的你要一個一個測試,都測試沒問題顯示正常了,再多個顯示,你咋知道某個數碼管是不是 ...

1S顯示一次數碼管顯示數字都正常的
作者: hjx5548    時間: 2024-1-20 09:58
葉雨飛飛 發表于 2024-1-17 16:21
c=date/1000%10;                        //求千位
          d=date/100%10;                        // ...

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

原因找到了,非常感謝




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品日日摸天天碰 | 一级片在线 | 天堂一区二区三区 | 久久av片 | 久久久精品免费 | 久久老司机 | 亚洲成在线 | 日本a在线观看 | 欧美黄色片视频 | 视频一区二区三区在线观看 | 久久久久久久网 | 日韩精品一级毛片在线播放 | 国产精品久久久国产盗摄 | 国产精品一区二区三区免费 | 影音先锋国产精品 | 日韩精品一区在线 | 亚洲综合影院 | 日本欧美久久久久免费播放网 | 国产欧美一区二区三区在线看蜜臀 | 亚洲在线一区 | 伊人国产精品 | 午夜激情福利视频 | 日韩毛片免费 | 黄色福利视频 | 亚洲免费福利视频 | 97久久超碰 | 日韩av高清在线观看 | 日本一级一片免费视频 | www午夜| 国产综合久久久 | 亚洲一区二区三区视频 | 免费黄色大片 | www国产精品| 一级片黄色 | 国产黄a三级 | av色在线 | av手机天堂 | 97精品国产 | 欧美又大又硬又粗bbbbb | 国产一级18片视频 | 涩涩的动漫 |