etec 发表于 2026-5-4 11:43:47

关于数码管驱动问题

您好,使用STC8A8K64D4芯片,芯片工作电源5V,
通过动态扫描方式(频率100HZ),
驱动一个5位,共阳的0.56英寸的数码管,
P0口8位做数码段位显示控制,P1口5位做数码片选控制,
P1口设置推挽输出,高电平直接驱动,
P0口串接470欧下拉限流电阻,具体电路图如下,
在频率100HZ下,每位数码片选的占空比是20%,
通过示波器测量P1口输出的高电平在4.1V左右,
高电平和工作电源5V之间有压降,
是不是驱动电流大了,导致压降增加了,
如果P1口通过三极管放大后驱动数码片选,是不是会好点。
另如果在不增加外围器件的情况下,
驱动电压有什么办法可以提高吗?谢谢

神农鼎 发表于 2026-5-4 11:54:44




https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf

xiaobendan 发表于 2026-5-4 13:01:59

芯片的驱动能力就在那里了,还是加三极管吧
试试带LED驱动的型号看会不会电流更大一些。
或者直接上专用的驱动芯片像1638这种

神农鼎 发表于 2026-5-4 13:18:45




https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf


什么?8H4K64TL硬件80mA大电流LED数码管自动刷新驱动居然可以8位亮度256种组合? - 段码LCD/80mA大电流LED数码管自动刷新显示/RTC实时时钟/触摸按键/低功耗 国芯人工智能技术交流网站 - AI32位8051交流社区

wulin 发表于 2026-5-4 13:27:34

测试程序
#include "STC8A8K64D4.H"

unsigned char code table[]={//共阳数码管段码"0~f-."
                0xc0,0xf9,0xa4,0xb0,
                0x99,0x92,0x82,0xf8,
                0x80,0x90,0x88,0x83,
                0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
unsigned char data dis_buf;
unsigned int num;

void delay(unsigned int ms)//注:ms_max=65536
{
      unsigned int i;
      do
      {
                i=1106;//STC8 11.0592MHz
                while(--i);
      }
      while(--ms);
}

void main(void)
{
      unsigned char i,j;

      P0M0 = 0x00;P0M1 = 0x00;
      P1M0 = 0x1f;P1M1 = 0x00;//P1.0~1.4推挽
      P2M0 = 0x00;P2M1 = 0x00;
      P3M0 = 0x00;P3M1 = 0x00;
      P4M0 = 0x00;P4M1 = 0x00;
      P5M0 = 0x00;P5M1 = 0x00;
      P6M0 = 0x00;P6M1 = 0x00;
      P7M0 = 0x00;P7M1 = 0x00;
      while(1)
      {
                if(++j>250)//
                {
                        j=0;
                        num++;
                }
                switch(i)
                {
                        case 0: dis_buf=table; break;
                        case 1: dis_buf=table; break;
                        case 2: dis_buf=table; break;
                        case 3: dis_buf=table; break;
                        case 4: dis_buf=table; break;
                }      
                P1&=0xe0;   //消隐
                P0=dis_buf;//送段码
                P1|=0x01<<i;//送位码
                i=++i%5;      //循环计数
                delay(2);   //延时2ms
      }
}

C_wolf 发表于 2026-5-4 14:42:18

看产品的定位和使用环境,再选方案吧。

xiaobendan 发表于 2026-5-4 14:56:32

限流470欧姆,用高亮的数码管,5位,亮度还行吧。
室内使用足够了,我见过用11F系列芯片直接驱动7位的,亮度也可以用。
我用0.4寸的4位的,电阻430欧姆,共阴的,片选端0.64V.亮度足够。
感觉用共阴极的毕竟好,IO的灌入电流似乎比输出电流要大一点。
但是再多位的我一般都是在片选增加三极管的。
或者比如8位的直接上1638,还带按键,与主板只用5根线,很是方便呢

神农鼎 发表于 2026-5-4 16:39:22

1.9 V ~ 5.5V 能正常工作,
不担心 MCU-VCC 抖动,但 MCU-GND 上少走大电流为好




21cnsound 发表于 2026-5-4 22:40:23

1、数码管数量不多时,可以用单片机直接驱动数码管,不串联电阻,可以通过调节占空比来调节亮度(5位数码管每一位的占空比是远小于20%的,因为其他时间要CPU处理其它事情)。某一段从小占空比向上调,切记不要调的太大,会烧坏LED或者单片机。
2、单片机直接驱动数码管,建议用共阴极,否则数码管不同数字的亮度不好控制。

xiaobendan 发表于 2026-5-5 12:55:46

21cnsound 发表于 2026-5-4 22:40
1、数码管数量不多时,可以用单片机直接驱动数码管,不串联电阻,可以通过调节占空比来调节亮度(5位数码管 ...

不加电阻,就容易出现8个段在某个数字上时亮度不一样的问题,不好搞,换个品牌就可能很明显。
页: [1] 2
查看完整版本: 关于数码管驱动问题