Ⅰ 51单片机流水灯原理
单片机流水灯控制原理就是将多个LED灯珠连接到不同的单片机输出端上,编程使单片机的这些输出端逐个的输出信号点亮LED,在设置好各个LED的通电时间和通电间隔时间后,就可以看到这些LED灯珠此起彼伏的亮起,如同流水一样.
Ⅱ 求两个独立开关控制点亮一个led灯的原理图
1. 双控开关基础电路图当K1扳到1位置的时候,k2扳到3位置,电路接通,电灯亮,此时,再扳动任何一个开关,都能使电灯熄灭。这属于两地开关控制
Ⅲ 单片机点亮一个LED灯的电路图实训内容所有的原件以及原件特点
单片机点亮一个LED灯,需要以下元件。80c51系列单片机一片,ch340一片,12Mhz晶体两个,22pf电容两个,4.7k电阻一个,10uf电容一个,轻触开关一个,LED灯一个,2.2k 1/4w电阻一个,USB座一个,USB线一根。这些元件的特点由其自身特性决定的。
Ⅳ 要求用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==20&&flag)
{
i=0;
P1=P1<<1; //依次亮灯
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1; //依次灭灯
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(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
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;i<N;i++);
for (j=0;j<110;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==20&&flag)
{
i=0;
P1=P1<<1;
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1;
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(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
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亮度原理:控制单片机输出pwm信号的占空比,占空比越大,灯越亮。反之,越暗。
Ⅶ 单片机的IO驱动LED灯电路,需要用到三极管,求原理图,并说明
搞不明白单片机I/O口驱动LED为什么要用到那么复杂的电路,是单纯的为了复杂而复杂吗?很晕!如果一个I/O口驱动一个LED,只要I/O口低电平有效LED串一个470Ω的电阻即可,如果驱动多个LED只要按下图即可:
如果Vcc=5v;则R0=1KΩ-5.1KΩ;Rn=470Ω。如果晶体管用S8550,那么同时点亮5个LED是没问题的。
Ⅷ 51单片机一个LED灯闪烁电路图原理
C1在最下方,最下方有C1,C2两个30PF的电容与晶振一起构成振荡电路。就本图及上面的解释而言,我个人认为解释中的C1应代表的是图中的C3,R2应代表的图中的R1。