呼吸灯,肯定很多人都写过,这里是一个简短的呼吸灯程序。
#include <STC12C5A.H>
#define uchar unsigned char
#define uint unsigned int
#define limit 100
sbit LED=P0^4;
void delay(uint ms)
{
uint i=0,j=0;
for(i=ms;i>0;i--)
for(j=123;j>0;j--);
}
void main()
{
uint t=50;
char d=1;
while(t+=d)
{
LED=t%2;
delay(t*(LED==1)+(limit-t)*(LED==0));//这条代码很巧妙的实现了两个状态的切换
if(t>=95||t<=5) d=-d;
}
}
程序有三个亮点,第一:用%2来实现LED灯的两种状态的切换。第二:用逻辑判断等实现了延时与LED灯状态的匹配。第三:边界条件的判断以及d=-d实现了呼吸灯的由灭逐渐到亮,再由亮逐渐到灭。这个可以想象成球撞击墙面的物理模型。