标题: 单片机怎么控制带74hc595驱动的4位数码管的亮度 [打印本页]

作者: gz320324    时间: 2019-5-6 14:43
标题: 单片机怎么控制带74hc595驱动的4位数码管的亮度
现在是4位数码管,共阳,已经驱动74hc595让4位数码管亮起来了,现在在这基础上再控制数码管上数字的亮度,想过用pwm控制,但是,pwm管脚不是直连数码管阴极的吗?现在是单片机直连595驱动,595驱动上的管脚连接数码管,从而点亮数码管的,所以不知道该怎么解决?

作者: gz320324    时间: 2019-5-6 20:02


作者: yzwzfyz    时间: 2019-5-7 11:25
数码管的亮度:取决于加上它上面的电流。
你有办法增加它的电流吗(含通电的时间,好即平均电流)?
作者: tzs233    时间: 2019-5-7 14:47
你这电路图设计思路就不对  一般595的I/O电流 才25mA   数码管亮的笔段一多DIG0~DIG3不能提供足够多的电流,数码管亮度就不受控了。

你可以先通过单片机或595的I/O控制 三极管/场管, 连到数码管共阳极DIG0~DIG3上。 这样PWM占空比来调节通断时间达到控制总电流,进而稳定控制数码管亮度
作者: 兰州hsd    时间: 2019-5-7 15:40
你需要加三极管来供电,I\O口只需要给三极管一个导通截至的信号即可,否则I\O口电流太小亮度无法提高的。
作者: w1179benp    时间: 2019-5-7 19:02
找个开发板看看成熟的数码管应用,别闷头瞎想
作者: gz320324    时间: 2019-5-8 09:10
tzs233 发表于 2019-5-7 14:47
你这电路图设计思路就不对  一般595的I/O电流 才25mA   数码管亮的笔段一多DIG0~DIG3不能提供足够多的电流 ...

哦哦,谢谢您,我试试。
作者: gz320324    时间: 2019-5-8 09:11
兰州hsd 发表于 2019-5-7 15:40
你需要加三极管来供电,I\O口只需要给三极管一个导通截至的信号即可,否则I\O口电流太小亮度无法提高的。

好的好的,我先试试。
作者: yzwzfyz    时间: 2019-5-8 14:39
本帖最后由 yzwzfyz 于 2019-5-9 08:19 编辑

如果你是一般的LED,则不需要加三极管,因为普通LED 40mA 时亮度已达到最亮捌点,电流再大,亮度提升也不大了,也就是说,你只能让LED的亮度在3-40mA之间变化。再大再小意义都不大。非普通LED即便电流不同,但意思一样。
595的I/O输出吸收电流=40mA是没有问题的(=0时亮),但高电平输出电流(=1亮)就小得多了!
再加上的扫描输出,如果是1/8扫描,其平均电流只有1/8,所以设计到60mA也可以!
综上所说,你只要改一下限流电阻就OK了!

作者: yzwzfyz    时间: 2019-5-8 14:40
本帖最后由 yzwzfyz 于 2019-5-9 08:20 编辑

当然亮度是有极限的,另外扫描时,亮度占空比也是关键。
作者: 路遥wolf    时间: 2020-4-27 14:30
yzwzfyz 发表于 2019-5-7 11:25
数码管的亮度:取决于加上它上面的电流。
你有办法增加它的电流吗(含通电的时间,好即平均电流)?

用SS8050,1.5A
作者: mangolovecarrot    时间: 2020-11-28 04:25
都没回到到点子上。用595驱动时一样可以用PWM的概念控制亮度。楼主一定是觉得亮度太高想降低亮度对不对。你可以这样,我自己就是这么做的,完全没有任何问题。

首先定义一个最高亮度,比如200,这个数字可以随意定,数字越大可控制的亮度级别越精细
#define MAX_BRIGHT 200
然后定义一个你需要的亮度,这个亮度取值0-200,比如2
#define BRIGHT 2
再定义1个变量用于PWM计数
uchar nowPwm;

然后在main函数的while循环中(或者定时器中)写以下代码
        while(1){
                nowPwm++;
                if (nowPwm<=BRIGHT)
                {
                        // PWM计数还没有超过你指定亮度值的时候点亮数码管(也就是让位选端的IO通电)
                        // 根据你自己的写法填在这里
                } else {
                        // 当PWM计数已经超过你设置的亮度值以后,就关闭所有数码管的输出
                        // 根据你自己的写法填在这里
                }
                // 计数超过最大亮度值时计数值归零,进行下一个PWM的Cycle
                if (nowPwm>=MAX_BRIGHT)
                {
                        nowPwm=0;
                }
        }
作者: npn    时间: 2023-9-18 09:30
控制数码管亮度就要输出更高频率的PWM,单片机移位频率不够。
用FPGA的高速移位时钟可使74HC595的Q0~Q7输出上Mhz的信号。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1