1 / 60

项目六 数字时钟的设计

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

habib
Download Presentation

项目六 数字时钟的设计

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. 一、预置数计数法 • 溢出: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.这两个定时/计数器都是加法计数器,计满后就会溢出,溢出时产生中断标志。

  6. 二、工作方式控制寄存器TMOD(89H) • TMOD用于控制T0 和T1 的工作方式,其组成见表6-1-1所示。TMOD被分成了两部分,每部分4位,分别控制T1和T0。

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

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

  9. 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?

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

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

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

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

  14. 六、定时/计数器中断的应用步骤 1.初始化 (1)确定工作方式,并写入TMOD特殊功能寄存器中。MOV TMOD,……。 (2)将计算出的定时或计数初始值装入TL0、TH0中。 MOV TH0,…… MOV TL0,…… (3)启动定时/计数器工作。 (4)启动定时/计数器:SETB TR0 (5)开中断:SETB ET0 SETB EA

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

  16. 3.编写中断服务程序 • 保护现场、恢复现场。 • 重新赋初值(工作方式2除外)。

  17. 活动2:学习相关指令 一、中断返回指令 • RET用于子程序返回,而RETI用于中断程序返回。 二、判位变量转移指令 • 1.JB bit,rel • 指令说明:若bit位的值为“1”,则转移到标号rel处执行,否则就顺序执行。 • 2. JNB bit,rel • 指令说明:该指令与上条指令相反,若bit位的值为“0”,则转移到标号rel处执行,否则就顺序执行。

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

  19. 活动3:任务分析 一、硬件电路

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

  21. 二、任务分析 • 本任务是60秒秒表计时设计,可分为两部分完成。 • 1.时钟部分 • 为了能够精确计时,采用单片机内部的定时器来进行定时,一旦设定的定时时间到,则产生中断申请,单片机CPU去处理,实现时间的计数。这部分功能主要是通过软件编程实现。 2.数码管部分 • 使用显示子程序进行2位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。

  22. 三、程序流程图 1. 主程序流程图

  23. 2. 时钟程序流程图

  24. 四、程序设计 • 1.存储单元分配 • 30H单元:秒计数单元 31H单元:5ms计数单元

  25. 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 $

  26. 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

  27. 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

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

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

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

  31. 作业 P178: 1、2、3、4、6、7

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

  33. 活动1:任务分析 一、任务分析 本任务中除了使用两个数码管对计数次数进行动态显示外,还要对按键次数识别,主要分为以下几个模块。 1.数码管部分 本任务中2位数码管的显示采用动态扫描方法实现。 2.按键部分 主要通过软件进行按键的识别、去抖动,有按键按下,则数码管显示的按键次数加1。

  34. 二、程序流程图

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

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

  37. 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 ;继续扫描按键

  38. 三、数码管显示子程序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

  39. 四、T0中断服务程序 T0INT: LCALL CONV ;数码管显示 MOV TH0,#0ECH ;T0重装初值 MOV TL0,#78H RETI

  40. 活动4:任务实施 一、建立软件环境 1.建立新工程、源文件 照前面介绍的方法新建工程“任务二”和源文件“任务二.a”,并将此文件添加到项目中。 2.编写程序(见教材162页) 3.编译程序

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

  42. 2.参数设置 参照前面所讲知识,对相关参数进行设置。 3.硬件仿真 程序调试无误后,全速运行,观察按键每按下一次数码管的显示数字递增的现象。

  43. 作业 P178: 5

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

  45. 活动1:任务分析 一、任务分析 • 本任务要求比较多,我们把这个比较复杂的项目,分解为多个简单的小项目来完成,可分为以下几个小项目: 1.时钟部分 • 为了能够精确计时,本任务采用单片机内部的定时器/计数器T0来进行定时。 2.数码管部分 • 使用显示子程序进行8位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。显示如图6-3-1所示。 •  3.按键部分 • 按键部分采用4个独立按键完成不同的按键功能,本任务主要通过软件进行按键的识别、去抖动,有按键按下,则执行相应的功能。

  46. 二、程序流程图 1.主程序流程图

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

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

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

  50. 活动3:程序设计 一、存储单元分配 30H单元:秒个位显示单元 31H单元:秒十位显示单元 32H单元:“—”字形码(BFH) 33H单元:分钟个位显示单元 34H单元:分钟十位显示单元 35H单元:“—”字形码(BFH) 36H单元:时个位数显示单元 37H单元:时十位数显示单元 38H单元:秒计数单元 39H单元:分钟计数单元 3AH单元:小时计数单元 3BH单元:5ms计数单元

More Related