找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6730|回复: 12
打印 上一主题 下一主题
收起左侧

单片机怎么控制带74hc595驱动的4位数码管的亮度

[复制链接]
跳转到指定楼层
楼主
现在是4位数码管,共阳,已经驱动74hc595让4位数码管亮起来了,现在在这基础上再控制数码管上数字的亮度,想过用pwm控制,但是,pwm管脚不是直连数码管阴极的吗?现在是单片机直连595驱动,595驱动上的管脚连接数码管,从而点亮数码管的,所以不知道该怎么解决?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:528471 发表于 2019-5-6 20:02 | 只看该作者

回复

使用道具 举报

板凳
ID:123289 发表于 2019-5-7 11:25 | 只看该作者
数码管的亮度:取决于加上它上面的电流。
你有办法增加它的电流吗(含通电的时间,好即平均电流)?
回复

使用道具 举报

地板
ID:509408 发表于 2019-5-7 14:47 | 只看该作者
你这电路图设计思路就不对  一般595的I/O电流 才25mA   数码管亮的笔段一多DIG0~DIG3不能提供足够多的电流,数码管亮度就不受控了。

你可以先通过单片机或595的I/O控制 三极管/场管, 连到数码管共阳极DIG0~DIG3上。 这样PWM占空比来调节通断时间达到控制总电流,进而稳定控制数码管亮度
回复

使用道具 举报

5#
ID:337540 发表于 2019-5-7 15:40 | 只看该作者
你需要加三极管来供电,I\O口只需要给三极管一个导通截至的信号即可,否则I\O口电流太小亮度无法提高的。
回复

使用道具 举报

6#
ID:149451 发表于 2019-5-7 19:02 | 只看该作者
找个开发板看看成熟的数码管应用,别闷头瞎想
回复

使用道具 举报

7#
ID:528471 发表于 2019-5-8 09:10 | 只看该作者
tzs233 发表于 2019-5-7 14:47
你这电路图设计思路就不对  一般595的I/O电流 才25mA   数码管亮的笔段一多DIG0~DIG3不能提供足够多的电流 ...

哦哦,谢谢您,我试试。
回复

使用道具 举报

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

好的好的,我先试试。
回复

使用道具 举报

9#
ID:123289 发表于 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了!
回复

使用道具 举报

10#
ID:123289 发表于 2019-5-8 14:40 | 只看该作者
本帖最后由 yzwzfyz 于 2019-5-9 08:20 编辑

当然亮度是有极限的,另外扫描时,亮度占空比也是关键。
回复

使用道具 举报

11#
ID:709940 发表于 2020-4-27 14:30 | 只看该作者
yzwzfyz 发表于 2019-5-7 11:25
数码管的亮度:取决于加上它上面的电流。
你有办法增加它的电流吗(含通电的时间,好即平均电流)?

用SS8050,1.5A
回复

使用道具 举报

12#
ID:850527 发表于 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;
                }
        }
回复

使用道具 举报

13#
ID:57657 发表于 2023-9-18 09:30 | 只看该作者
控制数码管亮度就要输出更高频率的PWM,单片机移位频率不够。
用FPGA的高速移位时钟可使74HC595的Q0~Q7输出上Mhz的信号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表