1. LeD数码管在显示时公共端有那两种连接方式单片机分别输出什么电平可以使数码
LeD数码管在显示时公共端有共阳极和共阴极两种连接方式。单片机驱动led码段分别输出低电平,输出高电平可以使数码管段点亮。
2. 单片机怎么控制LED点阵实现左移显示
相信你是个新手,相信你用的是51的两排8位口实现的功能,那么楼上的解释你可能不太懂(说实话我也不是很懂。)
但是简单一点来说led点阵需要两排8位,一个负责行,一个负责列,比如0是选中的意思,那么行是01111111,列是1011111,那么第一行的第二列灯亮。原理说完,那么左移的话那就简单了,简单而言,行不变,列左移一位,比如上面的行保持01111111,列在下一次变成01111111,就使得第一行的第一列亮灯了。那么在左移的时候,行是不用变,原来是多少就多少;而列呢,每次使用左移符号”<<“左移一位,就达到了左移显示的效果了。
3. 在单片机应用系统中。LED数码管显示电路通常有什么显示方式
动态扫描。
LED灯是继电器工作状态指示灯,点亮代表继电器启动中,熄灭代表继电器关闭,LED1是伴同蜂鸣器报警的指示灯,只要数码管不处于设置时间状态,都能够用E归零键进行清零操作,数码管就会显示00:00 (此时不是对主芯片进行复位,只是对状态进行清零) 。
(3)单片机led显示扩展阅读:
注意事项:
检查时若发光暗淡,说明器件已老化,发光效率太低。如果显示的笔段残缺不全,说明数码管已局部损坏。
对于型号不明、又无管脚排列图的LED数码管,用数字万用表的h距挡可完成下述测试工作:判定数码管的结构形式(共阴或共阳),识别管脚,检查全亮笔段。预先可假定某个电极为公共极,然后根据笔段发光或不发光加以验证。
4. 单片机编程:LED动态显示
不知道你要怎能么动?我就给个数字显示也动,数码馆也流水显示的
#include
#include
//包含流水灯的头文件
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
temp,aa,num,numwe;
sbit
an=P3^3;
//段控制端定义
sbit
wei=P3^4;
//位控制端定义
uchar
code
tablewe[]={0x01,0x02,0x04,0x08,0x10,0x20};
//6个数码管位码
uchar
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E,};
//数码管段码(共阳)
void
main()
{
//以下为初值:
aa=0;
num=0;
//段码要显示的个数,初始为0
numwe=0;
//位码要移动的位数,初始为0
temp=0x01;
//显示状态为单灯暗涌移动,若改成0xfe则单灯点亮移动
P2=temp;
//LED显示在第一位
an=1;
//选通段
P0=0xC0;
//送段码、从0开始显示
an=0;
//关闭段
wei=1;
//选通位
P0=0x01;
//送位码、从第一位数码管开始显示
wei=0;
//关闭位
TMOD=0x01;
//TO工作方式1,也直接写TMOD=0
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
//赋定时初值50MS
EA=1;
ET0=1;
//开定时器0中断
TR0=1;
//启动定时器0
//以下为循环:
while(1)
{
if(aa==100)
//变化延时
{
aa=0;
temp=_crol_(temp,1);
//单灯左移值
P2=temp;
//显示
num++;
//段加1
if(num==16)//0~F共16个,最多到显示”F"
num=0;
an=1;
//开段
P0=table[num];
//显示
an=0;
numwe++;
//位加1
if(numwe==6)//最多移6位
numwe=0;
wei=1;
//开位
P0=tablewe[numwe];
//显示
wei=0;
}
}
}
void
exter0()
interrupt
1
using
1
//using选通用工作寄存器R0-R7,默认为0组
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
aa++;
}
5. 单片机led显示c程序
电路图如下:
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitan=P2^6;
sbitwei=P2^7;
ucharcodedigit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};
voiddelay(xms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
while(1)
{
wei=1;
P0=0x01;
wei=0;
an=1;
P0=digit[0];
an=0;
delay(500);
wei=1;
P0=0x02;
wei=0;
an=1;
P0=digit[1];
an=0;
delay(500);
wei=1;
P0=0x04;
wei=0;
an=1;
P0=digit[2];
an=0;
delay(500);
wei=1;
P0=0x08;
wei=0;
an=1;
P0=digit[3];
an=0;
delay(500);
wei=1;
P0=0x10;
wei=0;
an=1;
P0=digit[4];
an=0;
delay(500);
wei=1;
P0=0x20;
wei=0;
an=1;
P0=digit[5];
an=0;
delay(500);
}
}
6. 单片机开关控制LED数码管的编码
一,什么是数码管
数码管,其实就是由多个led组合在一起的组合显示块;有共阴极的,也有共阳极的。使用的数码管不同,里面包含的led个数也会有相关的差异。我们通常使用的数码管,里面有8个led灯,大家可以参照生活中的数码管器件就一目了然了,你会发现,数码管显示的每一个数字或字母,都是一段一段组合拼接起来的,并不是像写的那样圆滑。其中,组合的每一个段,就是一个led灯。
二,点亮一个数码管
2.1.在点亮数码管之前,你还必须弄清楚,改数码管的接是共阴极还是共阳极的接法;其次,还得弄清楚是那几个(或一个) IO口是IO口 的断选位(也就是控制显示哪一个数码管,通常由IO口控制一个译码器来实现,因为这样更节约IO口资源)。
2.2.弄清楚断选位之后,还得知道,是哪些IO口控制我们的数码管上的led;
比如:
P0.0 控制数码管上的led.0;(注意:数码管上对应的led位,可以参照原理图上的或查阅相关资料获得,这里仅仅举列)
P0.1-->led.1 P0.2-->led2 ......
2.3.想要点亮数码管很容易,只要开启对应的数码管断选位,再设置数码管上led的值为点亮(有的数码管是共阴极接法,有的是共阳极接法,根据具体的设计,给出相关的高或低电平即可)就OK了。但是,我们要在数码管上显示我们想要的数字增么办呢?这个时候,就是考研创造力的时候了,有的数码管的资料会直接给出它的真值表,但有的却不一定找得到。在这个时候,我们就得根据我们想要显示的数字,点亮并熄灭对应数码管上的led来实现。(推荐:你可以自己先实验,找出0-9,或其他想要显示的字符所对应的IO口的值,来保存起来,这样你就可以重复利用啦!)
三,点亮多个数码管
3.1 我们想要点亮多个数码管,首先可以根据2.1,弄清楚你的数码管的断选位,然后周期性的改变断选位的值,以此动态逐个显示你的数码管。
3.2 在显示多个数码管时,建议周期大于100hz,这样人眼难以识别起关和开的瞬间,我们看起来就像时很多个数码管同时点亮了一样。
四,动态显示数码管
4.1 ,在动态显示数码管的值时,建议先根据2.2和2.3,把对应的数码管显示参数照准,并保存下来,这样你用起来也方便。
4.2, 动态显示数码管,我们可以在规定的时间周期,改变数码管对应led的开关个数来实现,比如说:
0 在数码管中显示的值为0xc0 1是0xf9
那么我们就可以在规定的时间里,切换该值,从而达到动态效果。
4.3 我们应该注意的时,扫描数码管(即显示多个数码管)应该与设置数码管的值(数码管中led的状态更新)区分开,扫描周期我们可以放短一点,而改变它的值的周期我们可以一秒或者是2秒改变一次。
4.4 消除余晖,大家实验后,可能会发现,你显示的值有的时候并不是想要的,它会跳动或者是亮灭不清晰,这个我们就叫做余晖效应。
产生余晖效应的原因是因为你在选则下一个数码管的时候,还保留了上一个数码管的显示值,所以我们消除余晖,只需要在改变数码管显示值的时候,先关闭所有数码管的显示,在值跟新完成后我们再打开显示。这里你不用担心关闭和开启会有闪烁,更新值的时间会很短,肉眼时几乎察觉不到滴。
5,示列代码
/*
芯片:stc89c52
器件:38译码器等
编译环境:UV4,C语言
*/
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = {undefined
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};//数码管显示值真值表缓存数组
unsigned char LedBuff[6] = {undefined
0xff,0xff,0xff,0xff,0xff,0xff
};//数码管显示值缓存数组
void main()
{undefined
unsigned char i =0;
unsigned int cnt = 0;
unsigned long sec = 0;
ENLED = 0;
ADDR3 = 1;
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x67;
TR0 = 1;
while(1)
{undefined
if(TF0==1)
{undefined
TF0 = 0;
TH0 = 0xfc;
TL0 = 0x67;
cnt++;
if(cnt>=1000)
{undefined
cnt = 0;
sec++;
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
LedBuff[4] = LedChar[sec/10000%10];
LedBuff[5] = LedChar[sec/100000%10];
}
switch(i)
{undefined
case 0:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];ENLED = 0;break;
case 1:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];ENLED = 0;break;
case 2:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];ENLED = 0;break;
case 3:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];ENLED = 0;break;
case 4:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];ENLED = 0;break;
case 5:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];ENLED = 0;break;
default:break;
}
}
}
}
以上代码,仅供参考,您需要根据自己原理图的设计来实现。
7. 51单片机LED点阵屏有灯不亮怎么办
可进入调试模式,在执行22句后,检查595数据,看看其输出是不是 0xaa,在执行23句后,检查P0口数据,看看是不是 0x7f;
8. 单片机led动态显示 什么是输出位选码
单片机led动态显示,优点我就不说了,需要简单说下原理,就是几位LED顺序轮流显示自己的内容,任一时刻只有一位LED在亮,但由于轮流速度很快,视觉上看到的都在亮。LED有一个公共端,控制这个引脚,就可实现LED亮灭,动态显示时,我们把这个端叫位选端,一个位选端链接一根IO口线。为了控制这些位选端,连接位选端的IO口线同一时刻只能有一根有效,为达到这个目的,设置一组位选码,刷新显示时将对应位选码输出至IO端口,这就是是输出位选码。
9. 单片机驱动LED数码管有哪几种显示方法
就两种显示方式,一种是静态显示方式,适合于数码管位数较少的电路。
另一种是动态扫描显示方式,适合于多位数码管的电路。