某论坛上看到一个人提问,把我的回答也记在这边做个记录。
原问题
现在是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;
}
}