✦ WELCOME TO MY WORLD ✦
✦ 2020-11-28 05:29 · 嵌入式 / 软技术 / MCU

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

某论坛上看到一个人提问,把我的回答也记在这边做个记录。

原问题

现在是4位数码管,共阳,已经驱动74hc595让4位数码管亮起来了,现在在这基础上再控制数码管上数字的亮度,想过用pwm控制,但是,一般来说pwm管脚不是直连数码管阴极的吗?现在是单片机直连595驱动,595驱动上的管脚连接数码管,从而点亮数码管的,所以不知道该怎么解决?

回答

都没答到到点子上。用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;
        }
    }
标签:pwm · 函数 · 代码 · 亮度 · nowpwm · 数码 · max_bright
← STVD+COSMIC编译工程时出现Error creating process for executable mapinfo 使用N76E616制作的段码液晶屏温度计的低功耗调教 →

▣ 评论告示牌

留下你的评论