第二节-数码管显示

上传人:小*** 文档编号:243421168 上传时间:2024-09-22 格式:PPT 页数:31 大小:245KB
返回 下载 相关 举报
第二节-数码管显示_第1页
第1页 / 共31页
第二节-数码管显示_第2页
第2页 / 共31页
第二节-数码管显示_第3页
第3页 / 共31页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,3.2,数码管显示,数码管是单片机常用的数字或字符显示部件,本节任务是让单片机,P0,口驱动一个共阳型的数码管显示依次,09,并循环,并编写程序仿真实现。通过简单的程序设计让单片机驱动数码管显示,重点掌握数码管的字形编码和显示原理,并了解数组的应用和程序设计过程的程序优化技巧。,3.2.1,数码管的显示原理,一、数码管的字形编码,单片机系统常用的数码管有共阳型和共阴型两种类型,它是单片机常用的外围显示器件。两种类型的数码管外形和结构类似,只是数码管内部组成数码段和标点的,LED,接法有区别,共阳型数码管的内部所有,LED,的正极接在一起为公共极引脚,负极分别引出,依次命名为,a,、,b,、,c,、,d,、,e,、,f,、,g,、,dot,,使用时共阳型数码管的公共极接正极,其他引脚分别接驱动电路,数码管显示时低电平有效。数码管可以显示,0,到,9,共十个数字,如果加上小数点的显示,驱动一个数码管显示至,少需要,8,位有效数据。数码管显示数字的,8,位数据编码见表,3-2-1,和,3-2-2,所示,其中表,3-2-1,为共阳型数码管编码,表,3-2-2,为共阴型编码。由于共阴型数码管内部所有,LED,的负极接在一起,所以数码管显示时驱动数据高电平有效。,显示数字,dot,g,f,e,d,c,b,a,16,进制,0,1,1,0,0,0,0,0,0,0xc0,1,1,1,1,1,1,0,0,1,0xf9,2,1,0,1,0,0,1,0,0,0xa4,3,1,0,1,1,0,0,0,0,0xb0,4,1,0,0,1,1,0,0,1,0x99,5,1,0,0,1,0,0,1,0,0x92,6,1,0,0,0,0,0,1,0,0x82,7,1,1,1,1,1,0,0,0,0xf8,8,1,0,0,0,0,0,0,0,0x80,9,1,0,0,1,0,0,0,0,0x90,表,3-2-1,共阳数码管显示编码,显示数字,dot,g,f,e,d,c,b,a,16,进制,0,0,0,1,1,1,1,1,1,0x3f,1,0,0,0,0,0,1,1,0,0x06,2,0,1,0,1,1,0,1,1,0x5b,3,0,1,0,0,1,1,1,1,0x4f,4,0,1,1,0,0,1,1,0,0x66,5,0,1,1,0,1,1,0,1,0x6d,6,0,1,1,1,1,1,0,1,0x7d,7,0,0,0,0,0,1,1,1,0x07,8,0,1,1,1,1,1,1,1,0x7f,9,0,1,1,0,1,1,1,1,0x6f,表,3-2-2,共阴数码管显示编码,二、数码管的驱动电路,本节任务所需的电路只需在单片机的最小系统基础增加一个数码管即可。在图,3-2-1,中,单片机的,P0,口接一只共阳数码管,其中,P0.0P0.7,口分别接数码管的,adot,引脚,,P0,的每个端口只要有低电平输出,对应的数码管的那个段就显示。如让数码管显示,1,,,数码管,b,、,c,段亮,程序控制,P0,输出,0xbe,十六进制编码即可,因此共阳数码管显示,09,十进制数字,需要利用,10,个显示码组成的数组。小数点在不用时一般不让显示,高位端口,P0.7,输出高电平即可。,图,3-2-1,单片机驱动共阳数码管电路,由于,P0,每个端口的灌电流达,20mA,,数码管每段,LED,正常显示,5mA,即可,因此电路中需要,R29,八个电阻用来限制数码管每一段电流,以防止驱动电流过大而烧毁器件。在利用,Proteus,软件仿真时,数码管采用,Optoelectronics,元件库中,7-Segment Displays,下的,7-SEG-COM-ANODE,元件,可以不接限流电阻。,数码管是单片机常用的显示器件,在实际应用中,为了保证数码管使用安全,一般在,P0,口和数码管之间加有限流电阻。,另外,很多器件如三极管、继电器、蜂鸣器、步进电机等都要用到单片机的,I/O,口驱动。单片机的,P0,口在不加上拉电阻的情况下只能驱动低电平有的负载,,P1,、,P2,和,P3,由于采用场效应管互补对称输出方式,高电平和低电平都有电流出,除,P0,口以外的其他,I/O,口作驱动输出应用时可以把上拉电阻省去。,三、程序设计,数码管显示,0,到,9,数字过程中,数字的变化需要有一定的时间间隔,因此程序还要用到,delay,()函数。在程序设计过程中,可以把数码管的字形编码做在一个数组里面,为了让,P0,口依次输出,09,数字,让,P0,口的内容依次在数组中取值即可。程序流程见程序清单如下:,/*/,#include,code unsigned char seven_seg10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /,字形数组,void delay (unsigned,int,x) /*,时间延迟函数 *,/,unsigned,int,i;,unsigned char j;,for(i,= 0;i ,x;i,+) 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,(),i+,;,if,(,i = 10,),i = 0,;,/*/,本案例程序中,当程序中使用常量数据时,如共阳数码管数字显示编码、液晶显示器的汉字编码等,一般希望这些数据当程序下载到单片机时存放在单片机的,ROM,区,对此类数据声明前面需要加上关键字,code,或,const,,如数码管的显示编码。另外,在本案例中用到了数组和函数调用以及文件包含等操作,这些操作在单片机,C,语言程序中经常用到,下面将简单介绍数组和函数的基本概念。,3.2.2,数组,在本案例中,数码管的显示码是一组有规律的同类型数据,如果定义大量的简单变量,程序将变得非常繁琐。为了处理方便,,C,语言把具有相同类型的若干变量或常量,用一个带下标数组定义。对各个变量的相同操作可以利用循环改变下标值来进行重复的处理,使程序变得简明清晰。带下标的变量由数组名称和用方括号括起来的下标共同表示,称为数组元素。通过数组名和下标可直接访问数组的每个元素。数组有两个特点:一是其长度是确定的,在定义的同时确定了其数组的大小,在程序中不允许随机变动;,二是其元素必须是相同类型,不允许出现混合类型。,一、一维数组,在,C,语言中使用数组必须先进行定义或声明,一旦定义了一个数组,系统就将在内存中为其分配一个所申请大小的空间,该空间大小固定,以后不能改变。一维数组的定义格式为,数据类型 数组名常量表达式;,在,C,语方中规定,一个数组的名字表示该数组在内存中所分配的一块存储区域的首地址,因此,数组名是一个地址常量,不允许对其进得修改。“常量表达式”表示该数组拥有的元素个数,即定义了数组的大小,必须是正整数。例如,以下语句定义了,int,型的长度为,10,的一维数组,unsigned char seven_seg10,在定义了一个数组后,系统在内存在分配一块连续的存储空间用于存储数组。一个数组中的元素下标必须从,0,开始。所以,定义数组时,若“常量表达式”指出数组长度为,N,,数组元素下标只能从,0,到,n-1,。“常量表达式”能包含常量,但不能包含变量。,二、一维数组元素的引用,在程序中,一维数组元素可以直接作为变量或常量直接饮用,其的引用格式为,数组名 下标,其中,“下标”可以是整型常量或是整型表达式。下标是数组元素到数组开始的偏移量,第一个元素的偏移量是,0,(亦称,0,号元素),第二个元素的偏移量是,1,(亦称,1,号元素),依此类推。例如,,seven_seg5,表示引用数组,seven_seg,的下标,为,5,的元素,即,0x99,。,三、一维数组的初始化,每个数组元素可以表示一个变量,对数组的赋值也就是对数组元素的赋值。在定义数组的语句中,可以直接为数组赋值,这称为数组的初始化。数组的初始化方法是将数组元素的初值信存放在由大括号括起来的初始值表中,每个初值之间由逗号隔开。,3.2.3,函数调用与文件包含,按照一定顺序把单片机的程序在一个函数或一个中全部完成,是简单的单片机系统程序设计常用的一种结构,当程序只有几十行或几百行的时候,采用顺序结构编程的方法很容易让人看明白。如果一个程序超过几千行的时候,分析就会变得很复杂。单片机,C,语言程序也支持模块化设计,在模块化程序设计过程,经常会用到函数的调用、文件的包含问题。,C,语言的模块化程序设计给单片机编程带来很大的方便,在这里以本节程序为例,简单介绍在,Keil,软件中实现模块化设计常用的技巧。,一、自定义函数,程序中经常反复执行的部分可以写成一个函数,然后就可以在程序中反复地调用。以下是函数的一般格式,函数类型 函数名称(参数序列);,函数的主体,其中函数类型用来设置一个函数被调用之后所返回数值的类型,如果用户希望写一个不返回任何数据的函数时,可以将函数类型设为,void,。,1.,无返回值函数,本节案例中,delay,(),函数声明和调用情况为,/*/,void delay (unsigned,int,x) /,没有返回值,有形参,unsigned,int,i;,unsigned char j;,for(i,= 0;i ,x;i,+),for (j = 0;j = 200;j+);,void main (void),while (1),.,delay(1000);,/,调用时间延迟函数,有实参,/*/,2.,有返回值函数,如果函数中要返回数值时,必须使用,return,命令。并且返回值的类型必须与函数的类型一致,以下是有返回值函数的例子,/*/,unsigned char,sum(unsigned,char,a,unsigned,char b),unsigned char x;,check_GLCD_busyflag,(); /,函数中可以调用另一个函数,x=,a+b,;,return x; /return,会返回,unsigned char,类型的数据,/*/,二、函数调用,我们可以把一些具有一定功能的程序打包为一个个独立的函数,用到此功能时直接调用即可。如在本节的几个程序中,主函数都调用了延时函数。函数的调用是单片机程序模块化设计的一个方法,函数的调用让,C,语言的单片机程序具有很强的可移植性,同时也大大简化了程序的结构。,函数调用比较简单,如本例和上一节的程序中,主函数中的出现的,delay,(),语句就是一种函数调用,当单片机运行主函数的,delay,(,1000,)语句时,调用延时函数,delay (unsigned,int,x),,,其中,1000,为延时函数的实参,,x,为函数的形参,在还有形参函数中,实参必须与形参类型统一,本例中如果,x,为,char,变量,则程序运行中会出错。另外,为了提高单片机程序的可靠性,在函数调用时,无返回值的函数尽量用,void,声名,没有形参的函数也要用,void,声名。,三、文件的包含,函数调用只能使程序的结构简,并不能使程序设计简化。在复杂的单片机程序中也常常用到文件包含和文件关联。本例中程序前面的,#include,语句是一种文件包含形式。所谓文件包含,是指一个文件将另外一个文件的内容全部包含进来。,reg51.h,是,Kiel,软件中定义,51,系列单片,机内部资源的头文件,在编写单片机程序时,只要用到,51,单片机内部资源,程序前面必须把此文件包含进来。,复杂的单片机系统,程序可以有主程序和若干子程序组成,子程序服务与主程序,并通过文件包含与主程序关联,文件包含最简单应用是直接在主程序中包含子程序的,C,语言文件,也可以把子程序做成头文件形式被主程序包含。,本例程序中,我们可以把延时函数在文档中剪切保存为一个,delay.c,文件,并存放在与主程序同一个目中。这个,C,文件内容为,/*/,void delay (unsigned,int,x),unsigned,int,i;,unsigned char j;,for (i = 0;i x; i+),for (j = 0;j = 200;j+);,/*/,在设计,LED,闪烁程序时直接包含即可,这样主程序可以得到简化,如:,/*/,#include /,包含,51,头文件,#,include”delay.c,” /,包含,delay.c,文件,void main (void),unsigned char i; /,变量,i,作为数组的,09,编号,while (1),P0 =,seven_segi,; /*,输出,09,到共阳七段显示器*,/,delay(1000); /*,调用时间延迟函数,delay,()*,/,i+,;,if,(,i = 10,),i = 0,;,/*/,也可以把,delay.c,文件生成一个,delay.h,文件在程序中进行包含,在使用时,delay.h,也放在与主程序同一级目录中。,delay.h,的内容为,/*/,#,ifndef,_,delay_h,_,#define _ delay _h_,void,delay(unsigned,char x) ;,#,endif,/*/,其中条件指示符,#,ifndef,为预编译指令,用来检查预编译字符在前面是否已经被定义,如果在前面没有被定义,则条件指示符的值为真,于是把,#,ifndef,到,#,endif,之间的所有语句都被包含进来进行处理。,如果,#,ifndef,指示符的值为假,则它与,#,endif,指示符之间的行将被忽略。,利用数码管也可以显示日期和时间,但是在本案例中,数字变化时间是由延时函数实现的,由于,C,语言程序进过编译后的生成的汇编程序与直接采用汇编语言编写的程序区别很大,因此延时函数实现的延时并不准确,如果要得到准确的延时时间,需要用到单片,机内部定时器,/,计数器这个重要部件。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!