slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
项目六 数字时钟的设计 PowerPoint Presentation
Download Presentation
项目六 数字时钟的设计

Loading in 2 Seconds...

play fullscreen
1 / 60

项目六 数字时钟的设计 - PowerPoint PPT Presentation


  • 113 Views
  • Uploaded on

项目六 数字时钟的设计. [ 项目学习目标 ]. 一、知识目标 1. 知道定时器 / 计数器的工作原理及 4 种工作方式。 2. 掌握数码管动态显示方法,理解键盘识别过程。 3. 知道程序分析的方法,可以绘制主程序流程图、中断程序及子程序的流程图,并能根据流程图编写程序。. 二、技能目标 1. 会利用定时器 / 计数器进行时间控制,会计算定时 / 计数初值。 2. 能理解二十四小时电子时钟程序并会调试。 3. 会用软件模拟方式调试程序。 4. 能正确建立单片机的软件环境,并可以正确进行硬件仿真,观察结果。. 任务一 60 秒秒表设计. 任务介绍

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '项目六 数字时钟的设计' - habib


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
项目六 数字时钟的设计

[项目学习目标]

  • 一、知识目标
  • 1.知道定时器/计数器的工作原理及4种工作方式。
  • 2.掌握数码管动态显示方法,理解键盘识别过程。
  • 3.知道程序分析的方法,可以绘制主程序流程图、中断程序及子程序的流程图,并能根据流程图编写程序。
slide2

二、技能目标

  • 1.会利用定时器/计数器进行时间控制,会计算定时/计数初值。
  • 2.能理解二十四小时电子时钟程序并会调试。
  • 3.会用软件模拟方式调试程序。
  • 4.能正确建立单片机的软件环境,并可以正确进行硬件仿真,观察结果。
slide3

任务一 60秒秒表设计

  • 任务介绍
  • 用单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始,秒计数用数码管显示。数码管采用动态显示方式,由P0口接8个数码管的八段,即JD12,P2口接8个数码管的位选段,即JD11。
slide4

活动1:了解定时器/计数器相关概念

  • 89S51单片机内部定时器/计数器是由两个16位的(加1)定时器/计数器T0、T1和两个特殊功能寄存器TMOD与TCON组成。
  • T0、T1又可分成四个独立的8位计数器即TH0、TL0、TH1、TL1,用于存放定时器/计数器的初值。
  • TMOD为工作方式寄存器,主要用来设置定时器/计数器的工作方式;
  • TCON为控制寄存器,主要用来控制定时器/计数器的启动与停止。
slide5

一、预置数计数法

  • 溢出:89S51单片机的计数器都是16位的,最大计数范伟是0~65535,当计数到65536时将产生溢出。
  • 任意定时和计数的实现:
  • 计数:要计5000个脉冲,就先放60535个,再来5000个,正好到65535个。
  • 定时:若每个脉冲是1us,则计满65536个脉冲需时65.536毫秒,如果只要计时10ms,即定时10000us,则只要在计数器里预先放进55536就可以了。

例:若定时时间为50ms,可以先定时10ms,计5遍即可,其预置常数仍为(65535-10000)。

  • 点睛
    • 1.89S51有两个16位的定时/计数器,T0和T1。
      • 2.这两个定时/计数器本质上都是计数器:对外部事件脉冲计数就作为计数器使用,对内部的机器周期计数就作为定时器使用。
      • 3.这两个定时/计数器都是加法计数器,计满后就会溢出,溢出时产生中断标志。
slide6

二、工作方式控制寄存器TMOD(89H)

  • TMOD用于控制T0 和T1 的工作方式,其组成见表6-1-1所示。TMOD被分成了两部分,每部分4位,分别控制T1和T0。
slide7

1.工作方式选择位:M1 、M0

  • M1、M0用来选择工作方式,共有四种工作方式,对应不同的计数范围,如表6-1-2所示。
slide8

2.计数/定时方式选择位:

  • =0,设置为定时工作方式,对内部机器脉冲计数,作定时器用。
  • =1,设置为计数工作方式,对外部事件脉冲计数,作为计数器用,负跳变有效。
  • Tips
    • 一个定时/计数器同一时刻要么作定时用要么作计数用,不能同时使用。
slide9

3.门控位:GATE

  • GATE=0,只要用指令对TR0(或TR1)置1就可以启动定时器。
  • GATE=1,只有在(或)引脚为1,且用指令对TR0(或TR1)置1才能启动定时器工作。
  • 例:使用定时器T0,并使T0工作在方式1。

MOV TMOD #00000001B

或MOV TMOD #001H

若要选择定时器T1,并使之工作在方式1,应如何设置TMOD?

slide10

三、定时/计数器控制寄存器TCON(88H)

  • TCON用于控制定时器的启动、停止以及反映定时器的溢出和中断情况,其组成见表6-1-3所示。TCON也被分成两部分,高4位用于定时/计数器,低4位则用于中断。
slide11

四、计数寄存器

  • TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位存放在TH中,低8位存放在TL中。计数寄存器是用来存放计数值得,预置初值也是放在这个寄存器中的。
slide12

五、定时/计数器中断

  • AT89S51单片机中共有3类5个中断源,即两个外中断INT0与INT1(由P3.2和P3.3引入)、2个定时中断(定时器T0、定时器T1)和一个串行中断。
  • 每个中断源对应一个中断标志位,当某个中断源有中断请求时,相应的中断标志位置1,外中断和定时中断源的中断标志位在控制寄存器TCON中
slide13

中断允许控制寄存器IE,用来控制中断的允许或禁止,如表6-1-4所示中断允许控制寄存器IE,用来控制中断的允许或禁止,如表6-1-4所示

slide14

六、定时/计数器中断的应用步骤

1.初始化

(1)确定工作方式,并写入TMOD特殊功能寄存器中。MOV TMOD,……。

(2)将计算出的定时或计数初始值装入TL0、TH0中。

MOV TH0,……

MOV TL0,……

(3)启动定时/计数器工作。

(4)启动定时/计数器:SETB TR0

(5)开中断:SETB ET0

SETB EA

slide15

2.提供中断入口地址

  • 5个中断源的入口地址见表6-1-5所示,单片机根据中断入口地址,寻找中断处理程序。
slide16

3.编写中断服务程序

  • 保护现场、恢复现场。
  • 重新赋初值(工作方式2除外)。
slide17

活动2:学习相关指令

一、中断返回指令

  • RET用于子程序返回,而RETI用于中断程序返回。

二、判位变量转移指令

  • 1.JB bit,rel
  • 指令说明:若bit位的值为“1”,则转移到标号rel处执行,否则就顺序执行。
  • 2. JNB bit,rel
  • 指令说明:该指令与上条指令相反,若bit位的值为“0”,则转移到标号rel处执行,否则就顺序执行。
slide18

三、除法指令

  • 指令格式:DIV AB
  • 功能是将A中的8位无符号整数除以B中的8位无符号整数,所得的整数部分放在A中,余数放在B中。
  • 如果原来B中的内容为0,则A和B中的内容不定,并使标志位OV=1,表明除法没有意义。
  • 例如:(A)=06H,(B)=04H,执行指令DIV AB后,A中的值为01H,B中的值为02H。
slide19

活动3:任务分析

一、硬件电路

slide20

电路分析:

  • 通过单片机的P0口输出字形码给JD12,控制数码管显示某一字形。数码管的公共端JD11由单片机的P2口输出的字位码控制。硬件电路连接后,数码管显示的字形是由单片机P0口输出的字形码确定,而哪个数码管点亮是由单片机P2口输出的字位码确定的。
slide21

二、任务分析

  • 本任务是60秒秒表计时设计,可分为两部分完成。
  • 1.时钟部分
  • 为了能够精确计时,采用单片机内部的定时器来进行定时,一旦设定的定时时间到,则产生中断申请,单片机CPU去处理,实现时间的计数。这部分功能主要是通过软件编程实现。

2.数码管部分

  • 使用显示子程序进行2位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。
slide22

三、程序流程图

1. 主程序流程图

slide24

四、程序设计

  • 1.存储单元分配
  • 30H单元:秒计数单元

31H单元:5ms计数单元

slide25

2.主程序设计

START: MOV SECOND,#00H ;秒计数初始化

MOV TCOUNT,#00H ;5ms计数初始化

MOV TH0,#0ECH ;定时器T0的初始化

MOV TL0,#78H

MOV TMOD,#01H ;设置T0工作方式

SETB EA ;开启T0中断并启动T0

SETB ET0

SETB TR0

SJMP $

slide26

CONV: MOV A,SECOND ;转换秒为BCD码,并查表转换为七段码

MOV B,#10 ;将转换得到的秒十位和秒个位七段码分别送P0

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,# 0FD H ;开启秒十位显示数码管

MOV P0,A ;显示秒十位数

LCALL DELAY1 ;调用显示延时子程序

MOV A,B

MOVC A,@A+DPTR

MOV P2,# 0FE H ;开启秒个位显示数码管

MOV P0,A ;显示秒个位数

LCALL DELAY1

RET

  • 3.数码管显示子程序CONV
slide27

4. T0中断服务程序

T0INT: LCALL CONV ;数码管显示

MOV TH0,#0ECH ;T0重装初值

MOV TL0,#78H

INC TCOUNT ;5ms计数单元加1

MOV A,TCOUNT

CJNE A,#200,NEXT ;5ms计数单元为200(即1S),则将其清0,同时 秒计数单元加1

MOV TCOUNT,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEXT ;秒计数单元为60,则秒计数单元清0

MOV SECOND,#00H

NEXT: RETI

slide28

活动4:任务实施

一、建立软件环境

  • 1.建立新工程、源文件
  • 照前面介绍的方法新建工程“任务一”和源文件“任务一.a”,并将此文件添加到项目中。
  • 2.编写程序(见教材154页)
  • 3.编译程序
slide29

二、硬件仿真

  • 1.硬件连接
  • 将仿真器的仿真头插入实验箱单片机紧锁插座中,并用扁平数据线连接单片机P0口与八位动态LED数码管段码模块JD12。用扁平数据线连接单片机P2端口与八位动态LED数码管位码模块JD11。
slide30

2.参数设置

  • 参照前面所讲知识,对相关参数进行设置。
  • 3.硬件仿真
  • 程序调试无误后,全速运行,观察数码管显示情况。
slide31
作业

P178:

1、2、3、4、6、7

slide32

任务二 按键计数的控制

任务介绍:

本任务通过单片机控制外围设备,实现对按键次数的计数,并将计数结果通过数码管显示,计数范围0~99。

slide33

活动1:任务分析

一、任务分析

本任务中除了使用两个数码管对计数次数进行动态显示外,还要对按键次数识别,主要分为以下几个模块。

1.数码管部分

本任务中2位数码管的显示采用动态扫描方法实现。

2.按键部分

主要通过软件进行按键的识别、去抖动,有按键按下,则数码管显示的按键次数加1。

slide35

活动2:电路的硬件连接

本任务中数码管的显示采用动态扫描方法,由P0口接8个数码管的八段,即JD12,P2口接8个数码管的位选段,即JD11。P0口输出数码管的字形码,P2口输出数码管的字位码。接于P3.7的1个按键K0作为计数按键,每按一次K0数码管显示的计数次数加1,计数次数范围为00~99.

slide36

活动3:程序设计

一、存储单元分配

二、主程序设计

主程序中用到的一些存储单元的初始化,T0的初始化和按键扫描。首先进行存储单元初始化,按键次数初始化,将按键次数计数单元30H清0。然后调用数码管显示数据转换子程序和数码管动态显示子程序,最后进行K0键的扫描。

30H单元:按键次数计数单元

slide37

START:

MOV COUNT,#00H ;按键次数计数单元30H清0

MOV TH0,#0ECH ;T0初始化

MOV TL0,#78H

MOV TMOD,#01H ;设置T0工作方式

SETB EA ;开中断并启动T0

SETB ET0

SETB TR0

REL: JB P3.7,REL ;按键识别,按键去抖动

LCALL DELAY1

JB P3.7,REL

JNB P3.7,$ ;等待按键释放

INC COUNT ;按键次数加1

MOV A,COUNT

CJNE A,#100,LL ;若按键次数到100,清0

MOV COUNT,#00H

LL: SJMP REL ;继续扫描按键

slide38

三、数码管显示子程序CONV

CONV: MOV A, COUNT ;转换计数次数为BCD码,并查表转 换为七段码

MOV B,#10 ;将转换得到的计数次数的十位和技术次数的个位七段码分别送P0口

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,# 0EF H ;开启计数次数十位显示数码管

MOV P0,A ;显示计数次数十位数

LCALL DELAY1 ;;调用显示延时子程序

MOV A,B

MOVC A,@A+DPTR

MOV P2,# 0BF H ;开启计数次数个位显示数码管

MOV P0,A ;显示计数次数个位数

LCALL DELAY1

RET

slide39

四、T0中断服务程序

T0INT: LCALL CONV ;数码管显示

MOV TH0,#0ECH ;T0重装初值

MOV TL0,#78H

RETI

slide40

活动4:任务实施

一、建立软件环境

1.建立新工程、源文件

照前面介绍的方法新建工程“任务二”和源文件“任务二.a”,并将此文件添加到项目中。

2.编写程序(见教材162页)

3.编译程序

slide41

二、硬件仿真

1.硬件连接

将仿真器的仿真头插入实验箱单片机紧锁插座中,并用扁平数据线连接单片机P0口与八位动态LED数码管段码模块JD12。用扁平数据线连接单片机P2端口与八位动态LED数码管位码模块JD11,用导线连接单片机的P3.7引脚与独立按键K0.

slide42

2.参数设置

参照前面所讲知识,对相关参数进行设置。

3.硬件仿真

程序调试无误后,全速运行,观察按键每按下一次数码管的显示数字递增的现象。

slide43
作业

P178:

5

slide44

任务三 24h数字时钟的设计

任务介绍:

用单片机设计一个数字电子钟,由四个按键S1、S2、S3、S4进行当前时间的调整,四个按键采用独立按键,S1代表时间调整开始键,按下S1后方可进行时间调整;S2、S3分别调整““时”、“分”,每按一下相应的小时数、分钟数加1;S4代表时间调整退出键,按下S4后退出时间调整,数字时钟继续计时。用8个数码管显示当前时间,开机时显示00-00-00,开始计时,显示范围为00-00-00到23-59-59,8位数码管采用动态显示方式。

slide45

活动1:任务分析

一、任务分析

  • 本任务要求比较多,我们把这个比较复杂的项目,分解为多个简单的小项目来完成,可分为以下几个小项目:

1.时钟部分

  • 为了能够精确计时,本任务采用单片机内部的定时器/计数器T0来进行定时。

2.数码管部分

  • 使用显示子程序进行8位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。显示如图6-3-1所示。
  •  3.按键部分
  • 按键部分采用4个独立按键完成不同的按键功能,本任务主要通过软件进行按键的识别、去抖动,有按键按下,则执行相应的功能。
slide46

二、程序流程图

1.主程序流程图

slide47

2.时间调整子程序

  • 当按键S1时,进入时间调整子程序,T0停止工作,进行“时”、“分”的时间调整,当按键S4时退出时间调整,重新启动T0,回到主程序。流程图如图6-3-3所示。
slide48

3.时钟程序流程图

时钟程序在本任务中利用中断程序实现精确计时,其流程图见图6-3-4所示。

slide49

活动2:电路的硬件连接

本任务中数码管的显示采用动态扫描方法,P0口接数码管段选端JD12,P2口接数码管的位选段JD11。接于P1.0~P1.3的4个按键是S1~S4为当前时间调节按键, S1为时间调整开始键,S2为小时调节键,S3为分钟调节键,S4为退出时间调整状态;按下S1后进入时间调整状态,每按一次S2键小时加1,每按一次S3键分钟加1,按下S4键退出时间调节状态,继续计时。

slide50

活动3:程序设计

一、存储单元分配

30H单元:秒个位显示单元

31H单元:秒十位显示单元

32H单元:“—”字形码(BFH)

33H单元:分钟个位显示单元

34H单元:分钟十位显示单元

35H单元:“—”字形码(BFH)

36H单元:时个位数显示单元

37H单元:时十位数显示单元

38H单元:秒计数单元

39H单元:分钟计数单元

3AH单元:小时计数单元

3BH单元:5ms计数单元

slide51

二、主程序设计

程序中用到的一些存储单元的初始化,T0的初始化和进行按键扫描。首先进行存储单元初始化,将数码管显示单元30H~35H赋“00-00-00”字形数据,将时间计数单元38H~3BH清0。然后进行T0的初始化,设置T0的功能、工作方式及启动方式,给T0(定时5ms)赋初值,开启T0中断及启动T0开始工作。之后进行S1键(时间调节)扫描。

slide52

START: MOV SECOND,#00H ;给时、分、秒及5ms计数单元赋初值0

MOV HOUR,#00H

MOV MIN,#00H

MOV TCOUNT,#00H

MOV DISPBUF,#03FH ;8个数码管显示“00-00-00”字形数据

MOV DISPBUF+1,#03FH

MOV DISPBUF+2,#40H

MOV DISPBUF+3,#03FH

MOV DISPBUF+4,#03FH

MOV DISPBUF+5,#40H

MOV DISPBUF+6,#03FH

MOV DISPBUF+7,#03FH

MOV TH0,#0ECH ;T0赋初值

MOV TL0,#78H

MOV TMOD,#01H ;初始化T0工作于定时、方式1、软启动

SETB EA

SETB ET0

SETB TR0

MOV P2,#0FFH ;关闭所有数码管显示

REL: JB S1,REL ;判断按键S1

LCALL DELAY1

JB S1,REL

JNB S1,$

LCALL SETTIME ;扫描S1键,如S1按下则调用时间调节子程序

SJMP REL

slide53

三、数码管显示数据转换子程序CONV

由于时、分、秒计数单元存放的是二进制数,同样需要将时、分、秒计数单元中的二进制数转换为十进制数再进一步转化为七段码,存放于显示缓冲区30H~37H单元中,其中30H单元存放秒的个位七段码,31H单元存放秒的十位七段码,33H单元存放分的个位七段码,34H单元存放分的十位七段码, 36H单元存放时的个位七段码,37H单元存放时的十位七段码。程序见教材168页。

slide54

四、数码管动态显示子程序

NEX: MOV R0,#DISPBUF ; 将显示缓冲区首地址30H送R0

MOV R2,#8 ;循环次数8送R2、

MOV A,#0FEH ;数码管显示字位码初值FEH送A

SC:PUSH ACC

MOV A, @R0

MOV P0, A ;经P0口输出一字形码

POP ACC

MOV P2, A ;经P2口输出一字位码

LCALL DELAY1 ;调用显示延时子程序

RL A ;字位码左移一位

INC R0 ;显示缓冲区地址加1

DJNZ R2, SC ;8个数码管循环显示一次

RET

slide55

五、时间调节子程序

当S1键按下后,进入时间调节状态。首先使T0停止工作,将秒计数单元清0,调用显示子程序显示当前时间。然后扫描键盘,当S2键按下时,时计数单元加1,判断是否到24小时,如到24小时则将小时计数单元清0;当S3键按下时,分计数单元加1,判断是否到60分,如到60分则将分计数单元清0;当按下S4键,开启T0,子程序返回,退出时间调节状态。程序如教材170页。

slide56

六、T0中断服务程序

INT0X: LCALL CONV ;扫描数码管并显示时间

LCALL NEX

MOV TH0,#0ECH ;T0重装初值

MOV TL0,#78H

INC TCOUNT ;5ms计数单元加1

MOV A,TCOUNT

CJNE A,#200,NEXT ;5ms计数单元为200(即1S),则将其清0,同时秒计数单元加1

MOV TCOUNT,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEXT ;秒计数单元为60,则分计数单元加1,同时秒计数单元清0

MOV SECOND,#00H

INC MIN

MOV A,MIN

CJNE A,#60,NEXT ;分计数单元为60,则小时计数单元加1,同时分计数单元清0

MOV MIN,#00H

INC HOUR

MOV A,HOUR

CJNE A,#24,NEXT ;小时计数单元为24,则将其清0

MOV HOUR,#00H

NEXT: RETI

slide57

活动4:任务实施

一、建立软件环境

1.建立新工程、源文件

照前面介绍的方法新建工程“任务三”和源文件“任务三.a”,并将此文件添加到项目中。

2.编写程序(见教材171页)

3.编译程序

slide58

二、硬件仿真

1.硬件连接

将仿真器的仿真头插入实验箱单片机紧锁插座中,并用扁平数据线连接P0端口及数码管字形码输入端口JD12,用扁平数据线连接P2端口及数码管字位码输入端口JD11,用扁平数据线连接P1端口及独立按键部分.

slide59

2.参数设置

参照前面所讲知识,对相关参数进行设置。

3.硬件仿真

程序调试无误后,全速运行,观察上电后数码管的时间显示结果,按下S1键后时间停止,可以进行时间调整,再每按下一次S2键数码管秒显示加1,或每按下一次S3键数码管分显示加1,当按下S4键后退出时间调整,数码管继续计时显示。

slide60
作业

P178:

8、9、10