导航:首页 > 操作系统 > led数码管单片机

led数码管单片机

发布时间:2022-07-20 21:08:26

A. 什么是单片机LED数码管共阳极和共阴极

LED数码管指的是七段数码管,有共阳极和共阴极之分;

(顺便说 数码管可不是因单片机而生,所以不是单片机的数码管,是互不相干的不同元器件)

共阳极就是把二极管的正极连接在一起,那么共阴极就是把二极管负极连接在一起;

共阳极数码管,要点亮LED就需要输入端信号为低电平,反之共阴极就需要输入高电平信号;

结果输出的七段码就有正反两种了;

B. LeD数码管在显示时公共端有那两种连接方式单片机分别输出什么电平可以使数码

LeD数码管在显示时公共端有共阳极和共阴极两种连接方式。单片机驱动led码段分别输出低电平,输出高电平可以使数码管段点亮。

C. 51单片机c语言版,编写程序:单片机控制八位LED数码管显示20220204间隔两秒后显示2022

摘要 显示程序和硬件关联,如驱动方式、位数等,所以没有统一的程序,假定动态显示,大概思路如下:

D. 单片机led数码管实验

单片机led数码管 秒表仿真实例,很简单的,可以参考一下,

#include<reg52.h> //秒表程序

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar ,shi;

uint a1,a2;

sbit D1=P3^0;

sbit D2=P3^1;

sbit D3=P3^2;

sbit D4=P3^3;

sbit key=P3^5;

sbit key1=P3^7;

bit j ;

uint y ;

void main()

{

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

TR0=1;

=0;

shi=0;

while(1)

{

if(key==0)

{

j=0;

}

if(key1==0)

{

j=1; a2=0;

}

}

}

void timer0()interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a1++;

y++;

if(a1==100)

{

a1=0;

if(j==1) a2++;

if(a2>=10000) a2=0;

}

D1 = 1; D2 = 1; D3 = 1; D4 = 1;

if(y==1)

{

P1=table[a2%10000/1000];

D4=0;

}

if(y==2)

{

P1=table[a2%1000/100];

D3=0;

}

if(y==3)

{

P1=table[a2%100/10];

D2=0;

}

if(y==4)

{

P1=table[a2%10];

D1=0;

y=0;

}

}

E. 单片机驱动LED数码管有哪几种显示方法

就两种显示方式,一种是静态显示方式,适合于数码管位数较少的电路。
另一种是动态扫描显示方式,适合于多位数码管的电路。

F. 单片机开关控制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;

}

}

}

}

以上代码,仅供参考,您需要根据自己原理图的设计来实现。

阅读全文

与led数码管单片机相关的资料

热点内容
Lightroom文件夹移动以后 浏览:964
web前端pdf 浏览:896
程序员养鸡创业 浏览:501
山西有什么app 浏览:408
app怎么样购买内存 浏览:32
如何注册sqlserver服务器 浏览:78
上士命令 浏览:490
股市中带星号的app是什么 浏览:711
什么路由可以刷机做打印机服务器 浏览:9
电脑怎么找到云服务器 浏览:873
微信怎么发应用app 浏览:776
花生壳dns服务器地址 浏览:650
squad服务器一般什么时候人多 浏览:481
程序员战门课 浏览:476
config保存服务器地址 浏览:319
预订网吧座位的app叫什么 浏览:418
香港服务器主机地址 浏览:642
网店美工pdf 浏览:449
一堆文件夹怎么弄出来 浏览:745
博途如何编译硬件 浏览:418