600 likes | 779 Views
项目六 数字时钟的设计. [ 项目学习目标 ]. 一、知识目标 1. 知道定时器 / 计数器的工作原理及 4 种工作方式。 2. 掌握数码管动态显示方法,理解键盘识别过程。 3. 知道程序分析的方法,可以绘制主程序流程图、中断程序及子程序的流程图,并能根据流程图编写程序。. 二、技能目标 1. 会利用定时器 / 计数器进行时间控制,会计算定时 / 计数初值。 2. 能理解二十四小时电子时钟程序并会调试。 3. 会用软件模拟方式调试程序。 4. 能正确建立单片机的软件环境,并可以正确进行硬件仿真,观察结果。. 任务一 60 秒秒表设计. 任务介绍
E N D
项目六 数字时钟的设计 [项目学习目标] • 一、知识目标 • 1.知道定时器/计数器的工作原理及4种工作方式。 • 2.掌握数码管动态显示方法,理解键盘识别过程。 • 3.知道程序分析的方法,可以绘制主程序流程图、中断程序及子程序的流程图,并能根据流程图编写程序。
二、技能目标 • 1.会利用定时器/计数器进行时间控制,会计算定时/计数初值。 • 2.能理解二十四小时电子时钟程序并会调试。 • 3.会用软件模拟方式调试程序。 • 4.能正确建立单片机的软件环境,并可以正确进行硬件仿真,观察结果。
任务一 60秒秒表设计 • 任务介绍 • 用单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始,秒计数用数码管显示。数码管采用动态显示方式,由P0口接8个数码管的八段,即JD12,P2口接8个数码管的位选段,即JD11。
活动1:了解定时器/计数器相关概念 • 89S51单片机内部定时器/计数器是由两个16位的(加1)定时器/计数器T0、T1和两个特殊功能寄存器TMOD与TCON组成。 • T0、T1又可分成四个独立的8位计数器即TH0、TL0、TH1、TL1,用于存放定时器/计数器的初值。 • TMOD为工作方式寄存器,主要用来设置定时器/计数器的工作方式; • TCON为控制寄存器,主要用来控制定时器/计数器的启动与停止。
一、预置数计数法 • 溢出: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.这两个定时/计数器都是加法计数器,计满后就会溢出,溢出时产生中断标志。
二、工作方式控制寄存器TMOD(89H) • TMOD用于控制T0 和T1 的工作方式,其组成见表6-1-1所示。TMOD被分成了两部分,每部分4位,分别控制T1和T0。
1.工作方式选择位:M1 、M0 • M1、M0用来选择工作方式,共有四种工作方式,对应不同的计数范围,如表6-1-2所示。
2.计数/定时方式选择位: • =0,设置为定时工作方式,对内部机器脉冲计数,作定时器用。 • =1,设置为计数工作方式,对外部事件脉冲计数,作为计数器用,负跳变有效。 • Tips • 一个定时/计数器同一时刻要么作定时用要么作计数用,不能同时使用。
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?
三、定时/计数器控制寄存器TCON(88H) • TCON用于控制定时器的启动、停止以及反映定时器的溢出和中断情况,其组成见表6-1-3所示。TCON也被分成两部分,高4位用于定时/计数器,低4位则用于中断。
四、计数寄存器 • TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位存放在TH中,低8位存放在TL中。计数寄存器是用来存放计数值得,预置初值也是放在这个寄存器中的。
五、定时/计数器中断 • AT89S51单片机中共有3类5个中断源,即两个外中断INT0与INT1(由P3.2和P3.3引入)、2个定时中断(定时器T0、定时器T1)和一个串行中断。 • 每个中断源对应一个中断标志位,当某个中断源有中断请求时,相应的中断标志位置1,外中断和定时中断源的中断标志位在控制寄存器TCON中
中断允许控制寄存器IE,用来控制中断的允许或禁止,如表6-1-4所示中断允许控制寄存器IE,用来控制中断的允许或禁止,如表6-1-4所示
六、定时/计数器中断的应用步骤 1.初始化 (1)确定工作方式,并写入TMOD特殊功能寄存器中。MOV TMOD,……。 (2)将计算出的定时或计数初始值装入TL0、TH0中。 MOV TH0,…… MOV TL0,…… (3)启动定时/计数器工作。 (4)启动定时/计数器:SETB TR0 (5)开中断:SETB ET0 SETB EA
2.提供中断入口地址 • 5个中断源的入口地址见表6-1-5所示,单片机根据中断入口地址,寻找中断处理程序。
3.编写中断服务程序 • 保护现场、恢复现场。 • 重新赋初值(工作方式2除外)。
活动2:学习相关指令 一、中断返回指令 • RET用于子程序返回,而RETI用于中断程序返回。 二、判位变量转移指令 • 1.JB bit,rel • 指令说明:若bit位的值为“1”,则转移到标号rel处执行,否则就顺序执行。 • 2. JNB bit,rel • 指令说明:该指令与上条指令相反,若bit位的值为“0”,则转移到标号rel处执行,否则就顺序执行。
三、除法指令 • 指令格式:DIV AB • 功能是将A中的8位无符号整数除以B中的8位无符号整数,所得的整数部分放在A中,余数放在B中。 • 如果原来B中的内容为0,则A和B中的内容不定,并使标志位OV=1,表明除法没有意义。 • 例如:(A)=06H,(B)=04H,执行指令DIV AB后,A中的值为01H,B中的值为02H。
活动3:任务分析 一、硬件电路
电路分析: • 通过单片机的P0口输出字形码给JD12,控制数码管显示某一字形。数码管的公共端JD11由单片机的P2口输出的字位码控制。硬件电路连接后,数码管显示的字形是由单片机P0口输出的字形码确定,而哪个数码管点亮是由单片机P2口输出的字位码确定的。
二、任务分析 • 本任务是60秒秒表计时设计,可分为两部分完成。 • 1.时钟部分 • 为了能够精确计时,采用单片机内部的定时器来进行定时,一旦设定的定时时间到,则产生中断申请,单片机CPU去处理,实现时间的计数。这部分功能主要是通过软件编程实现。 2.数码管部分 • 使用显示子程序进行2位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。
三、程序流程图 1. 主程序流程图
四、程序设计 • 1.存储单元分配 • 30H单元:秒计数单元 31H单元:5ms计数单元
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 $
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
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
活动4:任务实施 一、建立软件环境 • 1.建立新工程、源文件 • 照前面介绍的方法新建工程“任务一”和源文件“任务一.a”,并将此文件添加到项目中。 • 2.编写程序(见教材154页) • 3.编译程序
二、硬件仿真 • 1.硬件连接 • 将仿真器的仿真头插入实验箱单片机紧锁插座中,并用扁平数据线连接单片机P0口与八位动态LED数码管段码模块JD12。用扁平数据线连接单片机P2端口与八位动态LED数码管位码模块JD11。
2.参数设置 • 参照前面所讲知识,对相关参数进行设置。 • 3.硬件仿真 • 程序调试无误后,全速运行,观察数码管显示情况。
作业 P178: 1、2、3、4、6、7
任务二 按键计数的控制 任务介绍: 本任务通过单片机控制外围设备,实现对按键次数的计数,并将计数结果通过数码管显示,计数范围0~99。
活动1:任务分析 一、任务分析 本任务中除了使用两个数码管对计数次数进行动态显示外,还要对按键次数识别,主要分为以下几个模块。 1.数码管部分 本任务中2位数码管的显示采用动态扫描方法实现。 2.按键部分 主要通过软件进行按键的识别、去抖动,有按键按下,则数码管显示的按键次数加1。
活动2:电路的硬件连接 本任务中数码管的显示采用动态扫描方法,由P0口接8个数码管的八段,即JD12,P2口接8个数码管的位选段,即JD11。P0口输出数码管的字形码,P2口输出数码管的字位码。接于P3.7的1个按键K0作为计数按键,每按一次K0数码管显示的计数次数加1,计数次数范围为00~99.
活动3:程序设计 一、存储单元分配 二、主程序设计 主程序中用到的一些存储单元的初始化,T0的初始化和按键扫描。首先进行存储单元初始化,按键次数初始化,将按键次数计数单元30H清0。然后调用数码管显示数据转换子程序和数码管动态显示子程序,最后进行K0键的扫描。 30H单元:按键次数计数单元
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 ;继续扫描按键
三、数码管显示子程序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
四、T0中断服务程序 T0INT: LCALL CONV ;数码管显示 MOV TH0,#0ECH ;T0重装初值 MOV TL0,#78H RETI
活动4:任务实施 一、建立软件环境 1.建立新工程、源文件 照前面介绍的方法新建工程“任务二”和源文件“任务二.a”,并将此文件添加到项目中。 2.编写程序(见教材162页) 3.编译程序
二、硬件仿真 1.硬件连接 将仿真器的仿真头插入实验箱单片机紧锁插座中,并用扁平数据线连接单片机P0口与八位动态LED数码管段码模块JD12。用扁平数据线连接单片机P2端口与八位动态LED数码管位码模块JD11,用导线连接单片机的P3.7引脚与独立按键K0.
2.参数设置 参照前面所讲知识,对相关参数进行设置。 3.硬件仿真 程序调试无误后,全速运行,观察按键每按下一次数码管的显示数字递增的现象。
作业 P178: 5
任务三 24h数字时钟的设计 任务介绍: 用单片机设计一个数字电子钟,由四个按键S1、S2、S3、S4进行当前时间的调整,四个按键采用独立按键,S1代表时间调整开始键,按下S1后方可进行时间调整;S2、S3分别调整““时”、“分”,每按一下相应的小时数、分钟数加1;S4代表时间调整退出键,按下S4后退出时间调整,数字时钟继续计时。用8个数码管显示当前时间,开机时显示00-00-00,开始计时,显示范围为00-00-00到23-59-59,8位数码管采用动态显示方式。
活动1:任务分析 一、任务分析 • 本任务要求比较多,我们把这个比较复杂的项目,分解为多个简单的小项目来完成,可分为以下几个小项目: 1.时钟部分 • 为了能够精确计时,本任务采用单片机内部的定时器/计数器T0来进行定时。 2.数码管部分 • 使用显示子程序进行8位数码管的动态扫描,在子程序中加入延时和消隐,实现字符稳定显示。显示如图6-3-1所示。 • 3.按键部分 • 按键部分采用4个独立按键完成不同的按键功能,本任务主要通过软件进行按键的识别、去抖动,有按键按下,则执行相应的功能。
二、程序流程图 1.主程序流程图
2.时间调整子程序 • 当按键S1时,进入时间调整子程序,T0停止工作,进行“时”、“分”的时间调整,当按键S4时退出时间调整,重新启动T0,回到主程序。流程图如图6-3-3所示。
3.时钟程序流程图 时钟程序在本任务中利用中断程序实现精确计时,其流程图见图6-3-4所示。
活动2:电路的硬件连接 本任务中数码管的显示采用动态扫描方法,P0口接数码管段选端JD12,P2口接数码管的位选段JD11。接于P1.0~P1.3的4个按键是S1~S4为当前时间调节按键, S1为时间调整开始键,S2为小时调节键,S3为分钟调节键,S4为退出时间调整状态;按下S1后进入时间调整状态,每按一次S2键小时加1,每按一次S3键分钟加1,按下S4键退出时间调节状态,继续计时。
活动3:程序设计 一、存储单元分配 30H单元:秒个位显示单元 31H单元:秒十位显示单元 32H单元:“—”字形码(BFH) 33H单元:分钟个位显示单元 34H单元:分钟十位显示单元 35H单元:“—”字形码(BFH) 36H单元:时个位数显示单元 37H单元:时十位数显示单元 38H单元:秒计数单元 39H单元:分钟计数单元 3AH单元:小时计数单元 3BH单元:5ms计数单元