单片机控制led灯点亮原理图(单片机点亮LED灯的原理)
单片机点亮一个LED灯的电路图实训内容所有的原件以及原件特点?
单片机点亮一个LED灯,需要以下元件。80c51系列单片机一片,ch340一片,12Mhz晶体两个,22pf电容两个,4.7k电阻一个,10uf电容一个,轻触开关一个,LED灯一个,2.2k 1/4w电阻一个,USB座一个,USB线一根。这些元件的特点由其自身特性决定的。
单片机控制led灯亮度原理
单片机控制LED亮度原理:控制单片机输出pwm信号的占空比,占空比越大,灯越亮。反之,越暗。
要求用51单片机控制8个LED亮灭的原理图+程序+解说?
本来以为这个程序很简单的,没想到写了快三个小时。哎学艺不精啊。贴出来给你研究吧。我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭
2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候
3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态
程序中使用了P1口与8个发光二极管相连,具体电路图你百度一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。
程序如下:
#include reg52.h
#include intrins.h
/*变量声明:
i、j、k都是记录计时器溢出次数的变量,
stat是记录当前显示状态的变量,由按键key控制
temp是状态2中保护P1口状态的变量*/
unsigned char i=0,j=0,k=0,stat=0,temp;
bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯
sbit key=P3^7; //按键控制
void init(); //初始化函数
void delay(unsigned int N); //延时函数
void keyscan(); //键盘扫描函数
void main()
{
init();
while (1)
{
switch (stat)
{
case 0: //0方案
if(i==20flag)
{
i=0;
P1=P11; //依次亮灯
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P11; //依次灭灯
temp=P1;
P1=temp+1;
}
}
break;
case 1: //2方案
if(i==20)
{
i=0;
P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯
}
break;
case 2: //3方案
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1; //保护P1口亮灯状态
k=0;
j=0;
}
//闪烁部分,应该可以优化
if(k5)
{
P1=0xff;
}
else if(k=5k10)
{
P1=temp;
}
else if(k=10k15)
{
P1=0xff;
}
else if(k=15k20)
{
P1=temp;
}
else if(k=20k25)
{
P1=0xff;
}
else if(k=30k35)
{
P1=temp;
}
else if(k=35k40)
{
P1=0xff;
}
//-----------------------------------
break;
}
keyscan();
}
}
void init()
{
TH0=0x3c; //定时器赋初值定时时间50ms
TL0=0xB0;
TMOD=0x01; //设置定时器工作方式为方式1
EA=1; //开总中断
ET0=1; //开中断允许位
TR0=1; //定时器计数
P1=0xfe; //这里假设led灯与P1口相连并且
//低电平有效
}
void delay(unsigned int N)
{
int i,j;
for (i=0;iN;i++);
for (j=0;j110;j++);
}
void keyscan()
{
if(!key)
{
delay(10); //消抖
if(!key); //确认有键按下
stat++;
if(stat==3)
{
stat=0;
}
//右键按下复位
i=0;
j=0;
k=0;
TH0=0x3c;
TL0=0xB0;
switch (stat)
{
case 0:
P1=0xfe;
flag=1;
stat=0;
break;
case 1:
P1=0x55;
break;
case 2:
P1=0xfe;
temp=P1;
break;
}
//-----------------------------------
while(!key) //此循环中的函数和主函数中的显示函数是同一个
//用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常
{
switch (stat)
{
case 0:
if(i==20flag)
{
i=0;
P1=P11;
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P11;
temp=P1;
P1=temp+1;
}
}
break;
case 1:
if(i==20)
{
i=0;
P1=~P1;
}
break;
case 2:
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1;
k=0;
j=0;
}
if(k5)
{
P1=0xff;
}
else if(k=5k10)
{
P1=temp;
}
else if(k=10k15)
{
P1=0xff;
}
else if(k=15k20)
{
P1=temp;
}
else if(k=20k25)
{
P1=0xff;
}
else if(k=30k35)
{
P1=temp;
}
else if(k=35k40)
{
P1=0xff;
}
break;
}
}
}
}
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xB0; //溢出后重新赋初值
//定时器中断时间为50ms
i++; //20次中断时间为1s
j++; //40次中断时间为2s
k++; //60次中断时间为3s
}
有什么不懂的可以百度Hi我
如何用AT89C51单片机点亮32个LED灯?求详细原理图。各位帮帮忙了!!!谢谢啦!
呵呵,最简单的,就是把四个端口的32条IO各连到一个LED的负极,然后每个LED各串一个电阻到电源.
不过这样的话,你的单片机就不能干别的事了.
当然也可以通过扩展,或者用矩阵,方法就很多了.
单片机控制led灯点亮原理图的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于单片机点亮LED灯的原理、单片机控制led灯点亮原理图的信息别忘了在本站进行查找喔。微信号:ymsc_2016
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~