流水灯基本原理:

 

实验所需:

语言: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

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐