8个LED的阳极接电源VCC,为了保护LED,每条支路分别串联一个1K的电阻(因为LED有工作电压限制,超过工作电压,正向PN结电流过大,容易烧毁LED,所以串联一个1K电阻)。
8个LED的阴极分别接P20~P27 8个拐角处,由于发光二极管的单向导电性,每条支路LED的阳极已经是高电平,因此每条支路的LED阴极只要给低电平,该支路的LED就会被点亮。
图1 LED模块原理图
代码实现部分:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include //加入有左右移函数的头文件
#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); //大约延时450ms
while(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 编译通过,亲测可用,可直接复制粘贴!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)