流水灯基本原理:
实验所需:
语言:C 芯片:STC90C51 板子:51单片机
电路图(局部就是电阻和灯)
流水灯运作原理:STC90C51芯片通过操作导致指定引脚释放出高电平,所对应的灯接收到闭合电路产生电流导致LED等闪亮。
以上是8个灯的简单视图,要启动对应灯,必须在以上接口提供高电平且形成闭合电路
芯片操作:操作利用的是引脚4组随机一组,我使用的是P0口,通过烧写把代码烧进flash内存,代码如下:
#include <reg51.h> //导入库文件,芯片公司写好的库文件方便调用
void Delay10ms(unsigned int c); //延迟10MS
void main()
{
while(1)
{
P0 = 0x00; //00000000 所有灯电平为低电平
Delay10ms(100);
P0 = 0xff; //11111111 所有灯电平为高电平
Delay10ms(100);
}
}
//通过循环的执行时间来延迟
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
扩展例子:(运作->全灭->1~8灯暗顺序单个亮->最后全亮)
#include <reg51.h>
void Delay10ms(unsigned int c);
void main()
{
while(1)
{
P0 = 0x00; //00000000
Delay10ms(100);
P0 = 0x01; //00000001
Delay10ms(100);
P0 = 0x02; //00000010
Delay10ms(100);
P0 = 0x04; //00000100
Delay10ms(100);
P0 = 0x08; //00001000
Delay10ms(100);
P0 = 0x08; //00001000
Delay10ms(100);
P0 = 0x10; //00010000
Delay10ms(100);
P0 = 0x20; //00100000
Delay10ms(100);
P0 = 0x40; //01000000
Delay10ms(100);
P0 = 0x80; //10000000
Delay10ms(100);
P0 = 0xff; //11111111
Delay10ms(100);
}
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
解析:以上例子已经很清楚显示出来,1为高电平,0为低电平,通过高低搭配把电压输出到引脚而使LED流水灯发亮.
例如:用二进制表示八个灯情况,若只需要第3个灯亮 0000 0100 -> P0 = 0x04 二进制转换16进制输出
总结不好多多担待,文章只单纯个人总结,如不好勿喷,技术有限,有错漏麻烦指正提出。本人QQ:373965070