导航:首页 > 操作系统 > 单片机数码管显示数据编码

单片机数码管显示数据编码

发布时间:2022-09-04 09:46:07

‘壹’ 单片机开关控制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;

}

}

}

}

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

‘贰’ 单片机数码管显示

以四个数码管为例,每个数码管都有一个公共端,共阴或共阳,这个公共端就类似于开关了,四个数码管还共用8跟数据线,应该共12根线……开始后,让第一个开关打开,8位数据线输入第一个数码管要显示的数字的编码,保持几十毫秒的延时后,把开关关闭(这步挺重要的),然后打开第二个开关,输入第个数码管要显示的数字编码……一直到第四个,再到第一个,不停的循环……由于两个数码管点亮的时间间隔太小,人眼是分辩不出来的,叫人眼的视觉暂留现象。这种数码管显示方法叫动态扫描显示,可以节省数据借口,但耗费CPU……

这样理解,四个喝醉的人,站在一起,都不稳,你看到一个要倒了,赶快去扶一下,然后扶下一个,来回的扶四个人,你扶的够快的话,四个人是可以站在那儿的……

‘叁’ C语言单片机代码 数码管动态显示

这里的16个元素代表的是从十六进制数0~9、A、B、C、D、E、F的段码,根据什么来填这些数组元素?那就要看你设计程序时定义数组的作用才能确定.table[1]对应的元素为0x06,是十六进制数,转换成二进制数是00000110B,分别对应于数码管的Dp、g、f、e、d、c、b、a 脚,所以在共阴数码管上点亮b、c两段,显示的是数字1,其它同理。

‘肆’ 单片机数码管显示的数值编码

8位数据总线,16位地址总线的CPU;具有布尔处理能力和位处理能力;采用哈佛结构,程序存储器与数据存储器地址空间各自独立,便于程序设计;相同地址的64KB程序存储器和64KB数据存储器;

0-8KB片内程序存储器(8031无,8051有4KB,8052有8KB,89C55有20KB);128字节片内数据存储器(8051有256字节);

32根双向并可以按位寻址的I/O线;两个16位定时/计数器(8052有3个);一个全双工的串行I/O接口;多个中断源的中断结构,具有两个中断优先级;片内时钟振荡器。


(4)单片机数码管显示数据编码扩展阅读:

单片机工作的三个条件分别是电源、时钟晶振、复位。当单片机不能正常工作时,我们首先就要检查这三个条件,用电压表或者万用表检测他的电源和接地脚,检测两个引脚之间的电压是不是5V左右;对于时钟晶体振荡有没有正常工作。

最好用示波器进行检测,看能否检测到相应频率的正弦波脉冲;复位检测比较简单,单片机的复位电平一般是高电平复位,单片机在接通电源的时候一般复位引脚上会出现5V左右的高电平,另外在按下复位按键时,复位引脚上也会出现高电平,用一般的电压表或者万用表都可以进行检测。

‘伍’ 单片机数码管显示程序中code是什么意思

俺来帮你解答:
程序中uchar
code
table[]
是定义一个数组table[]
用来存放显示编码的数据。
为了不丢失
把该数组中的数据定义在程序存储器里。
code
是指数据存储的空间指定为程序存储器。
满意的话
请选择:满意回答
呵呵

‘陆’ 单片机数码管编码问题

该程序为时间显示,各个位逐位扫描显示
void display(void)
{
if(P1_3==1)
{
P2=0xfe; ;秒 个位 片选
P0=dispcode[miao%10]; ;秒 个位 输出
delay(1); ;延时
P2=0xfd; ;秒 十位 片选
P0=dispcode[miao/10]; ;秒 十位 输出
delay(1); ;延时
P2=0xff; ;片选全部无效,及所有数码管熄灭
P0=dispcode[10];
delay(1); ;延时
P2=0xf7; ;分钟 个位 片选
P0=dispcode[fen%10]; ;分钟 个位 输出
delay(1); ;延时
P2=0xef; ;分钟 十位 片选
P0=dispcode[fen/10]; ;分钟 十位 输出
delay(1); ;延时
P2=0xff; ;片选全部无效,及所有数码管熄灭
P0=dispcode[10];
delay(1); ;延时
P2=0xbf; ;小时 个位 片选
P0=dispcode[shi%10]; ;小时 个位 输出
delay(1); ;延时
P2=0x7f; ;小时 十位 片选
P0=dispcode[shi/10]; ;小时 十位 输出
delay(1); ;延时
}
}

‘柒’ 51单片机的共阴数码管怎么显示数字(c语言)

要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。

以显示数字“0”为例,c语言程序如下:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

//数码管的段码编码

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main(){//主函数

P0 = table[0];//显示0,大家可以修改里面的数据。

while(1);//程序不再执行其他步骤;

}

(7)单片机数码管显示数据编码扩展阅读:

数字0-9的对应段码:

数字0 0x3f

数字1 0x06

数字2 0x5b

数字3 0x4f

数字4 0x66

数字5 0x6d

数字6 0x7d

数字7 0x07

数字8 0x7f

数字9 0x6f

‘捌’ 51单片机控制数码管显示不正常问题,为什么后面4位数码管1234和5678都是显示乱码呢该怎么改

授人以鱼不如授之以渔。先建立程序的一般结构,然后定义一个code数组,里边存放数码管显示0~9的数据,之后定义一个display显示函数,传递参数但不返回参数,然后将传递的参数(1234或5678)分解成4哥单个数,然后依次选择要显示的数码管和数据,紧接消影和简单暂时,这样一个数码管显示就完成了,之后三个跟这个一样。最后在主函数里调用这个显示函数并传递参数。
希望我的回答能帮助到你。

‘玖’ 如何利用单片机让4位数码管显示

程序如下(用的是STC89C52芯片):

#include<reg52.h>//52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

uintx,y;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//共阴极数码管编码

voiddisplay(uchar,uchar,uchar,uchar);//声明子函数

voiddelay(int);//声明子函数

voidmain()

{

while(1)

{

display(1,2,3,4);//主程序始终调用数码管显示子程序

}

}

voiddisplay(uchara,ucharb,ucharc,uchard)

{

P2=0xef;

P0=table[a];//给第一个数码管送"a"

delay(1);//延时1ms

P2=0xdf;

P0=table[b];//给第二个数码管送"b"

delay(1);//延时1ms

P2=0xbf;

P0=table[c];//给第三个数码管送"c"

delay(1);//延时1ms

P2=0x7f;

P0=table[d];//给第三个数码管送"d"

delay(1);//延时1ms

}

voiddelay(uintz)//延时子函数

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

(9)单片机数码管显示数据编码扩展阅读

led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。

位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

‘拾’ 单片机数码管如何显示数字

从电路图来看,是需要数码管共阳极的,哪一位的三极管导通,则该位的数码管就有被点亮的机会。

那么七段码数据,低电平的位对应该笔画的LED亮。

大致代码:

P2=0xff;

P0=s_code[1]; //0xF9

P2=0xfe;// P2.0=0

delay_ms();

P2=0xff;

P0=s_code[2]; //0xA4

P2=0xfd;// P2.1=0

delay_ms();

P2=0xff;

P0=s_code[3]; //0xB0

P2=0xfb;// P2.2=0

delay_ms();

P2=0xff;

P0=s_code[4]; //0x99

P2=0xf7;// P2.3=0

delay_ms();

阅读全文

与单片机数码管显示数据编码相关的资料

热点内容
程序员对老师的感谢 浏览:27
什么app能查看银行卡照片 浏览:22
win7pdf虚拟打印 浏览:330
程序员喜欢的女生条件 浏览:123
阿里云服务器ip搭建教程 浏览:85
解压和拉伸这一动画的原理是什么 浏览:740
tbc战士的命令怒吼 浏览:481
idea快捷键看源码 浏览:976
手机碎屏解压工具 浏览:245
jsonrpcphp使用 浏览:566
网上求职系统源码 浏览:699
pdf数字不显示 浏览:890
convertwordtopdf 浏览:253
程序编译基本单位 浏览:23
python分析图片角度 浏览:64
阿里云服务器能复制数据吗 浏览:562
python拼音转换文字 浏览:563
动画遗传算法 浏览:63
php如何解析xml文件 浏览:702
如何改变appstore的语言 浏览:462