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

下载本文档

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

文档简介

1、第二节数码管显示第1页,共30页。3.2.1 数码管的显示原理数码管的显示原理一、数码管的字形编码一、数码管的字形编码 单片机系统常用的数码管有共阳型和共阴型两种类单片机系统常用的数码管有共阳型和共阴型两种类型,它是单片机常用的外围显示器件。两种类型的数码型,它是单片机常用的外围显示器件。两种类型的数码管外形和结构类似,只是数码管内部组成数码段和标点管外形和结构类似,只是数码管内部组成数码段和标点的的LEDLED接法有区别,共阳型数码管的内部所有接法有区别,共阳型数码管的内部所有LEDLED的正极的正极接在一起为公共极引脚,负极分别引出,依次命名为接在一起为公共极引脚,负极分别引出,依次命名为

2、a a、b b、c c、d d、e e、f f、g g、dotdot,使用时共阳型数码管的公共,使用时共阳型数码管的公共极接正极,其他引脚分别接驱动电路,数码管显示时低极接正极,其他引脚分别接驱动电路,数码管显示时低电平有效。数码管可以显示电平有效。数码管可以显示0 0到到9 9共十个数字,如果加上共十个数字,如果加上小数点的显示,驱动一个数码管显示至小数点的显示,驱动一个数码管显示至第2页,共30页。 少需要少需要8 8位有效数据。数码管显示数字的位有效数据。数码管显示数字的8 8位数据位数据编码见表编码见表3-2-13-2-1和和3-2-23-2-2所示,其中表所示,其中表3-2-13-2

3、-1为共阳型为共阳型数码管编码,表数码管编码,表3-2-23-2-2为共阴型编码。由于共阴型数为共阴型编码。由于共阴型数码管内部所有码管内部所有LEDLED的负极接在一起,所以数码管显示的负极接在一起,所以数码管显示时驱动数据高电平有效。时驱动数据高电平有效。 第3页,共30页。显示数字dotgfedcba16进制0110000000 xc01111110010 xf92101001000 xa43101100000 xb04100110010 x995100100100 x926100000100 x827111110000 xf88100000000 x809100100000 x90 表

4、表3-2-1 共阳数码管显示编码共阳数码管显示编码第4页,共30页。显示数字dotgfedcba16进制进制0001111110 x3f1000001100 x062010110110 x5b3010011110 x4f4011001100 x665011011010 x6d6011111010 x7d7000001110 x078011111110 x7f9011011110 x6f 表表3-2-2共阴数码管显示编码共阴数码管显示编码第5页,共30页。二、数码管的驱动电路二、数码管的驱动电路 本节任务所需的电路只需在单片机的最小系统基本节任务所需的电路只需在单片机的最小系统基础增加一个数码管

5、即可。在图础增加一个数码管即可。在图3-2-1中,单片机的中,单片机的P0口接口接一只共阳数码管,其中一只共阳数码管,其中P0.0P0.7口分别接数码管的口分别接数码管的adot引脚,引脚,P0的每个端口只要有低电平输出,对应的数码管的每个端口只要有低电平输出,对应的数码管的那个段就显示。如让数码管显示的那个段就显示。如让数码管显示1,数码管数码管b、c段亮,段亮,程序控制程序控制P0P0输出输出0 xbe十六进制编码即可,因此共阳数码十六进制编码即可,因此共阳数码管显示管显示09十进制数字,需要利用十进制数字,需要利用10个显示码组成的数组。个显示码组成的数组。小数点在不用时一般不让显示,高

6、位端口小数点在不用时一般不让显示,高位端口P0.7输出高电输出高电平即可。平即可。 第6页,共30页。图图3-2-1 单片机驱动共阳数码管电路单片机驱动共阳数码管电路第7页,共30页。 由于由于P0每个端口的灌电流达每个端口的灌电流达20mA,数码管每段,数码管每段LED正正常显示常显示5mA即可,因此电路中需要即可,因此电路中需要R29八个电阻用来限八个电阻用来限制数码管每一段电流,以防止驱动电流过大而烧毁器件。在利制数码管每一段电流,以防止驱动电流过大而烧毁器件。在利用用Proteus软件仿真时,数码管采用软件仿真时,数码管采用Optoelectronics元件库元件库中中7-Segmen

7、t Displays下的下的7-SEG-COM-ANODE元件,可以不元件,可以不接限流电阻。接限流电阻。 数码管是单片机常用的显示器件,在实际应用中,为了保数码管是单片机常用的显示器件,在实际应用中,为了保证数码管使用安全,一般在证数码管使用安全,一般在P0口和数码管之间加有限流电阻。口和数码管之间加有限流电阻。第8页,共30页。 另外,很多器件如三极管、继电器、蜂鸣器、步进另外,很多器件如三极管、继电器、蜂鸣器、步进电机等都要用到单片机的电机等都要用到单片机的I/O口驱动。单片机的口驱动。单片机的P0口口在不加上拉电阻的情况下只能驱动低电平有的负载,在不加上拉电阻的情况下只能驱动低电平有的

8、负载, P1、P2和和P3由于采用场效应管互补对称输出方式,高由于采用场效应管互补对称输出方式,高电平和低电平都有电流出,除电平和低电平都有电流出,除P0口以外的其他口以外的其他I/O口口作驱动输出应用时可以把上拉电阻省去。作驱动输出应用时可以把上拉电阻省去。第9页,共30页。三、程序设计三、程序设计 数码管显示数码管显示0到到9数字过程中,数字的变化需要有一定的数字过程中,数字的变化需要有一定的时间间隔,因此程序还要用到时间间隔,因此程序还要用到delay()函数。在程序设计过()函数。在程序设计过程中,可以把数码管的字形编码做在一个数组里面,为了让程中,可以把数码管的字形编码做在一个数组里

9、面,为了让P0口依次输出口依次输出09数字,让数字,让P0口的内容依次在数组中取值即口的内容依次在数组中取值即可。程序流程见程序清单如下:可。程序流程见程序清单如下:/*/#includecode unsigned char seven_seg10 = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; /字形数组字形数组第10页,共30页。void delay (unsigned int x) /* 时间延迟函数时间延迟函数 */ unsigned int i;unsigned char j;for(i = 0;i x;i

10、+) for (j = 0;j = 200;j+);void main (void)unsigned char i; / 变量变量 i 作为数组的作为数组的09编号编号 P2 = 0; /P2.0 = 0,通过反相器反相后,加在数码管公共端上,通过反相器反相后,加在数码管公共端上的电压为正的电压为正while (1) P0 = seven_segi; /输出输出09到共阳七段显示器到共阳七段显示器delay(1000); /调用时间延迟函数调用时间延迟函数delay()()第11页,共30页。 i+;if(i = 10)i = 0;/*/第12页,共30页。 本案例程序中,当程序中使用常量数据

11、时,如共阳数码管数本案例程序中,当程序中使用常量数据时,如共阳数码管数字显示编码、液晶显示器的汉字编码等,一般希望这些数据当程字显示编码、液晶显示器的汉字编码等,一般希望这些数据当程序下载到单片机时存放在单片机的序下载到单片机时存放在单片机的ROM区,对此类数据声明前区,对此类数据声明前面需要加上关键字面需要加上关键字code或或const,如数码管的显示编码。另外,如数码管的显示编码。另外,在本案例中用到了数组和函数调用以及文件包含等操作,这些操在本案例中用到了数组和函数调用以及文件包含等操作,这些操作在单片机作在单片机C语言程序中经常用到,下面将简单介绍数组和函数语言程序中经常用到,下面将

12、简单介绍数组和函数的基本概念。的基本概念。 第13页,共30页。3.2.2 数组数组 在本案例中,数码管的显示码是一组有规律的同类在本案例中,数码管的显示码是一组有规律的同类型数据,如果定义大量的简单变量,程序将变得非常繁型数据,如果定义大量的简单变量,程序将变得非常繁琐。为了处理方便,琐。为了处理方便,C C语言把具有相同类型的若干变量语言把具有相同类型的若干变量或常量,用一个带下标数组定义。对各个变量的相同操或常量,用一个带下标数组定义。对各个变量的相同操作可以利用循环改变下标值来进行重复的处理,使程序作可以利用循环改变下标值来进行重复的处理,使程序变得简明清晰。带下标的变量由数组名称和用

13、方括号括变得简明清晰。带下标的变量由数组名称和用方括号括起来的下标共同表示,称为数组元素。通过数组名和下起来的下标共同表示,称为数组元素。通过数组名和下标可直接访问数组的每个元素。数组有两个特点:一是标可直接访问数组的每个元素。数组有两个特点:一是其长度是确定的,在定义的同时确定了其数组的大小,其长度是确定的,在定义的同时确定了其数组的大小,在程序中不允许随机变动;在程序中不允许随机变动;第14页,共30页。 二是其元素必须是相同类型,不允许出现混合类型。二是其元素必须是相同类型,不允许出现混合类型。 一、一维数组一、一维数组 在在C语言中使用数组必须先进行定义或声明,一旦定语言中使用数组必须

14、先进行定义或声明,一旦定义了一个数组,系统就将在内存中为其分配一个所申请义了一个数组,系统就将在内存中为其分配一个所申请大小的空间,该空间大小固定,以后不能改变。一维数大小的空间,该空间大小固定,以后不能改变。一维数组的定义格式为组的定义格式为 数据类型数据类型 数组名常量表达式;数组名常量表达式;第15页,共30页。 在在C语方中规定,一个数组的名字表示该数组在内存中语方中规定,一个数组的名字表示该数组在内存中所分配的一块存储区域的首地址,因此,数组名是一个地址所分配的一块存储区域的首地址,因此,数组名是一个地址常量,不允许对其进得修改。常量,不允许对其进得修改。“常量表达式常量表达式”表示

15、该数组拥表示该数组拥有的元素个数,即定义了数组的大小,必须是正整数。例如,有的元素个数,即定义了数组的大小,必须是正整数。例如,以下语句定义了以下语句定义了int 型的长度为型的长度为10的一维数组的一维数组 unsigned char seven_seg10在定义了一个数组后,系统在内存在分配一块连续的存储在定义了一个数组后,系统在内存在分配一块连续的存储空间用于存储数组。一个数组中的元素下标必须从空间用于存储数组。一个数组中的元素下标必须从0开始。开始。所以,定义数组时,若所以,定义数组时,若“常量表达式常量表达式”指出数组长度为指出数组长度为N,数组元素下标只能从数组元素下标只能从0到到

16、n-1。“常量表达式常量表达式”能包含常量,能包含常量,但不能包含变量。但不能包含变量。 第16页,共30页。二、一维数组元素的引用二、一维数组元素的引用 在程序中,一维数组元素可以直接作为变量或常量直接在程序中,一维数组元素可以直接作为变量或常量直接饮用,其的引用格式为饮用,其的引用格式为 数组名数组名 下标下标其中,其中,“下标下标”可以是整型常量或是整型表达式。下标是数组可以是整型常量或是整型表达式。下标是数组元素到数组开始的偏移量,第一个元素的偏移量是元素到数组开始的偏移量,第一个元素的偏移量是0(亦称(亦称0号号元素),第二个元素的偏移量是元素),第二个元素的偏移量是1(亦称(亦称1

17、号元素),依此类号元素),依此类推。例如,推。例如,seven_seg5表示引用数组表示引用数组seven_seg的下标的下标为为 5的元素,即的元素,即0 x99。第17页,共30页。三、一维数组的初始化三、一维数组的初始化 每个数组元素可以表示一个变量,对数组的赋值也每个数组元素可以表示一个变量,对数组的赋值也就是对数组元素的赋值。在定义数组的语句中,可以直就是对数组元素的赋值。在定义数组的语句中,可以直接为数组赋值,这称为数组的初始化。数组的初始化方接为数组赋值,这称为数组的初始化。数组的初始化方法是将数组元素的初值信存放在由大括号括起来的初始法是将数组元素的初值信存放在由大括号括起来的

18、初始值表中,每个初值之间由逗号隔开。值表中,每个初值之间由逗号隔开。 第18页,共30页。3.2.3 函数调用与文件包含函数调用与文件包含 按照一定顺序把单片机的程序在一个函数或一按照一定顺序把单片机的程序在一个函数或一个中全部完成,是简单的单片机系统程序设计常用个中全部完成,是简单的单片机系统程序设计常用的一种结构,当程序只有几十行或几百行的时候,的一种结构,当程序只有几十行或几百行的时候,采用顺序结构编程的方法很容易让人看明白。如果采用顺序结构编程的方法很容易让人看明白。如果一个程序超过几千行的时候,分析就会变得很复杂。一个程序超过几千行的时候,分析就会变得很复杂。单片机单片机C C语言程

19、序也支持模块化设计,在模块化程语言程序也支持模块化设计,在模块化程序设计过程,经常会用到函数的调用、文件的包含序设计过程,经常会用到函数的调用、文件的包含问题。问题。C C语言的模块化程序设计给单片机编程带来语言的模块化程序设计给单片机编程带来很大的方便,在这里以本节程序为例,简单介绍在很大的方便,在这里以本节程序为例,简单介绍在KeilKeil软件中实现模块化设计常用的技巧。软件中实现模块化设计常用的技巧。第19页,共30页。一、自定义函数一、自定义函数 程序中经常反复执行的部分可以写成一个函数,然程序中经常反复执行的部分可以写成一个函数,然后就可以在程序中反复地调用。以下是函数的一般格式后

20、就可以在程序中反复地调用。以下是函数的一般格式 函数类型函数类型 函数名称(参数序列);函数名称(参数序列); 函数的主体函数的主体 其中函数类型用来设置一个函数被调用之后所返回数值的类型,其中函数类型用来设置一个函数被调用之后所返回数值的类型,如果用户希望写一个不返回任何数据的函数时,可以将函数类如果用户希望写一个不返回任何数据的函数时,可以将函数类型设为型设为void。第20页,共30页。1. 无返回值函数无返回值函数本节案例中本节案例中delay()()函数声明和调用情况为函数声明和调用情况为/*/void delay (unsigned int x) /没有返回值,有形参没有返回值,有

21、形参 unsigned int i;unsigned char j;for(i = 0;i x;i+) for (j = 0;j = 200;j+);void main (void)while (1) 第21页,共30页。 . delay(1000); /调用时间延迟函数,有实参调用时间延迟函数,有实参 /*/2. 有返回值函数有返回值函数 如果函数中要返回数值时,必须使用如果函数中要返回数值时,必须使用return命令。命令。并且返回值的类型必须与函数的类型一致,以下是有返回并且返回值的类型必须与函数的类型一致,以下是有返回值函数的例子值函数的例子第22页,共30页。/*/unsigned

22、char sum(unsigned char a,unsigned char b)unsigned char x; check_GLCD_busyflag(); /函数中可以调用另一个函数函数中可以调用另一个函数 x=a+b; return x; /return会返回会返回unsigned char 类型的数据类型的数据/*/第23页,共30页。二、函数调用二、函数调用 我们可以把一些具有一定功能的程序打包为一个个独立我们可以把一些具有一定功能的程序打包为一个个独立的函数,用到此功能时直接调用即可。如在本节的几个程序的函数,用到此功能时直接调用即可。如在本节的几个程序中,主函数都调用了延时函数

23、。函数的调用是单片机程序模中,主函数都调用了延时函数。函数的调用是单片机程序模块化设计的一个方法,函数的调用让块化设计的一个方法,函数的调用让C语言的单片机程序具语言的单片机程序具有很强的可移植性,同时也大大简化了程序的结构。有很强的可移植性,同时也大大简化了程序的结构。 第24页,共30页。 函数调用比较简单,如本例和上一节的程序中,主函数调用比较简单,如本例和上一节的程序中,主函数中的出现的函数中的出现的delay()()语句就是一种函数调用,当语句就是一种函数调用,当单片机运行主函数的单片机运行主函数的delay(1000)语句时,调用延时)语句时,调用延时函数函数delay (unsi

24、gned int x),其中其中1000为延时函数的实为延时函数的实参,参,x为函数的形参,在还有形参函数中,实参必须与形为函数的形参,在还有形参函数中,实参必须与形参类型统一,本例中如果参类型统一,本例中如果x为为char变量,则程序运行中变量,则程序运行中会出错。另外,为了提高单片机程序的可靠性,会出错。另外,为了提高单片机程序的可靠性,在函数调用时,无返回值的函数尽量用在函数调用时,无返回值的函数尽量用void声名,声名,没有形参的函数也要用没有形参的函数也要用void声名。声名。第25页,共30页。三、文件的包含三、文件的包含 函数调用只能使程序的结构简,并不能使程序设计简函数调用只能

25、使程序的结构简,并不能使程序设计简化。在复杂的单片机程序中也常常用到文件包含和文件关联。化。在复杂的单片机程序中也常常用到文件包含和文件关联。本例中程序前面的本例中程序前面的#include语句是一种文件包含形语句是一种文件包含形式。所谓文件包含,是指一个文件将另外一个文件的内容式。所谓文件包含,是指一个文件将另外一个文件的内容全部包含进来。全部包含进来。reg51.h是是Kiel软件中定义软件中定义51系列单片系列单片机内机内部资源的头文件,在编写单片机程序时,只要用到部资源的头文件,在编写单片机程序时,只要用到51单片单片机内部资源,程序前面必须把此文件包含进来。机内部资源,程序前面必须把此文件包含进来。 第26页,共30页。 复杂的单片机系统,程序可以有主程序和若干子程序组复杂的单片机系统,程序可以有主程序和若干子程序组成,子程序服务与主程序,并通过文件包含与主程序关联,成,子程序服务与主程序,并通过文件包含与主程序关联,文件包含最简单应用是直接在主程序中包含子程序的文件包含最简单应用是直接在主程序中包含子程序的C语语言文件,也可以把子程序做成头文件形式被主程序包含。言文件,也可以把子程序做成头文件形式被主程序包含。本例程序中,我们可以把延时函数在文档中剪切保本例程序中,我们可以把延时函数在文档中剪切保存为一个存为一个delay.c文件

温馨提示

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

评论

0/150

提交评论