关于数码管驱动问题
您好,使用STC8A8K64D4芯片,芯片工作电源5V,通过动态扫描方式(频率100HZ),
驱动一个5位,共阳的0.56英寸的数码管,
P0口8位做数码段位显示控制,P1口5位做数码片选控制,
P1口设置推挽输出,高电平直接驱动,
P0口串接470欧下拉限流电阻,具体电路图如下,
在频率100HZ下,每位数码片选的占空比是20%,
通过示波器测量P1口输出的高电平在4.1V左右,
高电平和工作电源5V之间有压降,
是不是驱动电流大了,导致压降增加了,
如果P1口通过三极管放大后驱动数码片选,是不是会好点。
另如果在不增加外围器件的情况下,
驱动电压有什么办法可以提高吗?谢谢
https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf
芯片的驱动能力就在那里了,还是加三极管吧
试试带LED驱动的型号看会不会电流更大一些。
或者直接上专用的驱动芯片像1638这种
https://www.stcaimcu.com/data/download/Datasheet/STC8H.pdf
什么?8H4K64TL硬件80mA大电流LED数码管自动刷新驱动居然可以8位亮度256种组合? - 段码LCD/80mA大电流LED数码管自动刷新显示/RTC实时时钟/触摸按键/低功耗 国芯人工智能技术交流网站 - AI32位8051交流社区
测试程序
#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
}
}
看产品的定位和使用环境,再选方案吧。 限流470欧姆,用高亮的数码管,5位,亮度还行吧。
室内使用足够了,我见过用11F系列芯片直接驱动7位的,亮度也可以用。
我用0.4寸的4位的,电阻430欧姆,共阴的,片选端0.64V.亮度足够。
感觉用共阴极的毕竟好,IO的灌入电流似乎比输出电流要大一点。
但是再多位的我一般都是在片选增加三极管的。
或者比如8位的直接上1638,还带按键,与主板只用5根线,很是方便呢
1.9 V ~ 5.5V 能正常工作,
不担心 MCU-VCC 抖动,但 MCU-GND 上少走大电流为好
1、数码管数量不多时,可以用单片机直接驱动数码管,不串联电阻,可以通过调节占空比来调节亮度(5位数码管每一位的占空比是远小于20%的,因为其他时间要CPU处理其它事情)。某一段从小占空比向上调,切记不要调的太大,会烧坏LED或者单片机。
2、单片机直接驱动数码管,建议用共阴极,否则数码管不同数字的亮度不好控制。 21cnsound 发表于 2026-5-4 22:40
1、数码管数量不多时,可以用单片机直接驱动数码管,不串联电阻,可以通过调节占空比来调节亮度(5位数码管 ...
不加电阻,就容易出现8个段在某个数字上时亮度不一样的问题,不好搞,换个品牌就可能很明显。
页:
[1]
2