硬件编程精粹·玩转LED·流水灯

【任务】使用AT89C51单片机的P0口驱动8个流水LED。

【硬件平台】假定每个LED的正向工作压降为2V,工作电流为3mA,共阳VCC=+5V供电,限流电阻(5-2)/3=1k。P0口每个引脚的最大灌电流为10mA(对3mA有较大余量),因此不必使用三极管扩流驱动。采用总线画法的电路图如下:

【编程思路】

/*采用51单片机*/

#include

/*包含移位指令的头文件*/

#include

/*宏定义无符号整型和无符号字符型,省略表达方式*/

#define uint unsigned int

#define uchar unsigned char

/*每盏灯的亮灭之间有时间间隔,须定义一个延时函数,通过内外循环次数之积来实现*/

void delay(uint x)

{

uchar i; //定义内层循环变量

while(x--) //外层x次循环

{

/*内循环截止条件可根据实际情况确定,这里以100为例, 从0到99执行100个空操作循环*/

for(i=0;i<100;i++);

}

}

/*主程序,实现8个LED依次轮流点亮*/

void main()

{

P0=0xFE;//使八个灯的初始电平状态为11111110,点亮连接P0.0的灯

while(1)//上电后无限循环

{

P0=_crol_(P0,1);//P0值向左移动1为,点亮下一盏灯(上一盏灯熄灭)

/*300可调为其他值,从而改变相邻灯的亮灭间隔时间,使流水效果明显(太快或太慢 都不合适)*/

delay(300);

}

}

【程序截图】

原文链接:,转发请注明来源!