基于DAC0832的LED亮度控制系统设计
图中横坐标表示时间,在一个周期内发光二极管的亮度会按三角形规律变化,设每个变化周期为T,第二个发光二极管D1的变化滞后第一个发光二极管D0三分之一周期,同样D2滞后D1三分之一周期。
图6中的横坐标表示亮度,也就是对应的要转换成模拟量的数字量的数值。在主程序中三个字节30H、31H、32H中数值对应三个发光二极管的亮度,设定三个字节33H、34H和35H 的值控制三个二极管亮度增加还是减弱( 1 增强, 0 减弱) 。假设开始时D1对应亮度为0,D0、D2对应亮度均为170,则三个二极管的亮度变化应该是D0和D2亮度增加,D2亮度减弱,则三个亮度控制字节的值分别为33H、35H中为1, 35H中为0。
采用T0中断实现三个发光二极管亮度的改变,则每到一次定时中断将完成如下功能:
1) 根据三个字节33H、34H和35H的值,分别对30H、31H和32H的值进行增1或减1操作。
2) 当亮度字节的数值增加到255时对应控制字节数值清零,亮度字节数值减到0时,对应控制字节数值置1。
由于在主程序中和中断子程序同时使用工作寄存器R0,所以在中断程序的开始和结束有一个保存和恢复R0中数值的过程。
中断程序的程序框图为:
即: TH0 = F0H, TL0 =BEH3
3 结语
文中设计了基于DAC0832实现对LED控制的系统,在单片机的控制下,利用多路开关和电压保持电路实现了对多个发光二极管亮度的变化控制,实现了LED灯的灯光旋转的效果。如果将此电路扩展,接更多的模数转换器和多路开关,就可以实现各种复杂图案的变化。采用电压保持电路的办法也可以应用到其它领域的模拟控制中。
评论