1、试验二数码管显示实验二数码管显不本实验的LI的是掌握数码管的工作原理与使用,实现数码管的静、动态 显示。静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。不管将儿位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内 部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管 内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8 字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管, 最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其 中笫3和第8引脚是连接在一起的。而它们的公共端乂可分
2、为共阳极和共阴极, 中间图为共阴极内部原理图,右图为共阳极内部原理图。ww W WWW上图展出了常用的两种数码管的引脚排列和内部结构。总所周知,点亮发光 二极管就是要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相 应的发光二极管正向压降。如上图左(一共a、b、c、d、e、f、g、DP八段), 如果要显示“1”则要点亮b、c两段LED;显示“A”则点亮a、b、c、e、f、g这 六段LED;我们还知道,既然LED加载的是正向压降,它的两端电压必然会有高 低之分:如果八段LED电压高的一端为公共端,我们称之为共阳极数码管(如上 图中);如果八段LED电压低的一段为公共端,则称之为共阴极数
3、码管(上图右)。 所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮 共阴极数码管,则要在非公共端给予较高电平。对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起, 所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。 当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮 了。如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳 极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp” 这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。想让它 显示儿,就给相对应的发光二极管
4、送高电平,因此我们在显示数字的时候首先做 的就是给0-9十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的 阳极就行了。共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接 时,公共端接高电平,因此我们要点壳的那个发光管二极管就需要给阴极送低电 平,此时显示数字的编码与共阳极编码是相反的关系,数码管内部发光二极管点 亮时,也需要5mA以上的电流,而且电流不可过大,否则会烧毁发光二极管。由 于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加驱动 电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,本实验板上使用的 是74HC573锁存器,其输出电流较大,
5、电路接口简单,可借鉴使用。一般共阳极数码管更为常用,为什么呢?这是因为数码管的非公共端往往接 在IC芯片的10上,而IC芯片的驱动能力往往是比较小的,如果采用共阴极数码 管,它的驱动端在非公共端,就有可能受限于IC芯片输出电流不够而显示昏暗(比 如51单片机),要外加上拉电阻或者是三极管加大驱动能力。所以使用共阳数码 管的好处是:将驱动数码管的工作交到公共端(一般接驱动电源),加大驱动电 源的功率自然要比加大IC芯片10口的驱动电流简单许多。另一方面,这样也能减 轻MCU的负担。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全 部是连接在一起的,独立的公共端可以控制多位一体中
6、的哪一位数码管点亮,而 连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫 做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片 机及外部驱动电路就可以控制任意的数码管显示任意的数字了。一般单位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12 个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办法就 是用数字万用表测量,若没有数字万用表也可用5V直流电源审接lk电阻后测量, 将测量结果记录,通过统计便可绘制出引脚标号。知识点:如何用万用表检浏数码管的引脚排列对数字万用表来说,红色表笔连接表内部电池正极,黑色表笔连接表内部电 池负
7、极,当把数字万用表置于二极管档时,其两表笔间开路电压约为1. 5V,把两 表笔正确加在发光二极管两端时,可以点亮发光二极管。如下图所示,将数字万用表置于二极管挡,红表笔接在脚,然后用黑表笔 去接触其他各引脚,假设只有当接触到脚时,数码管的&段发光,而接触其余 引脚时则不发光。山此可知,被测数码管为共阴极结构类型,脚是公共阴极, 脚则是数码管的a段接下来再检测各段引脚,仍使用数字万用表二极管档,将黑表笔固定接在脚,用红表笔依次接触、引脚 时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排 列图。检测中,若被测数码管为共阳极类型,则需将红、黑表笔对调才能测出上述 结果,在判别结
8、构类型时,操作时要灵活掌握,反复试验,直到找出公共端为止, 大家只要懂得了原理,检测出各个引脚便不在是问题了。数码管静态显示当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段 选”是连接在一起的,我们可以通过位选信号控制哪儿个数码管亮,而在同一时 刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连 接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字 必定一样,数码管的这种显示方法叫做静态显示。iim inr IFD6 im ihm urn irre uni(ND从电路图可以看出,本开发板使用的是共阴极数码管,在每段数码管端加上 一个限流电
9、阻。C程序:/*实验需*使用的io*实验效果 下K4键,*显示加lo静态数码管实验数码管使用P0,键盘使用P3.0、P3l、P3.2. P3.3按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按券丰卒半节乍彷彷芥丰卒卒丰不彷彷丰卒卒卒丰不卒k丰丰半半半不彷巧彷茶卒半卒丰卒不彷芥丰半半卒卒毕XX卒卒半半不彷芥丰丰半节丰不卒举券丰下半彷彷芥芥丰卒丰节不彷/#include#include define GPIO.DIG PO sbit LSA二P22;sbit LS氏P23;sbit LSC二P2F;sbit KI二P3X;sbit K2二P30;sbit K3二P32;sbit K
10、4=P3“3;unsigned char codeDIG_CODE1O二0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f;显示 0、9 的值void DelaylOms (); /延时 10msmain 主函数 无 无/*客*客函数名 *函数功能 *输 入 拳输 出*void main(void)unsigned int i, j;LSA=O;LSB二0;LSC二0;while (1)辻(K1=O) /检测按键K1是否按下DelaylOms (); /消除抖动if(Kl=O)j 二0;while(i50)&(Kl=0) /检测按
11、键是否松开DelaylOms0;i+;i 二0;辻(K2=0) /检测按键K2是否按下DelaylOms();辻(K2=0)j 二9;while(i9)j 二9;wh 订 e(i9) j 二0;while(i0;c) for(b=38;b0;b)for(a=130;a0;a);汇编程序:ORG OOHUMP INITORG 30HDB 03FH,006H,05BH,04FH66H,06DHQ7DH,007HQ7FH,06FH*車*球*車* / /INIT:CLRP2.2CLRP2.3CLRP2.4MOV R1,#OOHSTART:MOV A,R1MOV DPTR,#3OHMOVC A,A+DP
12、TRMAIN:MOV P3,#OFFHMOV POZAJNB P3.1.K1JNB P3.0,K2JNB P32K3JNB P3.3,K4SJMP MAIN.*車車* 京*4ti)t* . / /;KI按键按下处理程序:.*球*京京*./ /KI:ACALLDELAY1OMS;延时消抖JBP31MAINMOVR1,OOHMOVR2Z#O3OHKEY1_UP:ACALLDELAY1OMSDJNZR2,KEY1_UP;按键延时UMPSTART.京 * 案*4(*#才才* .;K2按键按下处理程序:/ 9K2:ACALL DELAY1OMSJB P3QMAINMOV Rl,#09HMOV R2Z#O
13、3OHKEY2_UP:ACALL DELAY1OMSDJNZ R2,KEY2_UPUMP START*璟*/ /;K3按键按下处理程序:.*車*未璟*未未未*.K3:ACALLDELAY1OMSJBP32MAINDECR1MOVR2Z#O3OHKEY3_UP:ACALLDELAY1OMSDJNZR2,KEY3_UPCJNER1,#OFFH,KEY3MOVRlz#09HKEY3:UMPSTART.*未璟*未未未*.;K4按键按下处理程序:.*車#*#/*.K4:ACALLDELAY1OMSJBP3.3,MAININC R1MOVR2/#O3OHKEY4_UP:ACALLDELAY1OMSDJNZ
14、R2,KEY4_UPCJNERlz#00AH,KEY4MOVR1Z#OOHKEY4:UMPSTART.京*.;延时程序.*孚*.DELAY10MS:MOVR6Z#O15HDEI:MOVR7,#OF8HDE2:DJNZR7ZDE2DJNZR6,DE1RETEND动态数码管1.动态扫描的原理在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的 多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候,怎么 让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示,利用人 的视觉暂停作用使人看到多个数码管同时显示的效果。首先我们来看一下开发板上的电路原理图:译玛数码管本开发板上使用的
15、是,通过P22、P23、P24控制3-8译码器来对数码管进行位 选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为 低电平时373才会有输出。 I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I *实验名 :动态显示数码管实验*使用的10 :数码管使用P0, P2. 2, P2. 3, P2. 4*实验效果:数码管显示76543210c 4 4 | 1 | | |
16、 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 4 | 1 | | | 4 4 #includereg31 httdefine GPIO DIG P0sbit LSA二P22;sbit LSB二P23;sbit LSC二P24;unsigned char code DIG_C0DE17=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, Ox
17、oe, 0x79, 0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData8;用来存放要显示的8位数的值void DigDisplay () ; /动态显示函数1 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I 1 1 I 1 I 1 I I 1 1 I 1 1 *函数名:main*函数功能:主函数*输
18、 入:无*输 出:无 I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I f | | 4 | 1 | | 4 | | 4 | 1 4 void main(void)unsigned char i:for(i=0;i8;i+)DisplayDatai=DIG_CODEi;while (1)DigDisplay (); I I I I I I I I I I I I I I I *函数名*函数功能*输 入*输 出:DigDisplay:使用数码管显示:无:无 * * * * I | a j j j * * a | a j j a void DigDis