本帖最后由 le062 于 2014-7-27 23:23 编辑
相信大家再刚接触单片机时一定玩过动态扫描,我这儿说下在动态扫描电路下对单颗LED进行亮度调节的实现方法。
首先说下一般动态扫描电路的做法, 如图,红黑线的16个交点为LED灯,限流电阻串在黑线上。依次导通COM口,同时控制四路SEG口的逻辑电平即可控制对应COM口上4个led的亮灭状态。通过快速扫描COM即实现动态扫描显示功能。 记SEG口数量为SEGNUM;COM口数量为COMNUM;扫描频率为LEDFREQ;动态扫描执行频率为EXECFREQ; 在一般动态扫描中,有EXECFREQ = LEDFREQ * COMNUM,最大亮度为常亮亮度的1/COMNUM。在较多LED灯的电路中,考虑到布线和IO资源,一般选择8个COM口左右。
那么,如何做亮度控制呢? 假设亮度级别为LIGHTLEVEL, 我们将COM口的EXECFREQ 增大到 LEDFREQ * COMNUM *LIGHTLEVEL。在一个扫描周期,即LEDFREQ * COMNUM次扫描里根据LED的亮度让该LED亮0至(LIGHTLEVEL - 1)次。 当然也可以维持COM口的扫描频率为LEDFREQ * COMNUM,将一个COM口导通时间分割成LIGHTLEVEL 个时间段,对应LED的亮度通过控制SEG口导通时间决定。
这两种方案都是可行的,后面将就后一种方案的软件实现进行说明。
|