‘壹’ 单片机彩灯闪烁阴极控制的好处
①阴极控制:灯正极接电源(不讨论串联电阻),负极接单片机,电流流向由:电源→灯→单片机→地。
②阳极控制:灯正极接单片机,负极接地,电流流向由:电源→单片机→灯→地。
在单片机 IO中,①点电流是 流进的,称 灌电流;②点电流是流出的,称 拉电流;
单片机的 灌电流能力 要比 拉电流 能力 强得多,就是说,再不增加驱动电路的情况下,使用 负极驱动方式,能让 灯更亮。
‘贰’ 继电器用单片机控制,是控制阳极好还是阴极好
继电器用单片机控制:
1, 用三极管控制共阳极数码管是利用三极管的开关特性,比如用pnp三极管的话,集电极接地,然后通过基极控制三极管的通断,当通过单片机给基极一个低电平时,发射极导通,集电极与发射极也之间也导通了,一般都是用三极管控制数码管的位选引脚。简单地说就集电极和发射极相当于一个开关,基极是控制端,基极给高电平是,开关是断开基极给低电平时,开关合上!象单片机学习板上的蜂鸣器和继电器也是用样的继电器正输入接24V/12V上拉,负输入接NPN管子/达林顿管的OC ,单片机口线经光偶控制管子。
2, 这样做的原因,一是可以将继电器作为管子的集电极负载,二是有利于单片机端的控制,因为将管子OC接24V的话,继电器就是管子的射极负载,会造成管子的发射极电位浮动变化,不利于管子饱和输出。而且由于NPN管子的结构,接发射极,继电器开关时的脉冲干扰会对基极造成更大的影响。
‘叁’ 怎么区分单片机上面LED是共阳极还是共阴极
使用万用表来测试完成。步骤如下:
前提是你的万用表最好是用3V以上电池,因为1.5V不够点亮LED,特别是高亮超高亮的,点亮电压高。另外万用表在RX1档或最高档。
万用表笔随便一脚,假设红笔, 搭在数码管上任一脚 。黑笔在其它脚上扫过,如果不亮,有可能此管为共阴,可用3法再试。如有一段点亮。黑笔不动, 移动红笔,在其它脚测。如果其它脚 分别都 能点亮,则可以说明黑笔接的是公共脚 ,此管共阳。(指针 表的黑表笔是正电源)
3. 表笔更换一下,黑笔先搭一脚,扫红笔。如有一段点亮,红笔不动,扫黑笔。如各段分别点亮,则红笔所接为公共 ,此管共阴。
4. 如2、3两法均不亮,可能数码管额定电压较高,也可能数码管是坏的。这时,可用5V电源串一500欧电阻继续测试
‘肆’ 单片机实验板上的发光二极管阴极接地还是阳极接地可以自己改吗
发光二极管发光必须要阳极电位高于阴极电位,这个压降得看你的发光管颜色,从0.几伏到几伏不等的。怎么接要看控制电路的,你说一段接了地,常规来说应该是阴极接地了。
‘伍’ 发光二极管的阴极或阳极引脚都可以和单片机引脚相连
当然都可以,接阳极时,单片机的I/O口是输出驱动电流,高电平时亮;接阴极时,单片机的I/O口是灌入驱动电流,低电平时亮。根据需要选择。但对于51单片机,一般I/O口属于集电极输出,所以灌电流可以比较大,比如可达35mA左右,而输出(拉电流)电流比较小,一般小于10mA,所以通常使用阴极接单片机方式,可获得较大电流和较高亮度。
‘陆’ 在单片机中,怎样判断数码管的阴阳极
1、检查数码管是共阴还是共阳,A表示共阳,K表示共阴。或者直接给公共端接高电平或者低电平,段码端一部分接高电平,一部分接低电平,这样数码管亮的话看公共端接的是高还是低电平就可以判断了。
2、看你接的限流电阻是不是太大,大于1K的值有可能不亮,最好不要接限流电阻。做实际的实物电路再加上470欧姆。
3、是不是接到51单片机的P0口了,接到P0口必须加上拉电阻,否则不会亮。
4、如果是程序控制数码管,注意延时时间的长短,太短会看不到亮。
‘柒’ LED数码管哪个脚是阴极哪个是阳极
如果共阳的,3或8应该是阳极,接电源,单片机控制其他管脚就可以了。
如果是共阴的,3或8就是阴极,接地,单片机控制脚要通过三极管再接数码管的管脚。
一般单片机不用输出直接接数码管管脚进行驱动,而是要通过hc595、cd4094等芯片驱动。
‘捌’ 单片机里数码管的共阴极和共阳极是怎么回事
数码管是共阴极,意思是几段数码管的阴极都接在一起。这样只要给阴极一个高电平,所有的段码都不会亮,如果给低电平,则看对应阳极的电平高低,所以共阴极就是位选,只有它为低电平(选中这位)才能对该数码管操作。
‘玖’ 单片机 汇编语言编写 独立键盘 控制小灯
单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4
程序:
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
RR A
RR A
RR A
ORl A,#0F0H
MOV P1,A
SJMP START
可以检测单个按键,也可以同时检测多个按键
过程:开始——读P1口数据到A——A中的数据右移4次——A中的内容和F0H相或——A中的数据送到P1口——回到开始
‘拾’ 单片机控制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仿真软件进行设计。