第十次课(共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<reg51.h>#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<reg51.h> #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。#include<reg51.h>sbit 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<reg51.h> 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();