51单片机之实现流水灯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpu_zhn/article/details/83018145

    在实现流水灯之前,我们有必要提一点,C51代码在写之前,要参考电路图来写。拿流水灯来说,我们来看图二,LED灯,也就是二极管,八只LED的正极通过一根总线接在+5V的电压上,再看图一,可知八只LED灯的负极接在LED、P2的8个I/O口上。根据二极管的导通条件可知,在单片机的IO口输出低电平时,才能点亮LED灯。

下面贴上代码:

#include<reg52.h>

#define uchar  unsigned char
#define uint   unsigned int 

sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;

/* ********************************************* */
// 函数名称: Delay()
// 函数功能:毫秒延时
/* ********************************************* */

void delay(uint z)
{
	uint x,y;
	for(x = 0; x < z; x++)
		for(y = 0; y < 113; y++);
}
// 函数名称: main()
// 函数功能: 实现一个LED灯一闪一闪的效果

void main(void)
{
	while(1)
	{
		LED1 = 0;           //灯亮
		delay(1000);        //持续亮1s
		LED1 = 1;           //灯灭
		delay(1000);        //持续灭1s
		LED2 = 0;
		delay(1000);
		LED2 = 1;
		delay(1000);
		LED3 = 0;
		delay(1000);
		LED3 = 1;
		delay(1000);
		LED4 = 0;           //灯亮
		delay(1000);        //持续亮1s
		LED4 = 1;           //灯灭
		delay(1000);        //持续灭1s
		LED5 = 0;
		delay(1000);
		LED5 = 1;
		delay(1000);
		LED6 = 0;
		delay(1000);
		LED6 = 1;
		delay(1000);
		LED7 = 0;
		delay(1000);
		LED7 = 1;
		delay(1000);
	}	

}

      想必大家在看过前两张电路图后,再来看代码,就大概懂什么意思了吧。首先利用sbit的第二种使用方法:sbit 位变量名=SFR名称^变量位地址值 ,例:sbit LED1 = P2^0,  即定义LED1为P2口的第1位,以便进行位操作。

     接着我们写了一个毫秒级延时函数,当然了,这里所谓的延时是不准时的延时,是我们通过一些调试后,测试出来的“1秒“,要想真正准确地实现一秒钟延时,还要使用定时器,由于这里要求不是那么准确,我们利用毫秒级延时函数实现就可以。

    最后就是我们的主函数,也就是功能函数了,对单片机而言,我们都知道,单片机的最大功能在于控制,而单片机的控制也是体现在输出高低电平,而单片机之所以能够实现那么多的功能也是靠着周围扩展的模块。在C51里,1即是高电平,0即是低电平,对LED灯而言也就分别是灭,亮了。另外我们还调用了延时函数,以此实现流水灯的实现。

 (链接:https://pan.baidu.com/s/1CtSpgtdKuNh5P3CmCqHuwA 
提取码:nb2i      视频实现)

    最后有一点要提醒大家,C51的代码,要具体型号的单片机具体电路图分析,切勿照抄照搬!!!

猜你喜欢

转载自blog.csdn.net/hpu_zhn/article/details/83018145