

在实现流水灯之前,我们有必要提一点,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的代码,要具体型号的单片机具体电路图分析,切勿照抄照搬!!!