51单片机——LED流水灯
51单片机——LED流水灯
LED模块原理:
8个LED的阳极接电源VCC,为了保护LED,每条支路分别串联一个1K的电阻(因为LED有工作电压限制,超过工作电压,正向PN结电流过大,容易烧毁LED,所以串联一个1K电阻)。8个LED的阴极分别接P20~P27 8个拐角处,由于发光二极管的单向导电性,每条支路LED的阳极已经是高电平,因此每条支路的LED阴极只要给低电平,该支路的LED就会被点亮。
图1 LED模块原理图
代码实现部分:
实验效果:led灯从右往左流,到达左端时开始往右流;
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h> //加入有左右移函数的头文件#define led P2 //将P2口定义位led 后面即可使用led代替P2口void delay(unsigned int i) //定义一个延时函数,不延时肉眼看不到效果
{ while(i--);
} void main()
{ unsigned char i; led=0xfe; //led = 1111 1110 即只有LED7阴极输出低电平,只有LED7亮delay(50000); //大约延时450mswhile(1) { for(i=0;i<7;i++) { led=_crol_(led,1); //将led左移7位delay(50000); //大约延时450ms,即点亮第一个LED与点亮第二个LED之间的时间间隔} for(i=0;i<7;i++) { led=_cror_(led,1); //将led右移7位delay(50000); //大约延时450ms} }
}
代码部分已用Keil uVision5 编译通过,亲测可用,可直接复制粘贴!