数码管怎么使用

数码管怎么使用,第1张

数码管是嵌入式开发中比较常用的一个模块,本篇文章根据查阅的资料以及学习笔记整理成文,尽可能详尽的讲解常用数码管原理和使用方法。有不足和疏忽的地方,请不吝指正。

一、工作原理

数码管是一种半导体发光器件,其基本单元是发光二极管。能显示4位数字的叫四位数码管,当然也有多位和只有一位的数码管,他们的电气原理相同。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

二、电气特性

单位数码管有十个管脚,其中有8根是用来点亮a,b,c,d,e,f,dp 共8个发光二极管(原理中有介绍),3,8两个管脚为公共COM脚,它们相连通且作用相同,可接任意一根。为了更清楚介绍,贴图如下

共阴数码管脚位对应图

三、驱动方式

1、静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的'I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

2、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

四、开发实例

下面讲解一下四位数码管的动态驱动显示,首先看一下接线引脚图如下。

接下来用51单片机设计目标:通过编写c语言程序经编译连接后下载到单片机中,使四位数码管依次显示1,2,3,4

#define uchar usigned char

#define uint usigned int

//位选控制端口

sbit p20=P2^0

sbit p21=P2^1

sbit p22=P2^2

sbit p23=P2^3

//数码管段选编码数组,分别为显示:1,2,3,4的编码

uchar code BianMa[] ={0x7,0xb,0xd,0xe}

//延时1ms函数(用于数码管动态刷新)

void Delay1ms(int time)

void main()

{

while(1)

{

p20 =0//共阴极数码管低位选有效,表示已选中第一位数码管

P0 =BianMa[0]//通过I/O口P0向数码管送段选编码

Delay1ms(500)//第一位数码管显示0.5秒,然后换到第二位,依次下去,由于视觉停留和数码管余辉,所以感觉四位都在显示

p20 =1

p21 =0//第二位亮

P0 =BianMa[1]

Delay1ms(500)

p21 =1

p22 =0//第三位亮

P0 =BianMa[2]

Delay1ms(500)

p22 =1

p23 =0//第四位亮

P0 =BianMa[3]

Delay1ms(500)

p23 =1

}

//延时函数体

void Delay1ms(int time

{

int i,j

for(i =timei>0i--)

for(j =110j>0j--)

}

五、关于亮度和锁存器

一般来说静态驱动的亮度要高于动态驱动的亮度,但不影响使用。实际使用中为了达到更好的效果,会配合锁存器如74HC573一起使用,可以记忆先前状态数据直到有新数据覆盖。对做51单片机应用开发来说,相对LCD液晶,液晶模块编程更方便,样式更多样,但是其缺点亮度不够。这也恰恰是数码管的优势,如果做简单的计数显示,数码管是最好选择。

六、使用中注意事项

数码管的基本组成是发光二极管,因此其可以通过的电流只有几mA,接5V直流电源做测试的时候一定要串上一个几十K大小的电阻。否则,很容易烧掉,此外用万用表的测电阻档就可将其点亮,足以说明其电流之小。

大家都知道,在286以上的计算机中,一般都有一个CMOS RAM电路,它用于关机以后继续存放日期、时间、内存设置、软硬盘类型及其他许多有用的设置信息。CMOS即互补金属氧化物半导体,它的设置、应用和管理是保证系统正常工作的关键,下面就介绍一些有关CMOS的基本概念和应用。

ROM BIOS和CMOS RAM芯片

ROM BIOS是固化在ROM中的BIOS(Basic Input/Output System,简称基本输入/输出系统),他控制着系统全部硬件的运行,又为高层软件提供基层调用,BIOS芯片是插在主板上的一个长方形芯片。其比较著名的生产厂家有:American Megatrends INC.的AMI BIOS和Award Software INC.的AWARD BIOS。存放在ROM BIOS中的内容是不能被用户修改的,它主要用于存放:自诊断测试程序、系统自举装入程序、系统设置程序和主要I/O设备的I/O驱动程序及中断服务程序。自诊断测试程序:它通过读取系统主板上CMOS RAM中的内容来识别系统硬件的配置,并根据这些配置信息对系统中的各个部件进行自检和初始化。在POST(Power―On Self加电自检)过程中,如果CMOS RAM中的设置参数与系统实际配置的硬件不符,就会导致系统不能启动或不能正常工作。系统自举装入程序:该程序在系统自检正确后将 *** 作系统盘的引导记录读入内存,然后由引导程序安装 *** 作系统的核心程序。系统设置程序:在系统引导后,适时用热键(如Del)启动设置程序(SETUP),在这个设置程序中可对软硬件参数进行设置,然后由其存入CMOS RAM中。一般地,当系统第一次加电;系统增加、减少或更换硬件;CMOS RAM因掉电、病毒、放电等原因造成内容丢失;系统因需要而调整某些设置参数等原因时需要运行SETUP程序。常见的SETUP程序有AMI BIOS SETUP、AWARD BIOS SETUP、AMI WINBIOS SETUP、QUADTEL BIOS SETUP等。主要I/O设备的I/O驱动程序及中断服务程序:主要为计算机的低端输入/输出和各种中断提供服务。

CMOS RAM是一种互补金属氧化物半导体随即存储器,它主要具有功耗低(每位约10毫微瓦)、可随机读取或写入数据、断电后用外加电池来保持存储器的内容不丢失、工作速度比动态随机存储器(DRAM)高等特点。ROM BIOS对系统自检初始化后,将系统自检到的配置与CMOS RAM中的参数进行比较,在早期的PC中,用主板上的一组DIP开关(以不同组合来代表系统硬件资源的配置情况)来完成现在的CMOS RAM功能,在286以后则基本全都采用了CMOS RAM来保存系统设置的参数。CMOS RAM一般为64字节或128字节,用可充电的电池或外接电池(286机器用干电池较多,386以上的机器基本上都用充电电池了)对CMOS RAM芯片供电。

CMOS基本应用

CMOS数据的备份:由于CMOS的数据是否正确关系到系统是否能正常启动,所以对CMOS数据进行定期备份是非常重要的。备份的最简单方法是在SETUP程序中,用笔把各个参数记下来或者用屏幕硬拷贝(按Print Screen键)的方法把各个设置界面打印出来。这里介绍一种用程序把数据备份下来的方法(以AMI BIOS为例,这些方法对其他的CMOS也适用;用Turbo C 2.0,下同):

/*把CMOS中的数据读到A盘的CMOS.DAT文件中*/

#include "stdio.h"

main()

{ char cmos[64]FILE *fpint i

for (i=0i<64i++)

{ outportb(0x70,i)

cmos[i]=inportb(0x71)

}

fp=fopen("A:\CMOS.DAT","wb")

fwrite(&cmos[0],1,64,fp)

fclose(fp)

}

CMOS数据的恢复:文件CMOS.DAT的内容可以在GEBUG(或PCTOOLS等工具软件)中显示和编辑,也可将其再写回CMOS,这里给出自动写回数据的程序:

/*把A盘CMOS.DAT文件的数据写回CMOS中*/

#include "stdio.h"

main()

{ char cmos[64]FILE *fpint i

fp=fopen("A:\CMOS.DAT","rb")

fread(&cmos[0],1,64,fp)

for (i=0i<64i++)

{ outportb(0x70,i)

outportb(0x71,cmos[i])

}

fclose(fp)

}

破译或摧毁CMOS口令:由于各种原因,有时需要破译或者摧毁CMOS的口令,此时可以根据具体情况采取各种不同的方法。如果能启动系统,但由于忘记或不知CMOS口令而无法进入CMOS设置状态,此时可采用程序法来破译CMOS的口令(由于程序较长,这里省略,如那位朋友有兴趣请Mail to:zuiyue@263.net)。用程序摧毁CMOS密码的设置:

/*摧毁CMOS密码*/

#include <dos.h>

void far (*p)()=MK_FP(0xffff,0x0000)

main()

{ int i

for (i=0x34i<0x40i++) outp(0x70,i)

out(0x71,0)

(*p)()

}

用DEBUG向端口发送数据的O命令向端口70h和71h发送一个数据,也可以清除CMOS的设置,具体 *** 作如下:

C:\>DEBUG

―O 70 10

―O 71 01

―Q

另外,也可以把上述 *** 作用DEBUG写成一个程序放在一个文件(如DELCMOS.COM)中,具体 *** 作如下:

C:\>DEBUG

―A 100

XXXX:0100 MOV DX,70

XXXX:0103 MOV AL,10

XXXX:0105 OUT DX,AL

XXXX:0106 MOV DX,71

XXXX:0109 MOV AL,01

XXXX:010B OUT DX,AL

XXXX:010C

―R CX

CX 0000

: 0C

―N DELCMOS.COM

―W

Writing 000C bytes

―Q

以后,只要能用软盘启动系统,运行DELCMOS.COM就能取消CMOS的设置。CMOS放电。如果由于人为原因或由于机器故障使CMOS被破坏,而又不能用软盘启动系统,即系统引导顺序为“C:,A:”,或者Floppy Drive A:设置为Not Installed(或Disabled),系统不认A驱,这是便只有放电一途了。放电的方法有电池短接法、跳线短接法和芯片放电法。电池短接法:如果利用可拆卸电池供电,可以把电池拔下,用一根导线将电池插座两端短路,对电路中的电容放电,使CMOS RAM中的信息被清除;如果电池被焊死在主板上,就必须用电烙铁和吸锡器拔开电池的一个管脚来放电。需说明的是,电池短接法必须在短电的情况下进行,此法对一般用户是不可取的,因为拆卸和焊接电池时可能造成主板的损坏、短路、断路等问题,建议用下面的跳线短接法给CMOS放电。跳线短接法:在电池附近有一个跳线开关,跳线旁边注有RESET CMOS、CLEAN CMOS、CMOS CLOSE或CMOS RAM RESET等字样,跳线开关一般为四脚,有的在1、2两脚上有一个跳接器,此时将其拔下接到2、4脚上即可放电;有的所有脚上都没有跳接器,此时将2脚于充电电容短接即可放电。芯片短接法:开机后运行CMOS的SETUP命令全是由于机内一块芯片的作用,此芯片一般位于主板的左上方,很容易找到。找到后,用一段裸露的铜丝线,在管脚上快速划过,可多划几次,这样CMOS所设置的参数便以丢失,开机后重新设置各参数即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/9146369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-25
下一篇 2023-04-25

发表评论

登录后才能评论

评论列表(0条)

保存