实验二 数码管显示_第1页
实验二 数码管显示_第2页
实验二 数码管显示_第3页
实验二 数码管显示_第4页
实验二 数码管显示_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 数码管显示本实验的目的是掌握数码管的工作原理与使用,实现数码管的静、动态显示。静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,中间图为共

2、阴极内部原理图,右图为共阳极内部原理图。上图展出了常用的两种数码管的引脚排列和内部结构。总所周知,点亮发光二极管就是要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。如上图左(一共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字了。想让它显示几,就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给0-9十个数字

4、编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光管二极管就需要给阴极送低电平,此时显示数字的编码与共阳极编码是相反的关系,数码管内部发光二极管点亮时,也需要5mA以上的电流,而且电流不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,本实验板上使用的是74HC573锁存器,其输出电流较大,电路接口简单,可借鉴使用。一般共阳极数码管更为常用,为什么呢?这是因为数码管的

5、非公共端往往接在IC 芯片的IO上,而IC 芯片的驱动能力往往是比较小的,如果采用共阴极数码管,它的驱动端在非公共端,就有可能受限于IC芯片输出电流不够而显示昏暗(比如51单片机),要外加上拉电阻或者是三极管加大驱动能力。所以使用共阳数码管的好处是:将驱动数码管的工作交到公共端(一般接驱动电源),加大驱动电源的功率自然要比加大IC芯片IO口的驱动电流简单许多。另一方面,这样也能减轻MCU的负担。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共

6、端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。一般单位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办法就是用数字万用表测量,若没有数字万用表也可用5V直流电源串接1k电阻后测量,将测量结果记录,通过统计便可绘制出引脚标号。知识点:如何用万用表检浏数码管的引脚排列对数字万用表来说,红色表笔连接表内部电池正极,黑色表笔连接表内部电池负极,当把数字万用表置于二极管档时,其两表笔间开路电压约为1.5V,把两表笔正确加在发光二极管两端时,可

7、以点亮发光二极管。如下图所示,将数字万用表置于二极管挡,红表笔接在脚,然后用黑表笔去接触其他各引脚,假设只有当接触到脚时,数码管的a段发光,而接触其余引脚时则不发光。由此可知,被测数码管为共阴极结构类型,脚是公共阴极,脚则是数码管的a段.接下来再检测各段引脚,仍使用数字万用表二极管档,将黑表笔固定接在脚,用红表笔依次接触、引脚时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排列图。检测中,若被测数码管为共阳极类型,则需将红、黑表笔对调才能测出上述结果,在判别结构类型时,操作时要灵活掌握,反复试验,直到找出公共端为止,大家只要懂得了原理,检测出各个引脚便不在是问题了。数码管静

8、态显示当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。从电路图可以看出,本开发板使用的是共阴极数码管,在每段数码管端加上一个限流电阻。C程序:/* 实验名 : 静态数码管实验* 使用的IO : 数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3* 实验效果 : 按下K1键,显示0,按下K2键,显示9,按下K3键,显

9、示减1,按下K4键,*显示加1。*/#include<reg51.h>#include<intrins.h>#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;sbit K1=P31;sbit K2=P30;sbit K3=P32;sbit K4=P33;unsigned char code DIG_CODE10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/显示09的值void Delay10ms(); /延时10ms /* 函 数 名 : main

10、* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned int i,j;LSA=0;LSB=0;LSC=0;while(1)if(K1=0)/检测按键K1是否按下Delay10ms();/消除抖动if(K1=0)j=0;while(i<50)&&(K1=0) /检测按键是否松开Delay10ms();i+;i=0;if(K2=0) /检测按键K2是否按下Delay10ms();if(K2=0)j=9;while(i<50)&&(K2=0)Delay10ms();i+;i=0;if(K3=0)/检

11、测按键K3是否按下Delay10ms();if(K3=0)j-;if(j>9)j=9;while(i<50)&&(K3=0)Delay10ms();i+;i=0;if(K4=0)/检测按键K4是否按下Delay10ms();if(K4=0)j+;if(j>9)j=0;while(i<50)&&(K4=0)Delay10ms();i+;i=0;GPIO_DIG=DIG_CODEj;/* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(void)

12、/误差 0us unsigned char a,b,c; for(c=1;c>0;c-) for(b=38;b>0;b-) for(a=130;a>0;a-);汇编程序:ORG 00HLJMP INITORG 30HDB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH;*; 主程序 ;;*;INIT:CLR P2.2CLR P2.3CLR P2.4MOV R1,#00HSTART:MOVA,R1MOV DPTR,#30HMOVC A,A+DPTRMAIN:MOVP3,#0FFH MOV P0,AJNBP3.1,K1JNB P3

13、.0,K2JNB P3.2,K3JNB P3.3,K4SJMP MAIN;*; K1按键按下处理程序 ;;*;K1:ACALL DELAY10MS ;延时消抖JB P3.1,MAINMOV R1,00HMOV R2,#030HKEY1_UP:ACALL DELAY10MSDJNZR2,KEY1_UP ;按键延时LJMPSTART;*; K2按键按下处理程序 ;;*;K2:ACALLDELAY10MSJBP3.0,MAINMOVR1,#09HMOV R2,#030HKEY2_UP:ACALL DELAY10MSDJNZR2,KEY2_UPLJMPSTART;*; K3按键按下处理程序 ;;*;K

14、3:ACALL DELAY10MSJB P3.2,MAINDEC R1MOV R2,#030HKEY3_UP:ACALL DELAY10MSDJNZR2,KEY3_UPCJNE R1,#0FFH,KEY3MOV R1,#09HKEY3:LJMPSTART;*; K4按键按下处理程序 ;;*;K4:ACALLDELAY10MSJBP3.3,MAININC R1MOV R2,#030HKEY4_UP:ACALL DELAY10MSDJNZR2,KEY4_UP CJNE R1,#00AH,KEY4MOV R1,#00HKEY4:LJMPSTART;*; 延时程序 ;;*;DELAY10MS:MOV

15、R6,#015HDE1:MOV R7,#0F8HDE2:DJNZ R7,DE2DJNZ R6,DE1RETEND动态数码管1. 动态扫描的原理在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。首先我们来看一下开发板上的电路原理图:本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有

16、输出。/* 实 验 名 : 动态显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4* 实验效果 : 数码管显示76543210。* 注 意 :*/#include<reg51.h>#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A

17、、b、C、d、E、F的显示码unsigned char DisplayData8;/用来存放要显示的8位数的值void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char i;for(i=0;i<8;i+)DisplayDatai=DIG_CODEi;while(1)DigDisplay();/* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsig

18、ned char i;unsigned int j;for(i=0;i<8;i+)switch(i) /位选,选择点亮的数码管,case(0):LSA=0;LSB=0;LSC=0; break;/显示第0位case(1):LSA=1;LSB=0;LSC=0; break;/显示第1位case(2):LSA=0;LSB=1;LSC=0; break;/显示第2位case(3):LSA=1;LSB=1;LSC=0; break;/显示第3位case(4):LSA=0;LSB=0;LSC=1; break;/显示第4位case(5):LSA=1;LSB=0;LSC=1; break;/显示第5

19、位case(6):LSA=0;LSB=1;LSC=1; break;/显示第6位case(7):LSA=1;LSB=1;LSC=1; break;/显示第7位GPIO_DIG=DisplayDatai;/发送段码j=10; /扫描间隔时间设定while(j-);GPIO_DIG=0x00;/消隐在用C语言编程时,编码定义方法如下:unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b

20、、C、d、E、F的显示码编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思。需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间中,编译后编码占用的是程序存储空间,而非内存空间。汇编程序:ORG 00HLJMPINITORG 30HDB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FDAT0 EQU 30H;要显示的八位数DAT1 EQU 31HDAT2 EQU 32HDAT3 EQU 33HDAT4 EQU 34HDAT5 EQU 35HDAT6 EQU 36HDAT7 EQU 37H LSA EQU P2.2LSB EQU P2.3LSC EQU P2.4GPIO_DIG EQUP0;*; 主程序 ;;*;INIT:MOV DAT0,#03FHMOVDAT1,#006HMOV DAT2,#05BHMOV DAT3,#04FHMOV DAT4,#066HMOV DAT5,#06DHMOV DAT6,#07DHMOV DAT7,#007HMAIN:CLR LS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论