版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目三 数码管显示电路 项目三 数码管显示电路 3.1 项目说明项目说明 3.2 基础知识基础知识 3.3 项目实施项目实施 3.4 项目评价项目评价 3.5 拓展与提高拓展与提高 项目三 数码管显示电路 3.1 项项 目目 说说 明明 项目任务数码管显示器在单片机控制系统中有着广泛的应用,是人机交互的重要器件。本项目的任务是在掌握数码管结构的基础上,为单片机控制系统设计出八位数码显示电路,并编程在数码管上显示“12345678”或“12-00-00”。 知识培养目标(1) 掌握数码管的结构。(2) 掌握静态显示的原理、结构及编程。项目三 数码管显示电路 (3) 掌握动态显示的原理、结构及编程
2、。(4) 掌握驱动电路的设计。 能力培养目标(1) 能利用所学知识正确地理解数码管显示原理。(2) 能利用所学知识编写数码管显示的应用程序。(3) 能利用所学知识解决实际工程问题。(4) 培养团结协作能力。项目三 数码管显示电路 3.2 基基 础础 知知 识识3.2.1 if语句语句1. if语句的基本形式语句的基本形式if语句用于构成分支结构,它通过判断表达式来决定执行哪个分支程序。C51中if语句有以下几种基本形式。项目三 数码管显示电路 1) 单分支if语句单分支if语句的一般形式为if(表达式) 语句; 功能:如果表达式的值为真,则执行其后的语句;否则不执行该语句,单分支if的流程图如
3、图3-1所示。项目三 数码管显示电路 图3-1 单分支if流程图 项目三 数码管显示电路 2) 双分支if语句双分支if语句的一般形式为if(表达式) 语句A; else 语句B;功能:如果表达式的值为真,则执行语句A;如果表达式的值为假,执行语句B。双分支if流程图如图3-2所示。项目三 数码管显示电路 图3-2 双分支if流程图 项目三 数码管显示电路 例1 有两个无符号整数a、b,若当ab时,x=a;若当ab)x=a; else x=b;项目三 数码管显示电路 3) 多分支if-else-if语句多分支if-else-if语句的一般形式为if(表达式1)语句1;else if(表达式2)
4、语句2;else if(表达式3)语句3;else if(表达式n)语句n;else 语句n+1;项目三 数码管显示电路 功能:依次判断表达式的值,当某个表达式的值为真时,执行与其对应的语句,然后跳转到整个if语句之外继续执行程序;如果所有的表达式均为假,则执行语句n+1,然后继续执行后续程序。多分支if-else-if语句的执行过程如图3-3所示。项目三 数码管显示电路 图3-3 多分支if-else-if流程图 项目三 数码管显示电路 1 (x0)例2 编程实现三分支函数y= 0 (x=0) 。 -1(x0)y=1;else if(x=0)y=0;elsey=-1;项目三 数码管显示电路
5、2. 使用使用if语句的注意事项语句的注意事项(1) 在3种形式的if语句中,关键字“if”之后括号中的表达式,可以是逻辑表达式或关系表达式,也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量。例如: if(a=5)、if(b),都是允许的。只要表达式的值为非0,即为“真”。如当a=5时,if(a=5)中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。项目三 数码管显示电路 (2) 在if语句中,表达式必须用括号括起来,分支语句之后必须加分号。(3) 在if语句的3种形式中,所有的语句为单条语句时,可省略大括号;如果表达式的值为真时
6、,执行的是一组(多个)语句,则必须把这一组语句用“”括起来组成一个复合语句。但要注意的是在“”之后不能再加分号。例如:项目三 数码管显示电路 if(ab) a+;b+;else a=0;b=10;项目三 数码管显示电路 (4) if语句的嵌套。当if语句中的执行语句又是if语句时,则构成了if 语句的嵌套。其一般形式为if( )if( ) 语句1; else 语句2;elseif( ) 语句3;else 语句4;嵌套内的if语句也可能是if-else型的,这将会出现多个if和多个else的情况,这时要特别注意if和else的配对问题。例如:项目三 数码管显示电路 if(表达式1)if(表达式2
7、)语句1;else语句2;其中的else究竟是与哪一个if配对呢?为了避免这种二义性,C51规定,else总是与它前面最近的且未配对的if配对,且if、else后面强制加“”。为了便于阅读程序,尽可能少用if语句的嵌套结构。项目三 数码管显示电路 3.2.2 数码管结构数码管结构常用七段半导体数码管的外形如图3-4所示。不管将几位数码管集成在一起,数码管的显示原理都是一样的,都是依靠点亮内部的发光二极管,且用亮的发光二极管组合成数字或字母。下面以一个数码管为例介绍数码管的显示原理。 项目三 数码管显示电路 图3-4 常用七段半导体数码管外形图 项目三 数码管显示电路 数码管内部结构如图3-5所
8、示,从图3-5(a)所示数码管的引脚图可看出,一位数码管共有10个引脚,7个笔段ag,加上一个小数dp,所以一个数码管实际上是由排列成“8”字的8个小发光二极管组成,剩余的两个引脚连在一起称为公共端com,生产商为了统一封装,单个数码管都封装为10个引脚。根据公共端所接电极的不同将数码管分为共阴型和共阳型两类,它们的内部连接方式如图3-5(b)、(c)所示。看到这里,大家是否觉得项目二也是控制8个发光二极管,还要学吗?请大家注意,本项目讲的数码管中8个发光二极管的位置是排列好且固定不变的,因此由单片机驱动时也带来了一些新的问题,一起学习吧!项目三 数码管显示电路 图3-5 数码管结构图 项目三
9、 数码管显示电路 共阴型数码管是将内部8个发光二极管的阴极连接在一起作为公共端com,这也是“共阴”名字的由来,8个阳极是独立的,即引脚adp;共阳型数码管则是将8个阳极连接在一起作为公共端com,8个阴极是独立的,即引脚adp。 根据数码管内部的连接方式,可以理解为,无论是共阴型还是共阳型数码管在显示时,只要com所接的电平不能使内部的LED正偏,不管adp是何种状态,一定不能点亮LED,数码管就不能显示,在多位显示时可用com端控制哪位数码管显示,哪位不显示,因此将公共端com称为字位口;当com加上所需的电平,数码管可以显示时,才能由项目三 数码管显示电路 adp端的状态决定显示什么样的
10、数字,因此将引脚adp称为字段口。数码管显示的条件:字位口com与字段口adp所加电平使发光二极管正偏点亮。因此点亮共阴型数码管的a笔段时,需com=0、a=1;显示“0”时,需点亮abcdef,g熄灭,因此需字位口com=0、字段口dpgfedcba=00111111。共阳型与共阴型数码管显示相同数字时所需电平恰好相反。 项目三 数码管显示电路 在单片机控制系统中,数码管的字位口与字段口所需的信号一般由单片机发送,将发送至字位口用以控制数码管能否显示的代码称之为位码,位码的位数与数码管的位数相同,位码与硬件电路有着直接的关系,将字位口接固定电平时,就不需要位码了。发送至字段口控制数码管显示什
11、么数字的代码称之为段码,也称为七段码,段码的位数是固定的8位,段码虽然也与硬件电路有关,但与位码不同的是,只要用到数码管,就一定要发送段码,且段码只有共阴型与共阳型两种。常用十六进制数码0F的段码如表3-1所示。项目三 数码管显示电路 表表3-1 数码管段码表数码管段码表 项目三 数码管显示电路 表3-1中所示段码是根据dpgfedcba的约定次序列出的,也就是表示在将段码转换为8位二进制数时,最高位控制小数点dp、最低位控制a;假如用单片机的P2口作字段口时,只有将dpa与P2.7P2.0对应连接,发送至P2口的段码才能使数码管显示相应的数字。例如,显示“0”时,如果是共阴型数码管,就发送段
12、码“3F”至P2口,由于3FH=00111111B,而P2口与dpa相连,所以dpa=00111111B,除dp、g外,其余笔段都亮,显示“0”;如果电路连接时不小心将adp与P2.7P2.0对应连接,那么发送“3F”后,dpa=11111100,显示的是“b”,而不是“0”,只有根据“adp”的次序写出所需的段码后,才能显示出“0”。项目三 数码管显示电路 单片机编程时,一般也要建立如表3-1所示的段码表,需要哪个段码,通过查段码表即可获得。用C51编程时,段码表定义方式为unsigned char code seg7 = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x9
13、2,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e ; 项目三 数码管显示电路 段码表实际就是定义了一个无符号字符型数组,共有16个元素,即0F的共阳型段码;seg7数组名,可以任意取,但要见名知义且不能与关键字重名。段码表的特别之处在于:一是关键字“code”定义了数组的存储器类型,编译时code类型的数组存放于程序存储器,使用时只能读出不能写入;二是在定义的同时必须对数组初始化;三是初始化时各段码必须按升序排列,且从0开始,便于查表。如上述段码表seg7的定义中,“0”的段码0 xc0是第一个元素,序号为0;“1”的段
14、码0 xf9是第二个元素,序号是1;。定义段码表之后,通过引用数组元素来发送段码,如P2=seg70就是发送“0”的段码至P2口,显示“0”。项目三 数码管显示电路 3.2.3 数码管显示方式数码管显示方式数码管显示主要有静态显示与动态显示两种方式。1. 数码管静态显示数码管静态显示1) 静态显示原理静态显示是将n位数码管的字位口连接在一起,接数码管显示所需的固定电平,共阴型接地、共阳型接5 V;n个数码管的字段口与n个8位的并行口相连。这种工作方式是数码管只受各自字段口的控制,发送段码后,数码管内部的二极管就恒定导通。图3-6所示为静态显示的原理图,图(a)为共阳型,(b)为共阴型。考虑到单
15、片机的带拉电流负载能力较小,共阴型数码管的字段口与单片机的I/O口之间必须加入驱动电路。项目三 数码管显示电路 图3-6 静态显示原理图项目三 数码管显示电路 在图3-6所示静态显示方式中,只要由相应的并行口为每一位数码管发送段码,那么所有数码管就可以同时显示,数码管之间互不影响。静态显示亮度较高,显示稳定,编程方便,但占用的资源过多。如在图3-6(a)中,4个并行口可接4个数码管,若要显示出“1234”,则只需4条语句“P0=seg71; P1=seg72; P2=seg73; P3=seg74;”就可以实现。编程虽然简单得多,但是4个8位并行口全分配给数码管,其他设备如按键、发光二极管等再
16、无端口可用,因此静态显示方式一般只适用于数码管较少,或控制要求简单的场合。项目三 数码管显示电路 2) 静态显示应用举例例3 编程使数码管显示一位十进制数,每过1 s数值增加1,变化范围为09。解:(1) 硬件设计。设计显示电路时,首先要确定数码管的位数,题意要求显示一位十进制数,只需要1个数码管;其次要确定显示方式,一个数码管当然要采用易编程的静态显示;最后要确定数码管的类型,因为共阳型数码管与单片机相连时为灌电流负载,适当限制发光二极管的工作电流,可省略驱动器件,因此采用共阳型数码管。项目三 数码管显示电路 用单片机的P2口作为共阳型数码管字段口时,必须将adp与P2.0P2.7相连,才能
17、够使用表3-1中的共阳型段码;字位口接5 V。数码管与单片机的最小系统相连后如图3-7所示,图3-7中的电阻为发光二极管的限流电阻,与项目一中计算方法相同。项目三 数码管显示电路 图3-7 静态显示应用电路 项目三 数码管显示电路 (2) 软件设计。静态显示时,数码管只受到字段口的控制,只要每隔1 s更新P2口的段码,就可以实现题目要求。定义变量i、初值为0,由i+修改i的值,再通过语句“P2=seg7i;”发送变量i的段码至P2口,调用延时函数delay(uint del)实现1 s延时,循环10次后,数码管上就会递增显示09,由for语句实现;当09显示一遍后,从0重新开始,实现无数遍显示
18、,由while语句构成。图3-8为静态显示应用主函数流程图。 项目三 数码管显示电路 图3-8 静态显示应用流程图(while+for) 项目三 数码管显示电路 (3) 源程序(while+for)。#include #define uchar unsigned char#define uint unsigned int/*定义必要的全局变量*/uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/定义共阳型段码表,从09/*延时函数*/void delay(uint del)uint i,j
19、; /延时时间约del10 msfor(i=0; i del; i+)for(j=0; j1827; j+);项目三 数码管显示电路 /* 主函数*/main( )uchar i;while (1)/无数遍显示09for(i=0;i9。静态显示应用流程图如图3-9所示。项目三 数码管显示电路 图3-9 静态显示应用流程图(while+if)项目三 数码管显示电路 源程序(while+if)#include #define uchar unsigned char#define uint unsigned int/*定义必要的全局变量*/uchar code seg7 =0 xc0,0 xf9,0
20、 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/定义共阳型段码表,从09项目三 数码管显示电路 /*延时函数*/void delay(uint del) uint i,j; /延时时间约del10 msfor(i=0; i del; i+)for(j=0; j1827; j+);项目三 数码管显示电路 /* 主函数*/main()uchar i=0;while (1)/无数遍显示09P2=seg7i;/发送变量i的段码至P2口,显示i delay(100);/i显示1s i+;/i自增1,准备显示下一个数字if(i=10)/当i超过9时,i重赋初
21、值0,从0重新开始显示i=0; 项目三 数码管显示电路 2. 数码管动态显示数码管动态显示所谓动态显示,就是通过扫描使显示电路包含的n个数码管轮流逐个显示。动态显示的本质是数码管一位一位地显示,但是由于每个数码管只能显示1 ms5 ms,轮流的速度过快,人眼无法分辨,所以人们眼睛看到的效果是电路中n个数码管“同时”显示,这就是动态显示的特点,我们看到的是假象。在项目二中,为了使眼睛清晰地观察到LED的闪烁效果,要求每个LED最少点亮100 ms,而动态显示则要求每个数码管显示的时间尽可能短,利用发光二极管的余辉和人眼视觉暂留作用,让人感觉不到闪烁,这之间的区别就是点亮时间的不同。项目三 数码管
22、显示电路 动态显示电路中所有数码管的字段口是并联在一起的,发送至字段口的段码同时被所有数码管接收,但不是都能显示出来,还要取决于各数码管字位口的状态,当共阴型数码管字位口为低电平、共阳型数码管为高电平时,该位数码管才可以显示,而且一定要保证任何时刻只能点亮一个数码管,即只有一个数码管的字位口处于有效状态。项目三 数码管显示电路 8位动态显示原理图如图3-10所示,图中数码管为共阳型,每个数码管的字位口通过三极管构成的电子开关与5 V相连。当I/O口=0时,电子开关闭合,数码管可以显示;当I/O口=1时,开关断开,数码管不能显示。8个电子开关由单片机的一个8位并行口进行控制,由该并行口发送的位码
23、任何时刻只能点亮一个数码管,选定待显示的数码管后,由另一个8位并行口向字段口发送共阳型段码后,选定的数码管上才能显示出相应的数字,每个数码管只能显示1 ms5 ms。利用图3-10所示电路显示“12345678”时,扫描过程如下:项目三 数码管显示电路 (1) DS7显示1。发送第1个位码01111111B至P1口(图3-10所示电路中,0使电子开关闭合,1使电子开关断开),数码管DS7的电子开关闭合可以显示,DS6DS0的电子开关断开不能被显示;然后再发送“1”的共阳型段码F9H至P0口,DS7上显示“1”;显示1 ms。(2) DS6显示2。发送第2个位码10111111B, DS6的电子
24、开关闭合,其他断开,只有DS6显示;然后发送“2”的共阳型段码A4H,DS6上显示“2”;显示1 ms。(3) DS5显示3。发送第3个位码11011111B,只点亮DS5;然后发送“3”的共阳型段码B0H,DS5上显示“3”;显示1 ms。项目三 数码管显示电路 (8) DS0显示8。发送第8个位码11111110B,只点亮DS0;然后发送“8”的共阳型段码80H,DS0上显示“8”;显示1 ms。一遍扫描完后,从(1)开始重复执行。顺序结构动态显示流程图如图3-11所示。由于51单片机的并行I/O口为8位,因此动态显示电路中数码管的位数最多为8位。如果电路中数码管的位数减少为4时,动态扫描
25、一遍就只需要4次。项目三 数码管显示电路 图3-10 动态显示原理图 项目三 数码管显示电路 上述过程虽然较静态显示麻烦很多,但是点亮每个数码管的操作是相同的,即发送位码、发送段码、显示1 ms。动态显示占用资源少,特别适用于多位数码显示,在实际中应用广泛。但是在采用动态显示时CPU要一遍一遍地对n个数码管进行扫描,只有这样眼睛看到的假象才能持续下去,导致CPU的利用率低,当控制要求复杂时,编程的难度也会有所提高。项目三 数码管显示电路 图3-11 顺序结构动态显示流程图 项目三 数码管显示电路 3.3 项项 目目 实实 施施3.3.1 硬件设计方案硬件设计方案本项目要求在8个数码管上显示8位
26、数,因此需8个共阳型数码管。图3-12所示为原理图,由单片机最小系统和显示电路两部分组成,对于单片机的初学者来说,这个电路有点太复杂了。当电路较复杂时,采用标号(图中器件引脚末端的字母组合)可使原理图看上去简洁整齐。图中标号相同的节点,在实际电路中是相连的,因此看似半成品的电路图实际上是完整的。 项目三 数码管显示电路 显示电路采用动态显示方式,P2口用做字位口,P2.7P2.0分别控制数码管DS7DS0所对应的电子开关,电子开关由PNP型三极管开关电路构成。当I/O=0时,三极管饱和导通,相当于开关闭合,字位口com与5 V接通,数码管可以显示;当I/O=1时,三极管截止,相当于开关断开,字
27、位口com与5 V断开,数码管不能显示。P0口用做字段口,用以发送共阳型段码,由于在显示“8. ”时,数码管内8个发光二极管全点亮,灌入P0口的总电流超过了P0口的驱动能力,因此在P0口上接入74HC573,74HC573每个输出管脚的电流负载能力可达到+/-35 mA,但输入引脚需要的输入电流却很小,可极大地提高P0口的驱动能力,满足数码管的任何显示要求。项目三 数码管显示电路 图3-12中还有两个重要电阻的选取。一是限流电阻的选取,主要考虑笔段亮度的要求,若要求亮度较高,则电流较大。在这里每个笔段的电流取10 mA,当电子开关闭合时,其上压降为0.3 V,每个笔段(发光二极管)的管压降为2
28、.0 V,74HC573输出的低电平为0 V,故限流电阻R=(5-0.3-2.0)V/10 mA=270 。二是基极电阻的选取,与三极管的集电极电流有关系。在该电路中,不同的显示值流过集电极的电流不同,当显示“8.”时,数码管中的8个发光二极管都点亮,集电极电流IC达到最大;当显示“1”时,只点亮b、c两个笔段,IC最小。为了在显示任一值时都能使三极管构成的电子开关可靠地闭合,IC应按最大值来取。设三极管的为100,则根据三极管饱和导通的条件ICIB,而IB=(5-0.7-0.3)V/RB,故有RB4 V/0.8 mA=5 k,RB可取4.7 k。项目三 数码管显示电路 图3-12 8位数码管
29、动态显示应用电路 项目三 数码管显示电路 3.3.2 软件设计方案软件设计方案动态显示时点亮一个数码管需要3步操作:发送位码、发送段码、显示1 ms。1. 位码及其发送位码及其发送首先要根据硬件电路分析出每个数码管的位码。图3-12中8位数码管的位码恰好组成一个字节,易采用字节寻址发送位码,发送一组8位二进制数至P2口,可以同时控制8个数码管,但只有一个数码管处于选中状态。根据电子开关的工作原理,可知每位数码管的位码如表3-2所示。项目三 数码管显示电路 表表3-2 8位数码管动态显示位码表位数码管动态显示位码表 项目三 数码管显示电路 位码的发送较灵活,顺序结构编程时,可以根据动态扫描的方向
30、,依次将8个位码送至P2口。循环结构编程时,适用范围较广的一种方法是定义位码表,位码表中位码的排列次序一般与扫描次序一致,如果从DS7DS0扫描,位码就按7FFE的次序存放,定义位码表时也需要加入关键字“code”,使位码表存于程序存储器ROM中;如果各位码之间存在特殊规律时,可以不定义位码表,依据存在的规律修改位码。由表3-2可知,将前一个位码右移一位就得到下一个新的位码,利用头文件intrins.h中的循环移位函数,就可以实现位码的更新,扫描时先发送位码控制字的初值01111111B,点亮DS7;利用_cror_( )对位码控制字循环右移1位,控制字修改为10111111B,点亮DS6;也
31、实现了对8个数码管字位口的控制。相比来说定义位码表的方式更直观。项目三 数码管显示电路 2. 段码的发送段码的发送在数码管上显示数码“1”时,可以直接用语句“P0=seg1”发送“1”的段码至P0口;显示“2”时,语句为“P0=seg2”,。这种方法虽然直观,但不利于功能扩展,一般只适用于顺序结构。循环结构中通过语句“P0=segi”发送i 的段码,显示i。通过自增、自减运算修改i后,可以使数码管上显示出按递增或递减规律变化的数值,但是要显示“96450352”这种没有任何规律的数据时,就无能为力了。 项目三 数码管显示电路 循环结构中通用的一种方法是定义显示数组,该数组用于存放将要显示在数码
32、管上的数码,且显示数组的长度与数码管的位数相同。例如显示18时,显示数组的各元素应为1,2,3,4,5,6,7,8;反之如显示数组中的元素为9,6,4,5,0,3,5,2时,8个数码管上一定显示“96450352”。由此可见,显示数组中的元素与数码管上的显示值是一一对应的。与段码表、位码表不同的是,显示数组一般存于数据存储器中,以便写入新的数据,更新数码管显示的信息。项目三 数码管显示电路 定义显示数组disp=9,6,4,5,0,3,5,2后,可通过语句“P0=segdispi;”循环发送序号为i 的元素的段码至P0口,从而在数码管上显示元素dispi。改变显示数组的元素,就可以更新数码管上
33、的显示值。3. 顺序结构顺序结构采用顺序结构编写动态扫描程序时,可以直接将位码送至I/O口,因此只需定义段码表。1) 显示“12345678”主函数中顺序执行8次“发送位码、发送段码、显示1 ms”,从DS7DS0对8个数码管扫描一遍;然后再重新开始,扫描第二遍;直至无数遍。主函数流程图如图3-11所示。项目三 数码管显示电路 源程序#include #define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82
34、,0 xf8,0 x80,0 x90;/定义共阳型段码表,09项目三 数码管显示电路 /*延时函数*/void delay( ) uchar i;for(i=0;i130;i+) ;/延时时间约为1 ms/*主函数*/main( ) P2=0 x7f;/发送位码控制字,选中DS7 P0=seg71;/发送“1”的段码,数码管DS7上显示“1” delay( );/显示1 ms项目三 数码管显示电路 P2=0 xbf;/发送位码控制字,选中DS6 P0=seg72;/发送“2”的段码,数码管DS6上显示“2” delay( );/显示1 ms P2=0 xdf;/发送位码控制字,选中DS5 P0
35、=seg73;/发送“3”的段码,数码管DS5上显示“3” delay( );/显示1 ms P2=0 xef;/发送位码控制字,选中DS4 P0=seg74;/发送“4”的段码,数码管DS4上显示“4” delay( );/显示1 ms P2=0 xf7;/发送位码控制字,选中DS3 P0=seg75;/发送“5”的段码,数码管DS3上显示“5”项目三 数码管显示电路 delay( );/显示1 ms P2=0 xfb;/发送位码控制字,选中DS2 P0=seg76;/发送“6”的段码,数码管DS2上显示“6” delay( );/显示1 ms P2=0 xfd;/发送位码控制字,选中DS1
36、 P0=seg77;/发送“7”的段码,数码管DS1上显示“7” delay( );/显示1 ms P2=0 xfe;/发送位码控制字,选中DS0 P0=seg78;/发送“8”的段码,数码管DS0上显示“8” delay( );/显示1 ms 顺序结构的优点是简单、直观,缺点是源程序较长。项目三 数码管显示电路 2) 显示“12-00-00”显示“12-00-00”的关键是如何显示“-”,表3-1所示段码表中没有“-”的段码,只好自已写了。如果将“-”显示在数码管的中间,需要点亮笔段g,对于共阳型数码管,段码应为dpgfedcba=10111111B=BFH;类似地,全灭的段码就是FFH。然
37、后再将这些特殊的段码存放在段码表的最后位置,如果前面存放的是09的段码,那么“-”的段码在段码表中的序号就是10,语句“P0=seg710;”就可使数码管显示“-”。添加这些特殊段码后的段码表为uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf,0 xff;项目三 数码管显示电路 4. 循环结构循环结构1) 显示“12345678”(1) 利用循环移位函数修改位码。利用循环结构编写动态扫描程序时,内层用for语句对8个数码管扫描一遍,大约需8 ms;外层用while(1)实现无数
38、遍扫描,使数码管能够稳定显示。定义位码控制字weictrl并赋初值7FH,通过循环右移_cror_(weictrl,1)修改位码控制字,选中新的数码管。显示结果“12345678”具有递增的特点,而for语句扫描一遍数码管也需8次,循环控制变量i为07,如果将i加1后,即可得到18,因此只需发送i+1的段码就可以在选中数码管上显示出i+1。流程图如图3-13所示。项目三 数码管显示电路 图3-13 循环结构动态显示流程图(_cror_)项目三 数码管显示电路 源程序(循环移位)#include #include #define uchar unsigned char#define uint u
39、nsigned int/*必要的全局变量定义*/uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/定义共阳型段码表,09项目三 数码管显示电路 /*延时函数*/void delay( ) uchar i;for(i=0;i130;i+) ; /延时时间约为1 ms/*主函数*/main( ) uchar weictrl=0 x7f; /定义位码控制字,并赋初值0 x7f uchar i; while (1)/一遍一遍地扫描项目三 数码管显示电路 for(i=0;i8;i+)/8个数码管,一
40、遍扫描8次P2=weictrl;/发送位码控制字选中一个数码管 P0=seg7i+1;/发送i+1的段码,选中数码管上显示i+1delay( );/显示1 ms weictrl=_cror_( weictrl,1);/修改位码控制字 项目三 数码管显示电路 (2) 利用位码表发送位码。图3-14所示流程图,在动态扫描时通过位码表控制位码的发送,依次选中DS7DS0;定义显示数组存放18,发送显示数组中序号为i的元素的段码,在选定数码管上显示dispi。项目三 数码管显示电路 图3-14 循环结构动态显示流程图(位码表) 项目三 数码管显示电路 源程序(位码表)#include #define
41、uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; /定义共阳型段码表,09uchar code wei =0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;/定义位码表,从DS7DS0扫描uchar disp =1,2,3,4,5,6,7,8;/定义显示数组,存入待显示数据项目三 数码管显示电路 /*延时函数*/void delay
42、( ) uchar j;for(j=0;j130;j+) ; /延时时间约为1 ms/*主函数*/项目三 数码管显示电路 main( ) uchar i; while (1)/一遍一遍地扫描8个数码管 for(i=0;i8;i+)/8个数码管扫描一遍 P2=weii;/发送位码,选中一个数码管 P0=seg7dispi;/发送段码,选中数码管上显示dispidelay( );/显示1 ms 项目三 数码管显示电路 2) 显示“12-00-00”将“-”的段码存放在段码表的最后位置时,如果前面是09的段码,那么“-”的段码在段码表中的序号就是10,将显示数组中“-”的位置用10替换即可。源程序#
43、include #define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/项目三 数码管显示电路 uchar code seg7 =0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92, 0 x82,0 xf8,0 x80,0 x90,0 xbf;/定义共阳型段码表,09、-uchar code wei =0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb,0 xfd,0 xfe;/定义位码表,从DS7DS0扫描uchar xian =1,2,10,0,0,10,0,0;/定义显示
44、数组,注意10的作用延时函数、主函数同前一源程序,略。项目三 数码管显示电路 3.3.3 程序调试程序调试1. 实验板电路分析实验板电路分析HOT-51实验板有8位数码管动态显示电路,如图3-15所示。图3-15中采用共阴型数码管构成动态显示电路,其中P0口为字段口;字位口由3线-8线译码器74LS138的8个输出端控制,74LS138的地址线与P2口中的低三位P2.2P2.0相连,因此采用字节寻址时,如P2=0,经138译码后使Y0=0、Y1Y7=1,发送至P0口的段码将显示在最左侧数码管上(其字位口与Y0相连,图3-15中第二行第1个);P2=1,经138译码后使Y1=0、Y0、Y2Y7=
45、1,发送至P0口的段码将显示在从左数第二个数码管上(其字位口与Y1相连,图3-15中第二行第2个),可得出实验板上从左至右数码管的位码是0,1,2,3,4,5,6,7。项目三 数码管显示电路 图3-15 HOT-51实验板数码管动态显示电路 项目三 数码管显示电路 2. 程序设计程序设计动态显示扫描过程虽不是很复杂,但由于位码、段码与硬件电路关系密切,如果电子知识欠缺太多的话,就会影响本项目的学习,因为现在的单片机控制板技术成熟、价格也不贵,所以在学习时,可弱化硬件,重点练习软件编程,尽可能熟悉介绍的各种方法。3. 结果分析结果分析程序编译后下载到实验板,观察显示结果。试依据显示结果分析问题所在,当数码管上显示乱码时,与段码的发送有关;当数字显示的位置混乱时,与位码的发送有关。项目三 数码管显示电路 4. 拓展练习拓展练习(1) 显示正确后,将每个数码管的点亮时间延长至10 ms、200 ms,然后重新编译并下载至实验板,与之前的显示结果作比较,这样会有助于理解动态显示的扫描原理。(2) 至少用两种方法实现 “87654321”的显示。(3) 至少用两种方法编程显示“122020”,左侧两个数码管不显示。项目三 数码管显示电路 3.4 项项 目目 评评 价价 项目三 数码管显示电路 项目三 数码管显示电路 3.5 拓拓展展与与提提高高在单片机控制系统中,数码管主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国建筑一局(集团)限公司北京分公司招聘137人高频重点提升(共500题)附带答案详解
- 2025下半年重庆历史名人馆事业单位选聘2人历年高频重点提升(共500题)附带答案详解
- 2025下半年浙江舟山市定海区住建资产经营限公司第一批招聘1人高频重点提升(共500题)附带答案详解
- 2025下半年江苏连云港经济技术开发区招聘事业单位工作人员18人高频重点提升(共500题)附带答案详解
- 2025上半年浙江湖州市级机关事业单位招聘编外人员人员(五)高频重点提升(共500题)附带答案详解
- 2025上半年四川遂宁市船山区事业单位招聘工作人员50人历年高频重点提升(共500题)附带答案详解
- 2025上半年四川内江资中县事业单位考聘114人高频重点提升(共500题)附带答案详解
- 政府公共服务实名制管理办法
- 食品安全标准与召回制度
- 混合现实设计管理办法
- 中国十五冶招聘线上笔试测评题库
- 牙医诊所创业计划书
- 《胆碱能受体作用药》课件
- 肥胖危害及相关疾病
- 语音通知营销方案
- 中国结直肠癌诊疗规范(2023版)解读
- 《汽车维修常用工具与仪器设备的使用》 课件 15.9 轮胎气压表的使用
- 降低针刺伤发生率品管圈课件
- JJF(新) 106-2023 微波消解仪温度、压力参数校准规范
- 小学期末复习班会课课件
- 新建子公司规划方案
评论
0/150
提交评论