嵌入式 51单片机 流水灯原理详解

时间:2021-05-01 18:58:01

流水灯基本原理:


实验所需:

语言:C     芯片:STC90C51    板子:51单片机



电路图(局部就是电阻和灯)

嵌入式 51单片机  流水灯原理详解


流水灯运作原理:STC90C51芯片通过操作导致指定引脚释放出高电平,所对应的灯接收到闭合电路产生电流导致LED等闪亮。


嵌入式 51单片机  流水灯原理详解

以上是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