ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:649.05KB ,
资源ID:4566501      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4566501.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二 数码管显示.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二 数码管显示.docx

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字了。想让它显示几,就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就

4、是给0-9十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。共阳极数码管其内部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、9,按下K3键,显示减1,按下K4键,*显示加1。*/#include#include #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(i50)&(K1=0) /检测按键是否松开 Delay10ms(); i+; i=0; if(K2=0) /检测按键K2是否按下 Delay10ms(); if(K2=0) j=9; while(i9) j=9; while(i9) j=0; while(i0;c-) for(b=38;b0;b-) for(a=130;a0;a-

11、);汇编程序: ORG 00H LJMP INIT ORG 30H DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH;*; 主程序 ;;*;INIT: CLR P2.2 CLR P2.3 CLR P2.4 MOV R1,#00HSTART: MOV A,R1 MOV DPTR,#30H MOVC A,A+DPTR MAIN: MOV P3,#0FFH MOV P0,A JNB P3.1,K1 JNB P3.0,K2 JNB P3.2,K3 JNB P3.3,K4 SJMP MAIN;*; K1按键按下处理程序 ;;*;K1: ACALL

12、DELAY10MS ;延时消抖 JB P3.1,MAIN MOV R1,00H MOV R2,#030HKEY1_UP: ACALL DELAY10MS DJNZ R2,KEY1_UP ;按键延时 LJMP START;*; K2按键按下处理程序 ;;*;K2: ACALL DELAY10MS JB P3.0,MAIN MOV R1,#09H MOV R2,#030HKEY2_UP: ACALL DELAY10MS DJNZ R2,KEY2_UP LJMP START;*; K3按键按下处理程序 ;;*;K3: ACALL DELAY10MS JB P3.2,MAIN DEC R1 MOV R

13、2,#030HKEY3_UP: ACALL DELAY10MS DJNZ R2,KEY3_UP CJNE R1,#0FFH,KEY3 MOV R1,#09HKEY3: LJMP START;*; K4按键按下处理程序 ;;*;K4: ACALL DELAY10MS JB P3.3,MAIN INC R1 MOV R2,#030HKEY4_UP: ACALL DELAY10MS DJNZ R2,KEY4_UP CJNE R1,#00AH,KEY4 MOV R1,#00HKEY4: LJMP START;*; 延时程序 ;;*;DELAY10MS: MOV R6,#015HDE1: MOV R7,

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

15、显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4* 实验效果 : 数码管显示76543210。* 注 意 :*/#include#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、b、C、d、E、F的显示码unsigned char Dis

16、playData8;/用来存放要显示的8位数的值void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) unsigned char i; for(i=0;i8;i+) DisplayDatai=DIG_CODEi; while(1) DigDisplay(); /* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay() unsigned char i; unsigned int j;

17、for(i=0;i8;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位 case(6): LSA=0;

18、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、C、d、E、F

19、的显示码编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思。需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间中,编译后编码占用的是程序存储空间,而非内存空间。汇编程序: ORG 00H LJMP INIT ORG 30H DB 03FH,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,F DAT0 EQU 30H;要显示的

20、八位数 DAT1 EQU 31H DAT2 EQU 32H DAT3 EQU 33H DAT4 EQU 34H DAT5 EQU 35H DAT6 EQU 36H DAT7 EQU 37H LSA EQU P2.2 LSB EQU P2.3 LSC EQU P2.4 GPIO_DIG EQU P0;*; 主程序 ;;*;INIT: MOV DAT0,#03FH MOV DAT1,#006H MOV DAT2,#05BH MOV DAT3,#04FH MOV DAT4,#066H MOV DAT5,#06DH MOV DAT6,#07DH MOV DAT7,#007HMAIN: CLR LSA

21、; 显示第一位 CLR LSB CLR LSC MOV GPIO_DIG,DAT0 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#000H ;消隐 SETB LSA ; 显示第二位 CLR LSB CLR LSC MOV GPIO_DIG,DAT1 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#000H CLR LSA ;显示第三位 SETB LSB CLR LSC MOV GPIO_DIG,DAT2 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H SETB LSA ;显示第四位 SETB LSB CLR LSC MOV

22、GPIO_DIG,DAT3 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H CLR LSA ;显示第五位 CLR LSB SETB LSC MOV GPIO_DIG,DAT4 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H SETB LSA ;显示第六位 CLR LSB SETB LSC MOV GPIO_DIG,DAT5 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H CLR LSA ;显示第七位 SETB LSB SETB LSC MOV GPIO_DIG,DAT6 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H SETB LSA ;显示第七位 SETB LSB SETB LSC MOV GPIO_DIG,DAT7 ACALL DELAY ;显示持续时间 MOV GPIO_DIG,#00H LJMP MAIN ;*; 延时程序 ;;*;DELAY: MOV R7,#0FFH DJNZ R7,$ RET END

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1