51单片机上超酷流水灯的设计和实现
2008-12-29张嘉勇
中小学信息技术教育 2008年11期
在单片机上实现流水灯很简单,只需要几条指令就可以完成,大部分学生都可以完成任务。于是在第二课堂中就此提出了一个新的问题:能不能实现一个亮度渐变的、按规律移动的超酷流水灯?学生都觉得并不是很容易实现,反映的主要问题是IO口只能写开关量(只能写1或者写0),也就是说只能控制LED灯的亮和灭,却不能控制LED灯的亮度,IO口的两值性不能表示出亮度变化的渐变过程。可是在单片机中还有一种PWM技术可用01方式虚拟表示出一个模拟量,通过这个模拟量可控制LED灯实现渐变的过程。本文介绍如何让单片机通过使用PWM技术来实现超酷流水灯的设计方法。
一、什么叫PWM技术
PWM是脉冲宽度调制的简称。PWM波是一个连续的方波,在一个周期中,其高电平和低电平的占空比是不同的。一个典型PWM的波形如图1所示。

在图1中,T是PWM波的周期,T1是高电平的宽度,Vcc是高电平值。可以得到其输出的平均电压为:

式中,T1/T称为PWM波的占空比。控制调节和改变T1的宽度,即改变PWM的占空比,就可以得到不同的平均电压。我们在实际应用中,常可以利用PWM波的输出,实现调节输出电压的功能。
二、如何在单片机上实现PWM
如何周期性地控制输出脉冲?有两种方案:第一种方案是在主程序通过延时控制再输出;第二种方案是通过单片机的计时器中断延时驱动输出。第一种方案占用CPU运行时间;第二种方案计时器可以在后台独立运行,在等待过程中计时器不占用CPU运行时间。
单片机时钟中断生成PWM时系统有两个状态,状态A输出高电平,状态B输出低电平,状态A和状态B的时间宽度总和不变,为一常数TW,状态A的时间T1和状态B的时间T2分别与需要输出的平均电压相关。
在单片机实际软件设计上具体的做法是:在定时器中设定下次中断的延时时间,中断发生后,来到状态A,IO脚输出高电平,根据要输出的电压,设定下次中断来的延时时间为T1,T1时间到,新中断发生后,来到