芒果爱吃胡萝卜 - 亮度
type: channel
link: http://blog.mangolovecarrot.net/tag/%E4%BA%AE%E5%BA%A6/
items: 单片机怎么控制带74hc595驱动的4位数码管的亮度

单片机怎么控制带74hc595驱动的4位数码管的亮度
type: item
date: 2020-11-28T04:29:28+08:00
description: 某论坛上看到一个人提问，把我的回答也记在这边做个记录。原问题现在是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; } }