Ⅰ 单片机控制led灯的创新点是什么
单片机控制led灯的创新点是,LED的阳极全部接到了正极(电源),当负极接到LED的阴极时就会发光,因为LED的阴极与单片机的P2口相接,如果你想点亮那一个LED就把单片机相应的引脚赋值为低电平。具体如下:1、LED基础知识
LED是发光二极管的一种,它具有单向导电的特点,在51开发板上使用的是贴片式发光二极管,正向导电电压在1.8-2.2v之间,工作时的电流在1-20mA。当电流在1-5mA之间变化时,肉眼可以观测到亮度的变化,但是当电流在5-20mA之间变化时,亮度变化不太明显。如果电流一直增大二极管可能会烧坏。其余LED知识就不再进行叙述,其中LED原理图如下图所示。
LED原理图
2、点亮第一个LED灯
由原理图可知,LED的阳极全部接到了正极(电源),当负极接到LED的阴极时才会发光,因为LED的阴极与单片机的P2口相接,如果你想点亮那一个LED就把单片机相应的引脚赋值为低电平,具体程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
sbit led=P2^0; //将单片机的P2.0端口定义为led
void main()
{
while(1)
{
led=0;//P2.0端口设置为低电平
}
}
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
3、LED闪烁
如果想让LED进行闪烁就要涉及到延时,针对单片机进行延时的方法有很多,在此向大家推荐一种比较简单的程序助手—单片机小精灵,可以直接进行设置时间,并且生成相应的代码。
将P2^0引脚的LED进行间隔一秒闪烁的程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h" //头文件
sbit led=P2^0; //将单片机的P2.0端口定义为led
void delay1s() //延时1s,误差 0us
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main()//主程序
{
while(1)
{
led=0;//P2.0端口设置为低电平
delay1s();//调用延时函数
led=1;//P2.0端口设置为低电平
delay1s();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
为了使程序更好的进行表达,使用16进制进行表述,程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h" //头文件
void delay1s() //延时1s,误差 0us
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main()//主程序
{
while(1)
{
P2=0xFE;//P2.0端口设置为低电平
delay1s();//调用延时函数
P2=0xFF;//P2.0端口设置为低电平
delay1s();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
上面是针对一个LED灯进行的设计,下面针对8个LED灯依次闪烁进行设计,具体程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h" //头文件
void delay1s() //延时1s,误差 0us
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main()//主程序
{
while(1)
{
P2=0xFE;//1111 1110
delay1s();//调用延时函数
P2=0xFD;//1111 1101
delay1s();
P2=0xFB;//1111 1011
delay1s();
P2=0xF7;//1111 0111
delay1s();
P2=0xEF;//1110 1111
delay1s();
P2=0xDF;//1101 1111
delay1s();
P2=0xBF;//1011 1111
delay1s();
P2=0x7F;//0111 1111
delay1s();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
4、LED左右移动
上面进行描述的是利用延时并对P2口引脚进行赋值设计LED灯的闪烁,这样程序较为繁杂,下面将利用“左移”和“右移”进行设计,crol(a,b),左循环,a是左移的值,b是左移的位数;cror(a,b),右循环,a是右移的值,b是右移的位数。包含在instrins.h库函数中。具体程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h" //头文件,包含延时(_nop_ )和函数循环
typedef unsigned int u16;//声明新类型名
typedef unsigned char u8;//声明新类型名
#define led P2//宏定义
void delay1s() //延时1s,误差 0us
{
u8 a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main()//主程序
{
u8 i;//定义i的类型
led=0xFE;
delay1s() ;
while(1)
{
for(i=0;i<7;i++)//左移
{
led=_crol_(led,1);
delay1s() ;
}
for(i=0;i<7;i++)//右移
{
led=_cror_(led,1);
delay1s() ;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
5、总结
以上程序均进行了实验验证,完全正确。针对LED灯的控制,可以和按键进行联合设计,实现更多的功能,后面会进行更新。对于没有单片机开发板的小伙伴可以利用proteus仿真软件进行设计。
Ⅱ 单片机驱动多个LED
如图电路图,二极管只画出5个。
1、8050三极管不比达林顿管和mos管放大倍数较小,最小的可能只有40倍,以40倍计算,假设你的每个灯的电流为5mA(看你的应用了,如果用来照明不只5mA),12个灯就60mA,那么你基级需要提供的电流就是1.25mA,因为89C54系列单片机IO不带强推输出,电流有限,所以必须接上拉电阻,否则你的灯因为电流不足亮度很暗。
2、led必须加限流电阻,考虑到led的离散性,在电流一样的情况下,即便同种led两端的电压可能会有差异。而led这种元件在电压变化很小的情况下,电流变化很大。如果你直接并联,各个二极管两端的电压一样,很有可能某些led电流会比其它的led大,甚至某个led因电流过大而烧毁。
3、电路图中R1,根据你的电流选择,但是不要太小,R7可以用跳线直接连过去。
Ⅲ 利用单片机外接的三个按键分别模拟开关,调亮,调暗输入,控制2个发光二极管(指示灯和LED灯)
可以实现
这个有个高大上的名字:呼吸灯
可以自动慢慢亮然后慢慢灭,也可以增加按键控制亮灭的程度
原理是用PWM实现不同电压的输出来实现灯的变亮和变暗,下面是网上截的图,比较容易理解,具体程序的话,就自己动手吧
Ⅳ 单片机P1.0控制点亮一个发光二极管的电路怎么接
电路如图接即可(去掉右边的按键和左边的电容):
一般单片机对LED灯的接法都是如此,因为单片机IO口的电流输出能力很弱,一般不使用单片机输出高电平驱动LED灯,一般使用灌电流的方法驱动,即,单片机输出低电平,吸收电流的方法。
Ⅳ 单片机LED数码管电路中管脚和所控制的发光二极管的一一对应关系,如图
单片机LED数码管电路中,管脚和所控制的发光二极管的一一对应关系主要取决于数码管的类型以及字模的定义。
1. 共阴极数码管: 对应关系:在共阴极数码管中,所有字段的阴极连在一起作为公共端,而每个字段的阳极分别引出。当公共端接地,而某个字段的阳极接高电平时,该字段的发光二极管就会点亮。 管脚控制:每个字段对应一个管脚,通过控制这些管脚的高低电平,可以控制相应字段的点亮与熄灭。
2. 共阳极数码管: 对应关系:与共阴极相反,共阳极数码管中所有字段的阳极连在一起作为公共端,而每个字段的阴极分别引出。当公共端接高电平,而某个字段的阴极接低电平时,该字段的发光二极管就会点亮。 管脚控制:同样,每个字段对应一个管脚,但控制逻辑与共阴极相反。通过控制这些管脚的高低电平,同样可以控制相应字段的点亮与熄灭。
3. 字模的定义: 概念:字模是指要显示的字符的数字化描述。例如,要显示数字0,就需要根据数码管的封装和字段定义,确定哪些字段需要点亮。 应用:在程序中预先定义好各个字符的字模,显示时直接引用即可。更换了不同定义的元器件,只需更换相应的字模即可。
总结:单片机LED数码管电路中,管脚和所控制的发光二极管的一一对应关系取决于数码管的类型以及字模的定义。通过控制管脚的高低电平,可以实现数码管的字符显示。
Ⅵ 姝ょ数璺涓哄崟鐗囨満灏忕郴缁熺殑涓閮ㄥ垎锛岃繖涓鐢佃矾鏄濡备綍瀹屾垚鏁扮爜绠$殑鏄剧ず镄勶纻铡熺悊鏄浠涔堬纻
杩欐槸鍗旷墖链烘暟镰佺℃樉绀虹嚎璺锲撅紒
1锛氲繖鏄涓涓4浣岖殑鏁扮爜绠°傦纸链夊叡阒存瀬鍜屽叡阒虫瀬浜岀嶏级
4锛74573鑺鐗囩殑锷熻兘灏变笉澶氲翠简锛屽幓缃戜笂鎼灭储鑺鐗囱祫鏂椤惂銆