资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,目录,数码管循环显示,0,9,C,语言语句结构,多个数码管动态扫描显示,0,99,计数器显示(静态显示),七段字形译码器,74LS47,应用,数码管循环显示,0,9,目,录,利用,AT89S52,单片机的,P1,口的,P2.0,P2.6,七个引脚,使其依次连接到一个共阴极,LED,数码管的,a,h,七个位段控制引脚上,数码管的公共端接地,编写程序使数码管上循环显示,0,9,十个数字。,工作任务,预备知识:,单片机系统中,人机交流的显示部分,主要有以下三种构成方式:,1、LED发光二极管显示(已学);,2、LED数码管显示(,本章学习,);,3、LCD液晶显示;,1,LED数码管,LED,数码管,是将,8个发光二极管封装,而成的,,每段为一发光二极管,其字形结构如图,(a),所示。选择不同字段发光,可显示出不同的字形,,,例如,当a,、,b,、,c,、,d,、,e,、,f,、,g,字段亮时,显示出字符“,8,”;,当a,、,f,、,g,、,c,、,d,字,段亮时,显示出,字符“,5,”。,图,(b),所示,为单个,LED数码管,的引脚排列图,,图,中,com,引脚是单个,LED数码管,的公共端。,(a)字型结构图,返回本节,共,阳极数码管,内部,8个LED,的,阳极,连接在一起作为公共引出端;只有在,公共端,接高电平时,,该数码管才会亮。,共,阴,极数码管,内部,8个LED,的,阴极,连接在一起作为公共引出端;,只有在,公共端,接低电平时,,,该数码管才会亮,。,LED,数码管引脚及内部结构,返回本节,2.,数码管的字型编码,D7 D6 D5 D4 D3 D2 D1 D0,dp,g,f,e,d,c,b,a,数码管编码规则,显示字符,共阴极字型码,共阳极字型码,显示字符,共阴极字型码,共阳极字型码,0,3FH,C0H,8,7FH,80H,1,06H,F9H,9,6FH,90H,2,5BH,A4H,A,77H,88H,3,4FH,B0H,B,7CH,83H,4,66H,99H,C,39H,C6H,5,6DH,92H,D,5EH,A1H,6,7DH,82H,E,79H,86H,7,07H,F8H,F,71H,8EH,LED,数码管字型编码表,返回本节,3.,数码管的显示方法,(,1,)动态显示。,一位一位地,轮流点亮,各位数码管的显示方式。,即在某一时段,只选中一位数码管的“位选端”,并送出相应的字型编码,在下一时段按顺序选通另外一位数码管,并送出相应的字型编码。依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。,(,2,)静态显示。,指数码管显示某一字符时,相应的发光二极管,恒定导通,或,恒定截止,。,各位数码管相互独立,公共端恒定接地(共阴极)或,+5V,(共阳极)。每个数码管的八个位段分别与一个八位,I/O,端口相连。,I/O,端口只要有字型码输出,数码管就显示给定字符,并保持不变,直到,I/O,口输出新的段码。,返回本节,(,1,),74LS245,74LS245,是,8,路同相三态双向数据总线驱动芯片,具有双向三态功能,既可以输出,也可以输入数据。结构如图所示。,A,、,B,:总线端,:()三态允许端,(,低电平有效,),DIR,:()方向控制端(,DIR=“1”,,信号由,A,向,B,传输;反之,信号由,B,传向,A,),4,。电路设计,返回本节,(,2,),.,数码管显示电路设计,按照工作任务要求,数码管显示电路是由单片机最小应用系统、一片,1,位的共阴极,LED,数码管、一片,74LS245,驱动芯片外加,限流电阻,RN1,(,RX8,关键词,)构成,,如图所示。,返回本节,5.,程序设计,1.,数码管显示功能实现分析,由于显示的数字,0,9,的字型码没有规律可循,只能采用,查表,的方式来完成我们所需的要求了。这样我们按着数字,0,9,的顺序,把每个数字的字型码按顺序排好!,建立表格(,用,数组,来实现),如下所示:,unsigned char code table=,0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,2.,数码管显示程序如下:,#include /,包含,AT89X52.H,头文件,unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,unsigned char dispcount;,void delay(void),unsigned char i,j,k;,for(i=40;i0;i-),for(j=40;j0;j-),for(k=248;k0;k-);,返回本节,void main(void),while(1),for(dispcount=0;dispcount,两个值作一个比较,判断其比较的结果是否符合,给定的条件。关系运算的结果只有,2,种可能,即“真”和“假”。,二、逻辑运算符和逻辑表达式,关系运算符,描述的是单个条件。,1.,逻辑运算符,(,1,)“,&”,(逻辑与)是二元运算符,当且仅当两个运算量的,值都为“真”,时,运算,结果是“真”,,否则为假;,(,2,)“,|”,(逻辑或)是二元运算符,当且仅当两个运算量的,值都为“假”,时,,运算,结果是“假”,,否则为真;,(,3,)“!”(逻辑非)是一元运算符,当运算量的值为“真”时,运算结果是,“假”,当运算量的值为“假”时,运算结果是“真”。,2.,逻辑表达式,用逻辑运算符将关系表达式或逻辑量连接起来的式子,称为逻辑表,达式。,一般逻辑表达式用于描述多个条件的组合。,注意:,对于参与运算的量,,只要是非零,就被当作是“真”。,四、,switch,语句,在多分支程序中,当分支较多时,使用,if,嵌套程序冗长而且可读性,降低。此时可使用,C,语言提供的,switch,语句。,switch,(表达式),case,常量表达式,1,:语句,1,case,常量表达式,2,:语句,2,case,常量表达式,n,:语句,n,default,:语句,n+1,注意事项:,(,1,)各个,case,的常量表达式的值必须不同;,(,2,)注意,break,语句的使用;,(,3,),default,子句可以省略不写,(,除非有必要,),。,五、循环结构控制语句,1.while,语句,其特点是:先判断表达式,后执行语句。,2.do-while,语句,do-while,语句特点是先执行循环体,然后判断循环条件是否成立。,其一般形式如下:,do,循环体语句,while(,表达式,);,注意“,;,”不可少。,while,和,do-while,区别,:前者若条件不成立,则不执行循环 体;而后者即使条件不成立,也要 执行循环体语句,1,次。,3.for,语句,for,(表达式,1,;表达式,2,;表达式,3,)语句,两无限循环,:,for(;),;,while(1),;,for,语句求解步骤:,(,1,)先求解表达式,1,;,(,2,)求解表达式,2,,其值为真,则执行,for,语句中指定的内嵌语句,(循环体),然后执行第(,3,)步如果为假,则结束循环;,(,3,)求解表达式,3,;,(,4,)转回第,2,步继续执行。,break,语句,:,break,语句,结束整个循环过程,不再判断循环条件是否成立。,break,语句,只能用于循环语句和,switch,语句中。,continue,语句:,continue,语句,只结束本次循环,而不是终止整个循环的执行。,continue,语句,只能用于循环语句中;,多个数码管动态扫描显示,目,录,显示器由,6,个共阴极,LED,数码管构成,使用,AT89S52,单片机,,P0,口输出显示段码,经由一片,74LS245,驱动输出给,LED,数码管,,P1,口输出位码(片选)给,LED,数码管。通过动态扫描程序使,6,个数码管显示“,123456”,。,工作任务:,一、多个数码管动态显示电路设计,1.,电路构成,(,1,)单片机最小应用系统,(,2,)一片,74LS245,驱动芯片构成,(,3,)限流排阻(,RX8,),(,4,),6,位数码管,2.,管脚分配,(,1,),P0,口输出显示段码,P0.0,P0.6,通过一片,74LS245,依次接段码口,a,g,,,P0,口,I/O,输出一定要外接上拉电阻;,(,2,),P1,口输出位码,P1.0,P1.5,依次接位码口,1,6,,如下图所示。,电路图改进措施,二、多个数码管动态显示程序设计,1,多个数码管动态显示功能实现分析,动态扫描,逐个控制各个数码管的,COM,端使各个数码管,轮流点亮,。在轮流点亮数码管的扫描过程中,每位数码管的点亮时间极为短暂(约,1ms,)。但由于人的,视觉暂留,现象及发光,二极管的余辉,,给人的印象就是一组稳定的显示数据。,(,1,)优点,可以节省,I/O,端口资源;,硬件电路也较简单。,(,2,)缺点,显示稳定度不如静态显示方式;,占用了更多的,CPU,时间。,2.,动态扫描优缺点,3.,动态扫描程序如下示,#include /,包含,AT89X52.H,头文件,unsigned char code Tab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;,unsigned char code Col=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;/,位码,void Delay(),unsigned char i;,for(i=0;i250;i+);,void main()/,同时显示,123456,unsigned char j;,while(1),for(j=1;j,指数码管显示某一字符时,相应的发光二极管,恒定导通,或,恒定截止,。,2.,静态显示的优缺点,(,1,)优点,较小的电流就可以获得较高的亮度;,占用,CPU,时间较少;,编程简单;,显示便于检测和控制。,(,2,)缺点,占用较多的,I/O,口线;,硬件电路复杂,成本高;,只适合显示位数较少的场合。,3.,计数显示实现分析,(,1,)单片机对按键的识别的过程处理;,(,2,)单片机对正确识别的按键进行计数,计数满时,又从,0,开始计数;,(,3,)单片机对计数值要进行数码显示,计数值是,16,进制数,我们要把其拆开成十位和个位数字分别送出显示。,计数值对,10,求余,可得个位数字;,计数值对,10,整除,可得十位数字;,(,4,)通过查表方式,分别显示出个位和十位数字。,4.0,99,计数显示,c,语言程序,#include /,包含,AT89X52.H,头文件,unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,unsigned char Count;/,定义变量放置计数数值,void delay10ms(void)/,定义,10ms,延时函数,void main(void)/,主函数,Count=0;/,计数变量初始为,0,P0=tableCount/10;/,十位数码管显示,0,P2=tableCount%10;/,个位数码管显示,0,while(1)/,按键扫描,计数显示处理,if(P1_0=0)/,键按下?,delay10ms();/,延时去抖动,if(P1_0=0)/,确定键按下,Count+;/,计数加,1,if(Count=100)/,计数到,100,?,Count=0;/,到,100,回,0,P0=tableCount/10;/,显示十位数,P2=tableCount%10;/,显示个位数,while(P1_0=0);/,等键释放,
展开阅读全文