单片机应用技术项目式教程课件:数字电子钟的设计_第1页
单片机应用技术项目式教程课件:数字电子钟的设计_第2页
单片机应用技术项目式教程课件:数字电子钟的设计_第3页
单片机应用技术项目式教程课件:数字电子钟的设计_第4页
单片机应用技术项目式教程课件:数字电子钟的设计_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术项目式教程—基于Proteus和KeilCSINGLE-CHIP

COMPUTER

APPLICATION

TECHNOLOGY

数字电子钟的设计定时/计数器的应用01LED数码管结构,分类及应用02数字电子钟的设计03知识要点05

数字电子钟的设计

了解定时/计数器的结构及原理,并用C语言编程01掌握LED动态扫描的编程方法02能用proteus软件绘制仿真原理图03能应用C语言编程输出方波和矩形波,并进行仿真04学习要求05实现数字电子钟的设计4.1定时/计数器工作原理4.1.1传统MCS-51单片机定时/计数器的基本结构定时/计数器的基本结构如图4.1所示。基本部件是两个16位寄存器T0和T1,每个寄存器分成两个8位寄存器(T0由高8位TH0和低8位TL0组成,T1由TH1和TL1组成)。TMOD是定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能;TCON是定时/计数器的控制寄存器,用于控制T0、T1的启动和停止,以及设置溢出标志。4.2定时/计数器的特殊功能寄存器

STC15系列单片机

定时/计数器的特殊功能

寄存器见表4-1。4.2定时/计数器的特殊功能寄存器4.2.1定时/计数器T0和T1的控制寄存器控制寄存器(TCON)(88H)的低4位用于控制外部中断,已在前面介绍TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:1)TF1:定时/计数器T1溢出中断请求标志位(可看作TimerFull的缩写)。定时/计数器T1计数溢出时由硬件自动置TF1为“1”。在进入中断服务程序后TF1由硬件自动清“0”;若用于查询方式,此位可作为状态位供查询,但应注意查询后要由软件清“0”。2)TR1:定时/计数器T1运行控制位(可看作TimerStart的缩写)。TR1置“1”时,定时/计数器T1开始工作;TR1置“0”时,定时/计数器T1停止工作。TR1由软件置“1”或清“0”。所以,用软件可控制定时/计数器T1的启动与停止。3)TF0:定时/计数器T0溢出中断请求标志位,其功能与TF1类同。4)TR0:定时/计数器T0运行控制位,其功能与TR1类同。4.2定时/计数器的特殊功能寄存器4.2.2工作方式寄存器工作方式寄存器(TMOD)(89H)用于设置定时/计数器的工作方式,低4位用于T0,高4位用于T1。其格式如下:

1)GATE:门控位。GATE=0时,若软件使TCON中的TR0或TR1设置为“1”,则启动定时/计数器工作;GATE=1时,当软件使TR0或TR1设置为“1”,同时外部中断引脚INT0或INT1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0或INT1引脚为高电平这一条件。

2)C/T:定时/计数模式选择位。C/T=0为定时模式,C/T=1为计数模式。

3)M1M0:工作方式设置位。定时/计数器有4种工作方式,由M1M0进行设置。STC15系列单片机的方式0与传统MCS-51单片机不同,为16位自动重装定时/计数器,其他方式与传统MCS-51单片机相同,具体功能见表4.2。4.2定时/计数器的特殊功能寄存器4.2.2工作方式寄存器工作方式寄存器(TMOD)(89H)用于设置定时/计数器的工作方式,低4位用于T0,高4位用于T1。其格式如下:

1)GATE:门控位。GATE=0时,若软件使TCON中的TR0或TR1设置为“1”,则启动定时/计数器工作;GATE=1时,当软件使TR0或TR1设置为“1”,同时外部中断引脚INT0或INT1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0或INT1引脚为高电平这一条件。

2)C/T:定时/计数模式选择位。C/T=0为定时模式,C/T=1为计数模式。

3)M1M0:工作方式设置位。定时/计数器有4种工作方式,由M1M0进行设置。STC15系列单片机的方式0与传统MCS-51单片机不同,为16位自动重装定时/计数器,其他方式与传统MCS-51单片机相同,具体功能见表4.2。4.2定时/计数器的特殊功能寄存器4.2.2工作方式寄存器工作方式寄存器(TMOD)(89H)用于设置定时/计数器的工作方式,低4位用于T0,高4位用于T1。其格式如下:

1)GATE:门控位。GATE=0时,若软件使TCON中的TR0或TR1设置为“1”,则启动定时/计数器工作;GATE=1时,当软件使TR0或TR1设置为“1”,同时外部中断引脚INT0或INT1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0或INT1引脚为高电平这一条件。

2)C/T:定时/计数模式选择位。C/T=0为定时模式,C/T=1为计数模式。

3)M1M0:工作方式设置位。定时/计数器有4种工作方式,由M1M0进行设置。由于TMOD不能进行位寻址,因此只能用字节指令设置定时/计数器的工作方式。CPU复位时TMOD所有位清“0”,工作在非门控定时器方式0状态。STC15系列单片机的方式0与传统MCS-51单片机不同,为16位自动重装定时/计数器,其他方式与传统MCS-51单片机相同,具体功能见表4.2。4.2.3辅助寄存器AUXR

STC15系列单片机是1T的8051单片机,为兼容传统8051单片机,定时器0、定时器1和定时器2复位后是传统8051的速度,即12分频,这是为了兼容传统8051单片机。但也可不进行12分频,通过设置新增加的特殊功能寄存器AUXR,将T0、T1、T2设置为1T。AUXR格式如下:T0x12:定时器0速度控制位。取值0时定时器0是传统8051速度,即12分频;取值1时定时器0的速度是传统8051的12倍,不分频。T1x12:定时器1速度控制位。取值0时定时器1是传统8051速度,即12分频;取值1时定时器1的速度是传统8051的12倍,不分频。UART_M0x6:串行口1模式0的通信速度设置位。取值0时串行口1模式0的速度是传统8051单片机串口的速度,即12分频;取值1时串行口1模式0的速度是传统8051单片机串行口速度的6倍,2分频。T2R:定时器2允许控制位。取值0时不允许定时器2运行;取值1时允许定时器2运行。4.2定时/计数器的特殊功能寄存器T2_C/T:控制定时器2用作定时器或计数器。取值0时用作定时器(对内部系统时钟进行计数);取值1时用作计数器(对引脚T2/P3.1的外部脉冲进行计数)。T2x12:定时器2速度控制位。取值0时定时器2是传统8051速度,即12分频;取值1时定时器2的速度是传统8051的12倍,不分频。如果串行口1或串行口2用T2作为波特率发生器,则由T2x12决定串行口1或串行口2是12T还是1T。EXTRAM:内部/外部RAM存取控制位。取值0时允许使用逻辑上在片外、物理上在片内的扩展RAM;取值1时,禁止使用逻辑上在片外、物理上在片内的扩展RAM。S1ST2:串行口1(UART1)选择定时器2作波特率发生器的控制位。取值0时选择定时器1作为串行口1(UART1)的波特率发生器;取值1时选择定时器2作为串行口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为独立定时器使用。T0CLKO/P3.5、T1CLKO/P3.4和T2CLKO/P3.0的时钟输出控制由INT_CLKO(AUXR2)寄存器的T0CLKO位、T1CLKO位和T2CLKO位控制。T0CLKO的输出时钟频率由定时器0控制,T1CLKO的输出时钟频率由定时器1控制,相应的定时器需要工作在定时器的模式0(16位自动重装载模式)或模式2(8位自动重装载模式),不允许相应的定时器中断,免得CPU反复进中断。T2CLKO的输出时钟频率由定时器2控制,同样不允许相应的定时器中断,免得CPU反复进中断。定时器2的工作模式固定为模式0(16位自动重项目4数字电子钟的设计117装载模式),在此模式下定时器2可用作可编程时钟输出。INT_CLKO(AUXR2)格式如下:T0CLKO:是否允许将P3.5/T1引脚配置为定时器0(T0)的时钟输出T0CLKO1允许将P3.5/T1引脚配置为定时器0(T0)的时钟输出T0CLKO;0不允许将P3.5/T1引脚配置为定时器0(T0)的时钟输出T0CLKO.T1CLKO:是否允许将P3.4/T0引脚配置为定时器1(T1)的时钟输出T1CLKO1允许将P3.4/T0引脚配置为定时器1(T1)的时钟输出T1CLKO;0不允许将

P3.4/T0引脚配置为定时器1(T1)的时钟输出T1CLKO。T2CLKO:是否允许将P3.0引脚配置为定时器2(T2)的时钟输出T2CLKO。1允许将P3.0引脚配置为定时器2的时钟输出T2CLKO;0不允许将P3.0引脚配置为定时器2的时钟输出T2CLKO4.2定时/计数器的特殊功能寄存器4.2.5定时器T0和T1的中断控制寄存器:IE和IP

1.中断允许寄存器IE

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器(IE)(A8H)控制的.IE的状态可通过程序由软件设定。某位设定为“1”,相应的中断源

中断允许;某位设定为“0”,相应的中断源中断屏蔽。CPU复位时,IE各位清“0”,禁止所有中断。IE各位的定义如下(标注STC15系列表示传统51没有相应功能):ET0:定时/计数器(T0)中断允许位。ET1:定时/计数器(T1)中断允许位。EA:CPU中断总允许位。2.中断优先级寄存器IPMCS-51单片机有两个中断优先级,因此可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器(IP)(B8H)中的相应位的状态来规定的。IP的状态由软件设定,某位设定为“1”,则相应的中断源为高优先级中断;某位设定为“0”,则相应的118单片机应用技术项目式教程———基于C51+Proteus仿真中断源为低优先级中断。单片机复位时,IP各位清“0”,各中断源同为低优先级中断。IP各位的定义如下(标注STC15系列表示传统51没有相应功能):PT0:定时/计数器(T0)中断优先级设定位。PT1:定时/计数器(T1)中断优先级设定位。注意:当定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装载模式)时,不需要设置EA=1,只需设置ET0=1就能打开T0的中断,此模式下的T0中断与总中断使能位EA无关。一旦此模式下的定时器/计数器0中断被打开后,该定时器/计数器0中断优先级就是最高的,它不能被其他任何中断所打断(不管是比定时器/计数器0中断优先级低的中断还是比其优先级高的中断,都不能打断此时的定时器/计数器0中断),而且该中断打开后既不受EA/IE7控制也不再受ET0控制,即清零EA或ET0都不能关闭此中断。4.2定时/计数器的特殊功能寄存器4.3定时/计数器0的工作模式STC15单片机和传统MCS-51单片机定时/计数器T0有4种工作方式(方式0、1、2、3),T1有3种工作方式(方式0、1、2),此外T1还可作为串行通信接口的波特率发生器,若错将T1设置为方式3,则T1将停止工作。下面以定时/计数器T0为例进行介绍。1.方式0当TMOD的M1M0为“00”时,定时/计数器工作于方式0,传统MCS-51单片机方式0为13位计数器,由TL0的低5位(高3位未用)和TH0的8位组成。13位定时/计数器是为了与Intel公司早期的产品MCS-48系列兼容,该系列已过时,且计数初值装入易出错,所以在实际应用已不再使用。4.3定时/计数器0的工作模式STC15系列单片机对传统MCS-51单片机进行了创新设计,模式0下定时器/计数器作为可自动重装载的16位计数器,具体结构图如图4.2所示。

4.3定时/计数器0的工作模式

定时器0有两个隐藏的寄存器RL_TH0和RL_TL0。RL_TH0与TH0共用同一个地址,RL_TL0与TL0共用同一个地址。当TR0=0即定时器/计数器0被禁止工作时,对TL0写入的内容会同时写入RL_TL0,对TH0写入的内容也会同时写入RL_TH0。当TR0=1即定时器/计数器0被允许工作时,对TL0写入内容,实际上不是写入当前寄存器TL0中,而是写入隐藏的寄存器RL_TL0中;对TH0写入内容,实际上也不是写入当前寄存器TH0中,而是写入隐藏的寄存器RL_TH0。这样可以巧妙地实现16位重装载定时器。当读TH0和TL0的内容时,所读的内容就是TH0和TL0的内容,而不是RL_TH0和RL_TL0的内容。当定时器0工作在模式0(TMOD[1∶0]/[M1,M0]=00B)时,[TL0,TH0]的溢出不仅置位TF0,而且会自动将[RL_TL0,RL_TH0]的内容重新装入[TL0,TH0]。当T0CLKO/INT_CLKO0=1时,P35/T1引脚配置为定时器0的时钟输出T0CLKO。输出时钟频率=T0溢出率/2。如果C/T=0,定时器/计数器T0对内部系统时钟计数,则:T0工作在1T模式(AUXR7/T0x12=1)时的输出时钟频率=(SYSclk)/(65536-[RL_TH0,RL_TL0])/2;T0工作在12T模式(AUXR7/T0x12=0)时的输出时钟频率=(SYSclk)/12/(65536-[RL_TH0,RL_TL0])/2。如果C/T=1,定时器/计数器T0是对外部脉冲输入(P34/T0)计数,则输出时钟频率=(T0_Pin_CLK)/(65536-[RL_TH0,RL_TL0])/24.3定时/计数器0的工作模式2.方式1STC15系列单片机和传统51单片机在方式1上功能基本相同,STC15系列单片机相比传统51单片机主要是对系统时钟,增加了1T模式。当TMOD的M1M0为“01时,定时/计数器工作于方式1,其逻辑结构如图4.3所示。4.3定时/计数器0的工作模式

3.方式2当M1M0为“10”时,定时/计数器工作于方式2,其逻辑结构如图4.4所示(STC15系列单片机和传统51单片机在方式2上功能基本相同,STC15系列单片机相比传统51单片机主要是对系统时钟,增加了1T模式,同时增加了T0CLKO输出)。

4.方式3本书讲解STC15系列单片机的方式3,传统51单片机定时器0的方式3,请参考相关书籍。对定时器/计数器1,在方式3时,定时器1停止计数,效果与将TR1设置为0相同。对定时器/计数器0,其工作方式3与工作方式0是一样的(图4.5是定时器方式3的原理图,与方式0是一样的)。唯一不同的是:当定时器/计数器0工作在方式3时,只需允许ET0/IE.1(定时器/计数器0中断允许位),不需要允许EA/IE.7(总中断使能位),就能打开定时器/计数器0的中断,此方式下的定时器/计数器0中断与总中断使能位EA无关;一旦工作在方式3下的定时器/计数器0中断被打开(ET0=1),那么该中断是不可屏蔽的,其优先级是最高的,即该中断不能被任何中断所打断,而且该中断打开后既不受EA/IE.7控制也不再受ET0控制,当EA=0或ET0=0时都不能屏蔽此中断。故将此方式称为不可屏蔽中断的16位自动重装载模式,该方式可用于实时操作系统中的节拍定时器。4.4应用定时/计数器输出方波和矩形波MCS-51单片机的定时/计数器可以用于较精确的延时和计数,对于延时的应用,可遵循以下几个方面进行应用设计。1)确定延时时间。2)定时/计数器初始化。定时/计数器初始化主要包括:1)确定定时/计数器的工作方式。

2)计算定时/计数器的初值。

3)在主程序中进行初始化设计,包括定时/计数器的初始化和中断初始化,即对TH0、TL0或TH1、TL1,TMOD、TCON、IP、IE赋值。

4)中断服务程序设计。下面以输出方波和矩形波为例具体讲解定时/计数器的应用。4.4应用定时/计数器输出方波和矩形波

在实际应用中,需要产生一定频率的波形,在本书中,方波指占空比为50%的波形,矩形波指占空比可变的波形,本节主要讲解方波的实现。对于方波的实现,STC15系列单片机可以使用两种方法实现。方法1是使用定时/计数器方式0或方式2的可编程分频输出实现,但该方法输出引脚固定,不适用传统的MCS-51单片机;方法2是应用定时/计数器的延时实现,输出引脚适用于所有I/O引脚,也适用传统MCS-51单片机。1.可编程分频输出生成的方波

对于可编程分频输出生成的方波,本书以定时/计数器0方式0为例,讲解相关应用方法,其他定时器(如T1~T4)的使用方法,可参考相关书籍。

定时/计数器0方式0可编程分频输出方波的频率:

1T模式,输出时钟频率=(SYSclk)/(65536-[RL_TH0,RL_TL0])/2;

12T模式,输出时钟频率=(SYSclk)/12/(65536-[RL_TH0,RL_TL0])/2。

图4.6为输出方波的图形,周期为T,每延时2/T时间输出翻转,方波的

图4.6周期为T的方波周期T/2=(65536-[RL_TH0,RL_TL0])∗机器周期;

输出频率f∗2=1/((65536-[RL_TH0,RL_TL0])∗机器周期);

1T模式,f=(SYSclk)/(65536-[RL_TH0,RL_TL0])/2;

12T模式,f=(SYSclk)/12/(65536-[RL_TH0,RL_TL0])/2。

由于定时/计数器是16位计数器,因此对于1T模式,输出频率范围为SYSclk/(65536∗2)~SYSclk/2;对于12T模式,输出频率范围为SYSclk/(65536∗24)~SYSclk/24。【例4.1】产生一个50Hz的方波,此方波由P3.5引脚输出,晶振频率为12MHz,12T模式。解题思路:输出引脚P3.5为可编程分频输出引脚,方波频率f=50Hz,在输出频率范围之内,因此可以用可编程分频输出实现。编程步骤如下:(1)确定定时器初值:f=(SYSclk)/12/(65536-[RL_TH0,RL_TL0])/2,f=50Hz,SYSclk=12MHz65536-[RL_TH0,RL_TL0]=500000/50[RL_TH0,RL_TL0]=65536-10000;在C语言编程中,TL0为低8位,TL0=65536-10000;TH0为高8位,TH0=(65536-10000)>>8;(2)求T0的方式控制字TMOD:GATE=0,C/T=0,M1M0=00,可取方式控制字为TMOD=00H,即T0的方式0。(3)12T模式为默认模式(上电复位后的模式),可以不用设置。(4)INT_CLKO(AUXR2)寄存器设置。对于可编程分频输出,需要设置INT_CLKO(AUXR2)寄存器的D0为1,由于INT_CL⁃KO(AUXR2)寄存器不能位寻址,只能对字节赋值。方法1:直接对寄存器赋值,即INT_CLKO=0x1;但这种方法影响其他位的设置,因此需要对所有位都设置后统一赋值;方法2:使用与、和、或设置的方法,对某一位赋值,如果对n位置1,则INT_CLKO|=(1<<n);如果对n位清0,则INT_CLKO&=!(1<<n);本节中使用方法2实现,INT_CLKO|=(1<<0);(5)启动计数器。TR0=1;具体程序如下:2.延时实现方波使用延时实现方波,根据图4.7,方波的周期为T,每延时2/T时间输出翻转,实现周期为T的方波。该方法同时适合传统MCS-51单片机。为了兼容传统MCS-51单片机,实例使用定时/计数器0的方式1来实现,即12T模式(注:如果采用STC15系列单片机,推荐使用方式0实现)。在实际应用中,中断方式相较于查询方式有更高的效率,因此采用中断方式实现延时。【例4.2】产生一个100Hz的方波(使用定时/计数器0方式1),此方波由P1.0引脚输出,晶振频率为12MHz。解题思路:方波频率f=100Hz,周期T=1/100s=0.01s,如果让定时器计满0.005s,P1.0输出“0”,再计满0.005s,P1.0输出“1”,就能满足要求,此题转化为由定时器产生0.005s定时的问题。实现方法如下:(1)查询方式:通过查询T0的溢出标志TF0是否为“1”,判断定时时间是否已到。当TF=1时,定时时间已到,对P1.0取反操作。其缺点是,CPU一直忙于查询工作,占用了CPU的有效时间。(2)中断方式:CPU正常执行主程序,一旦定时时间到,TF0=1向CPU申请中断,CPU响应了T0的中断,就执行中断程序,在中断程序里对P1.0进行取反操作。

(2)中断方式:思考:由于计数器是16位,延时时间有一定限制,如对于12MHz时钟,在12T模式下,最大延时时间为65.536ms,那如果需要延时时间超过65.536ms,程序需要怎样实现?思考:由于计数器是16位,延时时间有一定限制,如对于12MHz时钟,在12T模式下,最大延时时间为65.536ms,那如果需要延时时间超过65.536ms,程序需要怎样实现?4.4.2应用定时/计数器输出矩形波矩形波是占空比可变的波形,方波是特殊的矩形波,即占空比为50%的矩形波。对于矩形波,可以应用计算值和比较值相比较的方法来实现,具体实现可参考图4.7。在图4.7中,计数值和比较值相比较,当计数值小于比较值时,输出为0,大于或等于比较值时,输出为1(相反也可以)。最大计数值CNT∗T决定了矩形波的频率,比较值/计数值为矩形波的占空比,其中T为计一次数的时间,可以使用定时器中断实现,CNT决定了占空比的精度。由于计数和比较需要在定时器中断中实现,因此T最好至少要大于30个机器周期。【例4.3】利用定时/计数器(T0)的方式1,产生一个50Hz的矩形波,由P2.0引脚输出,12T模式,占空比20%,占空比精度到1%,晶振频率为12MHz。解题思路:由于占空比精度到1%,最大计数值CNT=100,矩形波频率f=50Hz,周期T=1/50s=0.02s,T=100∗t延时,t延时=0.02/100ms=0.2ms。程序定时器中断延时时间0.2ms,进一次中断,计数器加1,P2.0口初值为0,当计数值=比较值时,P2.0输出为1,当计数值等于最大计数值时,P2.0输出为0。

4.5LED数码管的结构和分类在单片机应用系统中,键盘和显示器是很关键的部件,是构成人机对话的一种基本设备。键盘能向计算机输入数据、传送命令,是人工干预计算机的主要手段。显示器则显示控制过程或结果。本节讲述显示器的工作原理、LED显示器的编码显示原理以及它们与单片机的接口技术。4.5.1显示器及其接口显示器是计算机的主要输出设备,它把运算结果、程序清单等以字符的形式显示出来,以供用户查阅。目前常用的显示器有数码管显示器(LED显示器)、液晶显示器(LCD显示器)等。下面详细介绍LED显示器的结构与工作原理:4.5LED数码管的结构和分类LED显示器的结构如图4.8a所示,由8个发光二极管按“日”字形排列,其中7个发光二极管组成“日”字形的笔画段,另一个发光二极管为圆点形状,安装在显示器的右下角作为小数点使用,分别控制各笔画段的LED,使其中的某些发亮,从而可以显示出0~9的阿拉伯数字符号以及其他能由这些笔画段构成的各种字符。LED显示器根据内部结构不同分为两种,一种是把所有发光二极管的阳极连在一起,称为共阳极数码管,如图4.8b所示;另一种是8个发光二极管的阴极连在一起,称为共阴极数码管,如图4.8所示。当某一二极管导通时,相应的字段发亮。这样,若干个二极管导通,就构成了一个字符。在共阴极数码管中,导通的二极管用“1”表示,其余的用“0”表示。这些“1”“0”数符按一定的顺序排列,就组成了所要显示字符的显示代码。例如,对于共阴极数码管来说,阳极排列顺序为h、g、f、e、d、c、b、a。这样,字符1的显示代码为00000110,字符F的显示代码为01110001,用十六进制表示分别为06H和71H。若要显示某一个字符,就在二极管的阳极按显示代码加高电平,阴极加低电平即可。显示七段码表见表4.

3。

从前面的学习知道,单片机的P0~P3口具有输入数据可以缓冲和输出数据可以锁存的功能,并且有一定的带负载能力。但一般I/O接口芯片的驱动能力是很有限的。在LED显示接口电路中,若输出口所能提供的驱动电流或吸收电流不能满足要求时,就需要增加LED驱动电路,特别是多段LED显示器更是如此。有两种形式的驱动电路:低电平有效驱动电路和高电平有效驱动电路。在低电平有效驱动电路中,当驱动管导通而使集电极处于低电平时,LED被正向导通而发光,驱动电路吸收LED工作电流。在高电平有效驱动电路中,当驱动管截止而使集电极处于高电平时,LED导通而发光,驱动电路为LED提供工作电流。驱动电路中的R为限流电阻,通常取数百欧。限流电阻R的计算公式如下:R=(𝑉𝑖−𝑓−𝑐𝑠)/𝐼_𝑓式中,𝑉_𝑖为输入信号电平;𝑉_𝑓为输入端发光二极管的电压降,通常是1.2~2.5V;𝑉_𝑐𝑠为驱动器的电压降,通常是0.1~0.5V;𝐼_𝑓为发光二极管的工作电流,通常是2~10mA。在单片机应用系统中,LED显示器的显示方法有两种:静态显示法和动态扫描显示法。

4.5.2数码管的静态显示所谓静态显示,就是每一个显示器各笔画段都要独占具有锁存功能的输出口线,CPU把要显示的字形代码送到输出口上,就可以使显示器显示所需的数字或符号,此后,即使CPU不再去访问它,因为各笔画段接口具有锁存功能,显示的内容也不会消失。静态显示法的优点是显示程序十分简单,显示亮度大,由于CPU不必经常扫描显示器,因此节约了CPU的工作时间。但静态显示也有其缺点,主要是占用的I/O接口线较多,硬件成本较高。所以静态显示法常用在显示器数目较少的应用系统中。LED采用静态显示与单片机接口时,共阴极或共阳极点连接在一起接地或接高电平。

每个显示位的段选线与一个8位并行口线对应相连,只要在显示位上的段选线上保持段码电平不变,则该位就能保持相应的显示字符。这里的8位并行口可以直接采用并行I/O接口芯片,也可以采用串入/并出的移位寄存器或者其他具有三态功能的锁存器等。

考虑到若采用并行I/O接口,占用I/O资源较多,因此静态显示器接口中通常采用串行口,设置为方式0输出方式,外接74HC595移位寄存器,构成显示器接口电路。下面介绍采用BCD/7段显示译码驱动芯片构成的静态显示接口电路,其特点是一个LED显示器仅占4条I/O口线,当一个并行I/O接口经过该译码显示驱动器时,可以连接两个LED显示器。

常用的BCD数码显示译码驱动芯片有两种类型,一种是适用于共阳极显示器,如74LS47;另一种适用于共阴极显示器,如74LS49。图4.9是采用共阳极显示器的静态显示器接口电路。单片机输出控制信号由P2.0和WR合成,当二者同时为“0”时,或门输出为0,将P0口数据锁存到74LS273中,口地址为FEFFH。输出线的低4位和高4位分别接BCD/7段显示译码驱动器74LS47。74LS47能使显示器显示出由I/O接口送来的BCD码数和某些符号。

具体显示程序也非常简单,如欲在两个显示器上显示两位十进制数35,仅需将该数送往显示口地址即可。

【例4.4】在单片机最小系统的基础上设计4位共阳数码管显示“1、2、3、4”。程序实现如下:

动态扫描显示法是单片机应用系统中最常用的显示方法之一。它是把所有显示器的8个笔画段a~h的各段同名端互相并接在一起,并把它们接到字段输出接口上。为了防止各个显示器同时显示相同的数字,各个显示器的公共端COM还要受控制信号控制,即把它们接到位输出接口上。这样,对于一组LED显示器需要有两组信号来控制,一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是输出接口输出的控制信号,来选择第几位显示器工作,称为位码。在这两组信号的控制下,可以一位一位地轮流点亮各个显示器,显示各自的数码,以实现动态扫描显示。

由于动态扫描方法要求每个数码管显示时间基本相同,每个数码管显示的内容都是在中断服务程序中实现,中断服务程序主要由以下程序组成:1)计数器重赋初值(对于自动重载方式,不需要)。2)在对应数码管显示相应的数值。3)计数值+1,当计数值=数码管个数时,计算值回0。

4.5.4基于查表法动态显示实例本节通过实例讲解数码管动态扫描编程方法,实例具体要求如下:1)对4位数码管(共阳极)编程,实现从0000~9999十进制计数器,每计一次数时间为1s。2)4位数码管与单片机的连接如图4.10所示,该图用Proteus软件所画,未考虑硬件的驱动能力,未加限流电阻和驱动元件,只用于验证程序功能正确性。

对4位数码管实现从0000~9999十进制计数器,1s延时和动态扫描的延时都需要使用定时器实现,整个程序的实现框图包括主程序框图和中断服务程序框图。(1)主程序框图计数器的主程序框图如图4.11所示,其实现过程如下:

1)定时器初始化,实现1ms的延时,使用定时/计数器0方式1实现。2)变量赋初值,计数变量清0,cnt1ms表示1ms计数一次,cnt是0~9999计数器变量,cntbit是表示数码管个数的计数器,由于程序中使用4位数码管,因此该变量实现四进制计数器,对应4个数码管。cnt和cnt1ms是unsignedint类型变量,cntbit为unsignedchar类型变量,三个变量可以定义时直接清0;显示缓冲区赋初值,程序上电显示0000。3)判断计时是否到1s,到1s继续执行。4)cnt1ms清0。5)cnt计数器加1,并加到10000时回0。6)取cnt的个位、十位、百位和千位到显示缓冲区,以便在中断服务程序中显示。

(2)中断服务程序框图4位数码管计数器的中断服务程序框图如图4.12所示,其实现过程如下:1)重赋初值

(2)中断服务程序框图4位数码管计数器的中断服务程序框图如图4.12所示,其实现过程如下:1)重赋初值2)在对应数码管显示相应的数值,不同的计数值,表示相应的数码管亮,并显示相应的数值,如cntbit=0,表示第0个数码管亮,显示计数器的个位值,cntbit=1,表示第1个数码管亮,显示计数器的十位值,以此类推。程序实现可以采用两种方法。方法1:

使用switchcase语句,根据不同的cntbit值,对相应的数码管赋值,这种方法由于代码量较大,运行时间长,不建议使用;方法2:采用查表法,设对应数码管的位码和段码,直接赋值,这种方法代码量小,运行时间短,因此一般使用该方法实现。具体实现如下

3)四进制计数器,使用对4求余数,实现四进制计数器。(3)程序清单

程序代码如下:

3)四进制计数器,使用对4求余数,实现四进制计数器。(3)程序清单

程序代码如下:

3)四进制计数器,使用对4求余数,实现四进制计数器。(3)程序清单

程序代码如下:

4.6数字电子时钟设计4.6.1项目功能描述设计数字电子时钟,具有时、分、秒计数显示功能,以24小时循环计时,并用数码管显示,具体要求如下:1)用8个数码管实现数字电子钟,其中6个用于实现时、分、秒显示,2个数码管显示“-”。2)分钟、秒为六十进制计数,小时为二十四进制计数。3)8个数码管用动态扫描方式连接。4)单片机使用STC15W4K32S4芯片。5)用CAD软件(AltiumDesigner)绘制硬件原理图,并根据原理图绘制Proteus仿真电路图,并用Proteus仿真。

4.6.1项目功能描述设计数字电子时钟,具有时、分、秒计数显示功能,以24小时循环计时,并用数码管显示,具体要求如下:1)用8个数码管实现数字电子钟,其中6个用于实现时、分、秒显示,2个数码管显示“-”。2)分钟、秒为六十进制计数,小时为二十四进制计数。3)8个数码管用动态扫描方式连接。4)单片机使用STC15W4K32S4芯片。5)用CAD软件(AltiumDesigner)绘制硬件原理图,并根据原理图绘制Proteus仿真电路图,并用Proteus仿真。

4.6.2项目硬件电路设计数字电子钟的硬件由单片机电路、电源电路、复位电路、晶振电路、数码管显示电路及数码管驱动电路组成,具体框图如图4.13所示。

4.数码管显示电驱动电路由于传统51系列单片机的灌电流能力强,对数码管的段选端一般为低电平有效,因此多位数码管选择共阳极数码管,由于点亮一位数码管的电流较大,一般超过40mA,需要加驱动电路,采用PNP晶体管驱动,具体电路如图4.16所示。在Proteus仿真电路图中,由于PNP晶体管仿真有问题,改用74HC04代替PNP晶体管。

数字电子钟的整体电路图及仿真图分别如图4.17和图4.18所示。

1)定时器初始化,实现1ms的延时,使用定时/计数器0方式1实现。2)变量赋初值,显示赋初值,计数变量清0,cnt1ms表示1ms一次计数,sec、min、和hour分别表示秒、分钟和小时计数器,cntbit是表示数码管个数的计数器,由于程序中使用8位数码管,因此该变

温馨提示

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

评论

0/150

提交评论