概述:和流水灯原理相似,只是把灯摆成心形。
仿真用的Proteus,编程用的Keil
器件:AT89C51+LED+res(电阻)
原理:和流水灯原理一样利用P0.0为低位引脚,P0.7为高位引脚,就如P0 = 0X01时,只有P0.0输出高电平,其他引脚输出低电平。所以流水灯就是让P0的八个引脚依次输出高电平。
用P0,P1,P2,P3,一共三十二个引脚,用三十二个灯来画一个心形。
下面为仿真图
32位心型灯(心画的有点瑕疵),32个电阻(可用排阻,更简洁),使用网络标号让他们连在一起。
网路标号如何标?按A键就会蹦出如图
改为net = (你要用的数)
count的意思是#的初始值,increment就是 没点一次#加一;
因此依次点击就出现P0^0,P0^1,P0^2……
如图
画完仿真图就开始写程序
程序如下
#include<reg51.h>
unsigned char caideng[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};
void delay(void)
{
unsigned int x = 10000;
while(x--);
}
void main(void)
{
unsigned char i;
while(1)
{
P0 = 0xff;
for(i=0;i<8;i++){
P0 = caideng[i];
delay();
} P0 = 0xff;
for(i=0;i<8;i++){
P1 = caideng[i];
delay();
} P1 = 0xff;
for(i=0;i<8;i++){
P2 = caideng[i];
delay();
} P2 = 0xff;
for(i=0;i<8;i++){
P3 = caideng[i];
delay();
} P3 = 0xff;
}
}
当然啦,你可以改变caideng[]这个数组里的数,来实现心型灯的各种闪烁模样。
运行结果如下
彩灯灯顺时针转动,当然,如果想要做实物可以在加一点音乐,或者各种奇思妙想的想法。