
第十次课(共2学时)一、授课题目:数码管显示程序(下)二、教学目标和任务:1.掌握PO同时控制段码、位选信号的数码管显示电路的硬件原理和编程方法;2.掌握PO控制段码、译码器控制位选信号的数码管显示电路的硬件原理和编程方法;3.掌握小数的显示编程技巧。三、教学重难点:重点:PO同时控制段码、位选信号的数码管显示电路的硬件原理和编程方法。难点:小数的显示编程技巧。四、授课过程:回顾:数码管动态显示原理、显示一串数字、一串字符的编程技巧。0.引入:实际应用中,通常利用数字电路芯片节省更多的I/0口,例如我们实验中所用的开发板,PO不仅接了8只数码管的公共端,还接了8只数码管的adp端。此时硬件电路是怎么接的?数码管显示程序又该怎么写呢?1.PO同时控制段码和位选信号的硬件电路和编程方法开发板上的数码管显示电路示意图如图1所示,PO给出的信号需要通过锁存器区分。该部分应详细讲解锁存器,使学1
1 第十次课(共 2 学时) 一、授课题目:数码管显示程序(下) 二、教学目标和任务: 1.掌握 P0 同时控制段码、位选信号的数码管显示电路的 硬件原理和编程方法; 2.掌握 P0 控制段码、译码器控制位选信号的数码管显示 电路的硬件原理和编程方法; 3. 掌握小数的显示编程技巧。 三、教学重难点: 重点:P0 同时控制段码、位选信号的数码管显示电路的 硬件原理和编程方法。 难点:小数的显示编程技巧。 四、授课过程: 回顾:数码管动态显示原理、显示一串数字、一串字符的 编程技巧。 0.引入: 实际应用中,通常利用数字电路芯片节省更多的 I/O 口, 例如我们实验中所用的开发板,P0 不仅接了 8 只数码管的公 共端,还接了 8 只数码管的 a~dp 端。此时硬件电路是怎么接 的?数码管显示程序又该怎么写呢? 1. P0 同时控制段码和位选信号的硬件电路和编程方法 开发板上的数码管显示电路示意图如图 1 所示,P0 给出 的信号需要通过锁存器区分。该部分应详细讲解锁存器,使学

生充分掌握。88888888鲜8店185888885B2D8o860CH10410图1.数码管显示硬件图编程时定义如下数组:ucharcode segll=/0x3f.0x06.0x5b.0x4f.0x66.0x6d.0x7d.0x07.0x7f.0x6f:ucharcodeweill=/0xf7.0xfb.0xfd.0xfe.0x7f.0x7b.0x7d.0xefl如何区分段码和位码sbit weix=P2~7;sbit duanx=P2~6;利用m号数码管显示n,可用如下程序实现PO=seg[il: duanx=l:duanx=0:PO=weix[il:weix=l:weix=0:Delay2ms;例题1:利用图1所示电路显示76543210#include#define uchar unsigned charsbitweix=P2^7:sbit duanx=P2^6.ucharcodeseg=(0x3f.0x06.0x5b.0x4f.0x66.0x6d.0x7d.0x07.2
2 生充分掌握。 图 1.数码管显示硬件图 编程时定义如下数组: uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code wei[]={0xf7,0xfb,0xfd,0xfe,0x7f,0x7b,0x7d,0xef}; 如何区分段码和位码 sbit weix=P2^7; sbit duanx=P2^6; 利用 m 号数码管显示 n,可用如下程序实现: P0=seg[i]; duanx=1;duanx=0; P0=weix[i];weix=1;weix=0; Delay2ms(); 例题 1:利用图 1 所示电路显示 76543210 #include #define uchar unsigned char sbit weix=P2^7; sbit duanx=P2^6; uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07

Ox7f.0x6f:ucharcodeweill=/0xf7.0xfb.0xfd.0xfe.0x7f0x7b.0x7d.0xef)void delay2ms()0);void display10uchari,for(i=0:i<8:i++)PO=seg[il: duanx=1:duanx=0:PO=weix[il:weix=1:weix=0.Delay2msO:void main()P0=0xffweix=1:weix=0.duanx=0:清屏while(1) (display10,)3思考:若将delay2ms()换成delay200ms(会怎么样?小结:该部分特别重要通过小结使学生掌握更好。1)实验板上的电路图中PO传送位码,也传送段码。需要两个74573锁存器来区分段信号和位信号。2)显示数字时需要ucharcodeseg[)={0x3f,Ox06,0x5b,Ox4f,0x66,0x6d0x7d,0x07,0x7f,0x6f);//0~9段码ucharcodewei[)=(Oxf7,Oxfb,Oxfd,Oxfe,Ox7f,Ox7b,Ox7d,Oxef);//控制某一位工作的位码sbitweix=P2~7://位选控制sbitduanx=P2~6://段选控制3)程序编写时3
3 0x7f,0x6f}; uchar code wei[]={0xf7,0xfb,0xfd,0xfe,0x7f,0x7b,0x7d,0xef}; void delay2ms(){}; void display1() { uchar i; for(i=0;i<8;i++) P0=seg[i]; duanx=1;duanx=0; P0=weix[i];weix=1;weix=0; Delay2ms();} void main() { P0=0xff; weix=1;weix=0;duanx=0;清屏 while(1) { display1();} } 思考:若将 delay2ms()换成 delay200ms()会怎么样? 小结:该部分特别重要通过小结使学生掌握更好。 1)实验板上的电路图中 P0 传送位码,也传送段码。需要 两个 74573 锁存器来区分段信号和位信号。 2)显示数字时需要 uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f}; //0~9 段码 uchar code wei[]={0xf7,0xfb,0xfd,0xfe,0x7f,0x7b, 0x7d,0xef};//控制某一位工作的位码 sbit weix=P2^7;//位选控制 sbit duanx=P2^6;//段选控制 3)程序编写时

PO=wei[x]:weix=l;weix=O;//选择工作的数码管PO=seg[y];duanx=l;duanx=0;//选择显示的数字。分组讨论:学生分为五人一组,每组完成一个小问题:1、显示76543210;2)、显示12345678;3)、显示学号18070708:4)、显示HELLO;5)、最低位依次显示0~9数字之间间隔0.2s;6)、数码管依次逐个显示7~0:(先最右边显示0,0.2s后右边数第二位显示1.);7)、8个数码管同时0~9循环;8)、先低四位0~9循环,再高四位0~9循环;9)、依次逐个循环显示0~9;数字之间间隔0.1s。2.PO控制段码、译码器控制位选信号的数码管显示电路的硬件原理和编程方法原理图如图2所示,根据译码器工作想让LED1~8亮时,P2.4~P2.2取值如下:000LED1001LED2010LED3011LED4100LED5101LED6110LED74
4 P0=wei[x];weix=1;weix=0;//选择工作的数码管 P0=seg[y];duanx=1;duanx=0;//选择显示的数字。 分组讨论:学生分为五人一组,每组完成一个小问题: 1)、显示 76543210; 2)、显示 12345678; 3)、显示学号 18070708; 4)、显示 HELLO; 5)、最低位依次显示 0~9;数字之间间隔 0.2s; 6)、数码管依次逐个显示 7~0;(先最右边显示 0,0.2s 后 右边数第二位显示 1.); 7)、8 个数码管同时 0~9 循环; 8)、先低四位 0~9 循环,再高四位 0~9 循环; 9)、依次逐个循环显示 0~9;数字之间间隔 0.1s。 2. P0 控制段码、译码器控制位选信号的数码管显示电路的硬 件原理和编程方法 原理图如图 2 所示,根据译码器工作想让 LED1~8 亮时, P2.4~P2.2 取值如下: 000 LED1 001 LED2 010 LED3 011 LED4 100 LED5 101 LED6 110 LED7

111LED8LED?LEDSLED3ED2LEDPIO五888m-85883885+2克2OEVCCHveoGNDLECC274HC573104IND图2.数码管显示硬件图-2例题2:请思考图2所示电路图如何实现8个数码管显示学号18070301。#includesbit LSC=P2^4: sbitLSB=P2^3:sbitLSA=P2^2:ucharcodeseg)={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x070x7f,0x6f);void delay2ms() 0;void displayLSC=0:LSB=0:LSA=0:P0=seg[1l:delay2ms(:LSC-0:LSB=0:LSA=1:P0=seg[01: delay2msO;LSC=0:LSB=1:LSA=0.PO=seg[3]:delav2msO:LSC=0:LSB=1:LSA=1:P0=seg[01:delay2ms():LSC=1:LSB=0:LSA=0:PO=seg[7]:delav2msO:5
5 111 LED8 图 2.数码管显示硬件图-2 例题 2:请思考图 2 所示电路图如何实现 8 个数码管显示 学号 18070301。 #include sbit LSC=P2^4; sbit LSB=P2^3;sbit LSA=P2^2; uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; void delay2ms() {}; void display() { LSC=0;LSB=0;LSA=0; P0=seg[1]; delay2ms(); LSC=0;LSB=0;LSA=1; P0=seg[0]; delay2ms(); LSC=0;LSB=1;LSA=0; P0=seg[3]; delay2ms(); LSC=0;LSB=1;LSA=1; P0=seg[0]; delay2ms(); LSC=1;LSB=0;LSA=0; P0=seg[7]; delay2ms();

LSC=1:LSB=0:LSA=1:P0=seg[0]:delay2ms():LSC=1:LSB=1:LSA=0:PO=seg[8]:delay2msO):LSC=1:LSB=1:LSA=1:PO=seg[1l: delay2msO:void main()while(1)1display();333.小数的显示例题3:value为一个小数点后有三位的小数,初值为Xx.xxX,试采用图1所示电路图,编程实现显示Value的值。思路:显示小数点硬件实现。先显示五位正整数,再加小数点。拆解成数组显示。Value z=value* ?char valuewei[5]={];存放value每一位。value wei[o]=value weilil=value wei[2]=value wei[3]=value wei[4]=6
6 LSC=1;LSB=0;LSA=1; P0=seg[0]; delay2ms(); LSC=1;LSB=1;LSA=0; P0=seg[8]; delay2ms(); LSC=1;LSB=1;LSA=1; P0=seg[1]; delay2ms(); } void main() { while(1) { display(); } } 3. 小数的显示 例题 3:value 为一个小数点后有三位的小数,初值为 XX.XXX,试采用图 1 所示电路图,编程实现显示 Value 的值。 思路:显示小数点硬件实现。先显示五位正整数,再加小 数点。 拆解成数组显示。 value_z=value* ? char value_wei[5]={};存放 value 每一位。 value_wei[0]= value_wei[1]= value_wei[2]= value_wei[3]= value_wei[4]=

完成显示五位数value程序。思考小数点怎么加?加入小数点的位的段码怎么处理?PO=wei[il:weix-l:weix=0:P0=seg[x|/0x80:程序如下:# include#define uchar unsigned charuchar code seg[)=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f);//0~9段码ucharcodewei[]={Oxf7,0xfb,0xfd,0xfe,0x7f,0x7b,0x7d,0xef)://控制某一位工作的位码sbitweix=P2^7;//位选控制sbitduanx=P2^6;//段选控制float value.unsigned int value Zuchar value wei[5]=/void delay2ms()..)void value_pro()value z-value*1000valuewei[0]=valuez%10:个位valuewei[1]=valuez/10%10:十位valuewei2=valuez/100%10:百位valuewei[3]=valuez/1000%10:千位7
7 完成显示五位数 value 程序。 思考小数点怎么加?加入小数点的位的段码怎么处理? P0=wei[i];weix=1;weix=0; P0=seg[x]|0x80; 程序如下: # include #define uchar unsigned char uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; //0~9 段码 uchar code wei[]={0xf7,0xfb,0xfd,0xfe,0x7f,0x7b,0x7d,0xef};//控制 某一位工作的位码 sbit weix=P2^7;//位选控制 sbit duanx=P2^6;//段选控制 float value; unsigned int value_z; uchar value_wei[5]={}; void delay2ms(){.} void value_pro() { value_z=value*1000; value_wei[0]= value_z%10;个位 value_wei[1]= value_z/10%10;十位 value_wei2]= value_z/100%10;百位 value_wei[3]= value_z/1000%10;千位

valuewei[4]=value z/100000:万位void display ()uchari,for(i=0;i<5;i++)tif(i=-3)(PO=weilil:weix=1:weix=0P0=seg/value[ill/0x80.duanx=1:duanx=0:delay2ms(:)else(PO=wei[i];weix=l;weix=0,P0=seg[value[i]];duanx=1;duanx=0;delay2ms();)3voidmain()value=10.000;while (1)value_pro();displayO;五、作业1、利用图1电路实现带欢迎界面的显示程序,要求如下:8
8 value_wei[4]= value_z/100000;万位 } void display() { uchar i; for(i=0;i<5;i++) { if(i==3) {P0=wei[i];weix=1;weix=0; P0=seg[value[i]]|0x80;duanx=1;duanx=0;delay2ms();} else {P0=wei[i];weix=1;weix=0; P0=seg[value[i]];duanx=1;duanx=0;delay2ms();} }} void main() { value=10.000; while(1) { value_pro(); display(); } } 五、作业 1、利用图 1 电路实现带欢迎界面的显示程序,要求如下:

欢迎界面1)欢迎界面显示helledg,持续时间ls左右2)开机提示音滴滴滴三声3)自检程序,8只数码管同时点亮,依次显示0~9,每个数字持续0.1秒,最后同时点亮小数点,持续0.1秒。欢迎界面后循环显示如下字段。1)76543210,持续1秒左右2)学号持续1s左右3)从最低位依次忘高位显示0,1,2,3,4,5,6,7,每个数字持续0.1秒4)依次逐个循环显示0~9;数字之间间隔0.1s。2、利用图2电路,实现XX.XXX这样的小数显示。六、参考文献1.丁向荣编,单片机微机原理与接口技术(第2版),北京:电子工业出版社,2018.2.张毅刚编,单片机原理及应用:C51编程+Proteus仿真(第2版),北京:高等教育出版社,20163.丁元杰编,单片微机原理及应用(第三版),北京:机械工业出版社,2011.4.郭文川编,MCS-51单片机原理接口及应用,北京:电子工业出版社,20135.周航慈编,单片机应用程序设计技术(修订版),北京:北京航天航空大学出版社,20026.严洁编,单片机原理及其接口技术,北京,机械工业出版社,9
9 欢迎界面 1)欢迎界面显示 helle_dq,持续时间 1s 左右 2)开机提示音滴滴滴三声 3)自检程序,8 只数码管同时点亮,依次显示 0~9,每个 数字持续 0.1 秒,最后同时点亮小数点,持续 0.1 秒。 欢迎界面后循环显示如下字段。 1)76543210,持续 1 秒左右 2)学号持续 1s 左右 3)从最低位依次忘高位显示 0,1,2,3,4,5,6,7,每个数字 持续 0.1 秒 4)依次逐个循环显示 0~9;数字之间间隔 0.1s。 2、利用图 2 电路,实现 XX.XXX 这样的小数显示。 六、参考文献 1. 丁向荣编,单片机微机原理与接口技术(第 2 版),北京:电子 工业出版社,2018. 2. 张毅刚编, 单片机原理及应用:C51编程+Proteus仿真(第2版), 北京:高等教育出版社,2016. 3. 丁元杰编,单片微机原理及应用(第三版),北京:机械工业出 版社,2011. 4. 郭文川编,MCS-51 单片机原理接口及应用,北京:电子工业出 版社,2013. 5. 周航慈编, 单片机应用程序设计技术(修订版),北京:北京航 天航空大学出版社,2002. 6. 严洁编, 单片机原理及其接口技术,北京,机械工业出版社

2010.七、课后记1.本节课介绍了一种较有难度的数码管动态显示电路和编程方法,硬件设计较难理解,需要循序渐进从锁存器功能及在电路中的功能讲起,使学生充分理解电路结构。2.将编程语句总结为固定套路,方便同学们使用。3.通过分组讨论作答,加深理解,巩固知识。10
10 2010. 七、课后记 1.本节课介绍了一种较有难度的数码管动态显示电路和 编程方法,硬件设计较难理解,需要循序渐进从锁存器功能及 在电路中的功能讲起,使学生充分理解电路结构。 2.将编程语句总结为固定套路,方便同学们使用。 3.通过分组讨论作答,加深理解,巩固知识