【通用】数字电子钟说明书.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机技术》课程设计说明书
数字电子钟
院、部:电气与信息工程学院
学生姓名:******
指导教师:王韧职称副教授
专业:通信工程
班级:***********
完成时间:2013年12月20日
湖南工学院
课程设计任务书
课程:单片机技术
课程设计题目:数字电子钟
数字频率计
数字电压表
交通灯
抢答器
密码锁
波形发生器
数字温度计
计算器
数字式秒表
适用班级:电子1101~2、通信1102~3
通信1101~电子1103 时间: 2013~2014学年第一学期
指导教师:王韧
《单片机技术》课程设计任务书
一、设计题目:数字电子钟、数字频率计、数字电压表、交通灯、抢答器、密码锁、
波形发生器、数字温度计、计算器、数字式秒表。
二、适用班级:电子1101~2、通信1102~3、通信1101~电子1103
三、指导教师:王韧
四、设计目的与任务:
学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
五、设计内容与要求
设计内容
1、数字电子钟
设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
2、数字频率计
设计一个能够测量周期性矩形波信号的频率、周期、脉宽、占空比的频率计。
该频率计上电或按键复位后能自动显示系统提示符“P.”,进入测量准备状态。
按频率测量键则测量频率;按周期测量键则测量周期;按脉宽测量键则测量脉宽;按占空比测量键则测量占空比。
3、数字电压表
设计一个能够测量直流电压的数字电压表。
测量电压范围0~5V,测量精度小数点后两位。
该电压表上电或按键复位后能自动显示系统提示符“P.”,进入测量准备状态,按测量开始键则开始测量,并将测量值显示在显示器上,按测量结束键则自动返回“P.”状态。
4、交通灯
设计一个具有特定功能的十字路口交通灯。
该交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
按开始键则开始工作,按结束键则返回“P.”状态。
要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。
有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。
5、抢答器
设计一个具有特定功能的抢答器。
该抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S 内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,显示器显示违规台号。
蜂鸣器发出音响;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都
要通过主持人按复位按钮。
6、密码锁
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
7、波形发生器
设计一个具有特定功能的波形发生器。
该波形发生器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该波形发生器可以分别产生幅值0~5V、频率100Hz~100KHz范围内的三角波、锯齿波、方波、梯形波和正弦波。
8、数字温度计
设计一个具有特定功能的数字温度计。
该数字温度计上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
测量温度范围0℃~99℃,测量精度小数点后两位,可以通过开始和结束键控制数字温度计的工作状态。
9、计算器
设计一个具有特定功能的计算器。
该计算器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
能实现(1)基本的加、减、乘、除、平方、开方;(2)三角函数运算;(3)十进制、十六进制转换运算;(4)其他功能。
10、数字式秒表
设计一个具有特定功能的数字式秒表。
该数字式秒表上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该数字式秒表应具有开始、暂停、连续、清零和停止功能。
设计要求
1、以上课题可以任选其一或多选,学生也可以自拟课题;
2、编程语言:汇编或C51;
3、计算机打印《单片机技术》课程设计说明书一份;
4、设计时间:一周;
5、实物制作;
6、人员分组:一人一组一实物。
六、《单片机技术》课程设计说明书正文主要内容
参照“《单片机技术》课程设计说明书正文主要内容”文件。
七、《单片机技术》课程设计说明书书写规范格式
参照“《单片机技术》课程设计说明书书写规范格式”文件。
八、参考资料
1、马忠梅,单片机的C语言Windows环境编程宝典[M], 北京:北京航空航天大学
出版社,2003.6;
2、李光飞,单片机C程序设计指导[M],北京:北京航空航天大学出版社,2003.01 ;
3、李光飞,单片机课程设计实例指导[M],北京:北京航空航天大学出版社,2004.9。
电气自动化教研室
2013年9月10日
摘要
当今社会,人们对时间的要求越来越高,而传统的机械式手表和电子钟,对距离和视力有一定的要求,不能准确直观地读出时间,本设计的数字电子钟是为了满足所有群体的时间的要求,适应于各种年龄段的人和各种恶劣情况,能直观明了的读出时间,其设计新颖,成本低廉,走时准确、显示直观,具有很好的开发和生产价值。
本设计围绕数字电子钟系统的设计与开发工作进行研究和实践,详细介绍了电子钟系统的整体结构、硬件设计、软件设计,系统方案。
介绍一种基于ATMEL公司的AT89S52单片机为核心,以及电源电路,复位电路,晶振电路,下载电路,输入设备,输出设备构成的数字电子钟系统。
软件上用汇编程序进行设计,达到显示时、分、秒和校时、定时、复位等功能。
本设计到达了设计要求,具有走时准确、显示直观、精度、稳定等优点适用于家庭、办公大楼、公共场所等。
关键词电子钟;单片机;硬件设计;软件设计
ABSTRACT
In today's society, people more and more high to the requirement of time, and the traditional mechanical watches and clocks, the distance has certain requirements, and vision can't intuitively read correct time, the design of digital electronic clock is in order to meet the requirements of the time all the groups, suitable for various age groups and all kinds of bad situation, can read time of straightforward, its novel design, low cost, as accurate, direct display, has great value in development and production.
This design around the digital electronic clock system design and development of work study and practice, electronic clock system are introduced in detail the whole structure, hardware design, software design, system solutions. Introduces a kind of based on ATMEL company AT89S52 single chip microcomputer as the core, and power supply circuit, reset circuit, crystal oscillation circuit, circuit, input devices, output devices composed of digital electronic clock system. Software in assembly procedures designed to show when, minutes, seconds, and the school when, timing, and reset, and other functions.
This design to reach the design requirements, with travel time accurately, direct display and the advantages of precision, stability, suitable for families, office buildings, public places, etc.
Key words electronic clock; SCM; hardware design; software design
目录
1 电子钟功能及总体方案的介绍 (1)
1.1 设计课题任务 (1)
1.2 功能要求说明 (1)
1.3 设计课题总体方案介绍 (1)
2 设计课题硬件系统的设计 (3)
2.1 设计课题硬件系统各模块功能简要介绍 (3)
我们提供最优质的文档实用型文档
2.2 设计课题电路原理图、PCB图、元器件布局图 (5)
2.3 设计课题元件清单 (5)
3 设计课题软件系统的设计 (5)
3.1 设计课题使用单片机资源的情况 (5)
3.2 设计课题软件系统各模块功能简要介绍 (7)
3.3 设计课题软件系统程序流程框图 (8)
3.4 设计课题软件系统程序清单 (13)
4 设计总结 (23)
4.1 设计课题结论及使用设计说明 (23)
4.2 设计课题的仿真结果 (23)
4.3 设计课题的误差分析 (24)
4.4 设计体会 (24)
4.5 教学建议 (25)
结束语 (26)
参考文献 (27)
致谢 (28)
附录A (29)
附录B (30)
附录C (31)
附录D (32)
附录E 0
1 电子钟功能及总体方案的介绍
1.1 设计课题任务
设计一个具有特定功能的电子钟。
1.2 功能要求说明
本设计中的电子钟具有以下功能:
(1) 上电或按键复位自动显示系统提示符“P.”,进入始终准备状态。
(2) 第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态。
(3)第二次按电子钟启动/调整键,电子钟进入时钟调整状态,此时按下调时键,时加1,满24自动清零;按下调分键,分加1,满60自动清零;按下调秒键秒加1,满60自动清零。
(4) 第三次按下电子钟启动/调整键,电子钟从当前显示开始继续运行。
调整功能键只允许在自己控制的位上操作,不允许出现进位;所有键操作均需等到案件释放后做出响应功能反映,负责状态不变。
1.3 设计课题总体方案介绍
1.3.1 设计课题硬件系统方案
我们提供最优质的文档实用型文档
图1 电子钟原理框图
如图1所示,电子钟硬件系统由单片机、电源电路,时钟电路,复位电路,下载电路,输入设备和输出设备构成。
其中电源电路提供给单片机+5V的直流电源,8个独立式键盘接在单片机的P1口,2个四位一体数码管有外接在单片机上的74HC573驱动,其位控接在74HC573上,段控经470Ω的电阻挂在单片机的P0口。
硬件的输入和输出设备,加上相应的程序,实现显示时间和调整时间的功能。
1.3.2 设计课题软件系统方案
利用基于AT89S52单片机的相关程序和硬件电路,首先实现,单片机上电或者复位时,数码管显示电路显示“P.”,
利用AT89S52单片机内部的定时/计数器进行中断定时,配合程序延时实现时、分、秒的计时。
利用单片机的外部中断源,加上相关的程序设计,用按键相应做中断源,对电子钟的时间进行相应的调时、调分、调秒。
详细程序设计思想、程序流程图,和相关程序见后文。
2 设计课题硬件系统的设计
2.1 设计课题硬件系统各模块功能简要介绍
2.1.1 单片机最小系统
单片机最小系统由电源电路、时钟电路和复位电路构成。
在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,本设计的设计思路是根据我模拟电子技术知识,由其USB插口提供一个+5V的电源,并有1个发光二极管来显示其开启关闭状态。
本设计的时钟电路由振荡电路和分频电路组成。
其中振荡电路由反相器以及并联外接的12M晶振和33PF的电容构成,用于产生振荡脉冲。
而分频电路则用于把振荡脉冲分频,已得到所需要的时钟信号。
本设计中的单片机AT89S52的高增益反相放大器,其输入端为引脚XTAL1,输出引脚为XTAL2。
通过这两个引脚在单片机外并接12M晶振和33PF电容C1和C2构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡。
复位电路通常采用上电自动复位和按键复位两种方式,所谓加电复位是指通过专用的电路产生复位信号,它是系统得原始复位方式,发生在开机加电时是系统自动完成的。
按键复位也是通过专用的复位电路实现的,本设计采用的是上电与按键复位电路,按键复位采用S1键控制,AT89S52有复位信号引脚RST,用于从外界引入复位信号。
2.1.2 LED显示电路
显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、CRT显示器等。
LED显示器是现在最常用的显示器之一。
发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。
分段式显示器(LED 数码管)由7条线段围成8字型,每一段包含一个发光二极管。
外加正向电压时二极管导通,发出清晰的光。
只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。
LED数码管有共阳、共阴之分。
本设计采用是共阳式LED数码管显示。
显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,另需两个数码管来显示横。
采用动态显示方式显示时间,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第四个和第五个数码管,秒的十位和个位分别显示在第七个和第八个数码管,其余数码管显示横线。
LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。
本设计采用动态扫描的方法进行显示。
2.1.3 键盘控制电路
本设计开发板中共有10个独立式键盘,其中S1为手动复位按键,S2-S9共8个独立式按键并接在一起,一端接地,一端挂在单片机的P1口上,结合相应的程序,实现的单片机的相关控制。
该设计需要校对时间,所以用三个按键来实现。
S2做启动/调整键,第一次按,做时钟启动键,电子钟从0时0分0秒开始运行。
第二次按,做时钟调整键,以此类推,
每奇数次按下做启动键,偶数次按下做调整键。
S2、S3、S4分别做电子钟的调时、调分、调秒功能键,但是使用这三个功能键的时候,按下的S1必须工作在调整键的状态下。
当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,在释放一个键时,也回会出现类似的情况。
这就是抖动,抖动问题不解决就会引起对闭合键的识别出错。
所以本设计中采用了相应的延时程序进行去斗,再读入键盘码。
2.1.4 下载电路
在单片机电路设计中,下载电路也是必不可少的,本设计采用的下载口主要用于将Keil软件里面的程序下载到单片机中进行相应的调试。
2.2 设计课题电路原理图、PCB图、元器件布局图
2.2.1 设计课题电路原理图
见附录A
2.2.2 设计课题电路PCB图
见附录B
2.2.3 设计课题电路元件布局图
见附录C
2.2.4 设计课题电路实物图
见附录D
2.3 设计课题元件清单
见附录E
3 设计课题软件系统的设计
3.1 设计课题使用单片机资源的情况
3.1.1 堆栈
堆栈栈底开辟在60H
3.1.2 数据存储器变量及常量单元定义
78H字节单元:十进制数秒个位,非压缩BCD码;
79H字节单元:十进制数秒十位,非压缩BCD码;
7BH字节单元:十进制数分个位,非压缩BCD码;
7CH字节单元:十进制数分十位,非压缩BCD码;
7EH字节单元:十进制数时个位,非压缩BCD码;
7FH字节单元:十进制数时十位,非压缩BCD码;
20H.0位单元:布尔量,S2键键值,S2键按下为1,S2键未按下为0;
20H.1位单元:布尔量,S3键键值,S3键按下为1,S3键未按下为0;
20H.2位单元:布尔量,S4键键值,S4键按下为1,S4键未按下为0;
20H.3位单元:布尔量,S5键键值,S5键按下为1,S5键未按下为0;
3.1.3 定时器/计数器资源
T/C0:工作方式1;定时50ms,循环20次,实现1s定时;中断法。
3.1.4 键功能程序
KEY2:S2键键功能程序;
KEY3:S3键键功能程序;
KEY4:S4键键功能程序;
KEY5: S5键键功能程序;
3.1.5 子程序
DELAY: 800us延时子程序;
DIR: 数码管显示子程序;
DIR1: P.显示子程序;
KEY:键扫描子程序;
KEYCHULI:P1口数据处理子程序;
3.1.6 常数表格
DB: 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0CH,0FFH
0~9,"-","P.","灭"
3.2 设计课题软件系统各模块功能简要介绍
3.2.1 按键部分
本设计中按键部分,采用的是独立式键盘,因此采取独立式键盘接口的编程模式, 此键盘接口程序的功能实际上就是驱动键盘工作, 根据相关的程序,完成键盘的识别,根据所识别按键的键值, 完成子程序的正确调用, 从而完成单片机应用系统对用户按键动作的预定义的响应。
采取独立式键盘的原因是每一个按键只占用一个I /O 口, 同时每个按键的工作不影响其他按键, 可直接依据每个I/O口线的状态进行子程序的调用, 因此编制的程序
较简练。
因为单片机设计者规定,上电时,单片机I/O口线为高电平,所以硬件设计上将键盘并接,且一端接地,所以在程序设计中,识别是否有键按下的时候,0表示有键按下,1表示没有键按下。
本程序中利用查询方式对按键进行判断, 若有键按下, 则进行软件延时消抖, 避免了抖动引起的干扰, 同时只有当按键松开后, 才判断其有效并进行识别, 最后根据识别的按键转子程序处理。
3.2.2 显示部分
本设计显示部分采取单片机应用系统中最常用的动态扫描显示法,所谓动态显示,就是同一时刻点亮不同的数码管,因此LED显示程序都是作为一个子程序供主程序调用, 各位显示器都扫过一遍后, 就返回主程序,进行一些其他操作, 再调用显示扫描程序。
程序中主要通过反复调用来实现LED 数码显示器的动态扫描。
由于本设计硬件方案中显示部分采用2个共阳极四位一体数码管,所以要点亮相对应的数码管,只需要的需要的时候通过软件、硬件相结合的方式,将正确的位控码和段控码送到显示部分,加上相应的延时程序,即可实现数码管的动态显示。
3.2.3 计时方案
利用AT89S52单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。
先设置定时器的工作方式,加上相应的循环程序即可实现定时功能,如:利用定时器1工作方式1,每次定时50ms,循环20次,加上相应的中断程序,就可以实现定时1s的功能,以此类推。
3.3 设计课题软件系统程序流程框图
3.3.1 主程序流程框图
图2 主程序流程框图
3.3.2 键扫子程序流程框图
3.3.3 中断服务程序流程框图
图4 中断服务程序流程框图
3.3.4 调整键功能程序流程框图
图5 调整键功能程序流程框图
3.3.5 显示子程序流程框图
图6 显示子程序流程图
3.4 设计课题软件系统程序清单
电子钟完整程序清单如下:
;******************************************************************** ;项目名称:数字电子钟
;设计者:何智慧
;设计日期: 2013年12月20日
;项目功能:上电或按键复位自动显示系统提示符“P.”,进入始终准备状态。
; 第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进; 入时钟运行状态。
; 第二次按电子钟启动/调整键,电子钟进入时钟调整状态,此时按下; 调时键,时加1,满24自动清零;按下调分键,分加1,满60自动; 清零;按下调秒键秒加1,满60自动清零。
; 第三次按下电子钟启动/调整键,,电子钟从当前显示开始继续运行。
; 调整功能键只允许在自己控制的位上操作,不允许出现进位;所有
; 键操作均需等到案件释放后做出响应功能反映,负责状态不变。
;******************************************************************* ;起始程序
ORG 0000H
START: LJMP MAIN
ORG 000BH
LJMP TTC0 ;断0服务程序入口地址
;******************************************************************** ;监控程序
ORG 0100H
MAIN: CLR RS1
CLR RS0 ;使用寄存器组0
MOV SP, #60H ;堆栈初始化
MOV 78H, #00H ;初始化各位清零
MOV 79H, #00H
MOV 7BH, #00H
MOV 7CH, #00H
MOV 7EH, #00H
MOV 7FH, #00H
LOOP: LCALL DIR ;调显示
LCALL KEY ;调键扫
MOV 7AH, #10
MOV 7DH, #10 ;显示‘-’,通过查表
JB 20H.0, KEY2A; ;判键值,S2键按下,转键S2功能程序
LJMP LOOP ;其中无键按下,转回循环
;******************************************************************** ;键S2功能程序
KEY2A: SETB EA
SETB ET0 ;开中断
MOV TMOD, #01H ;定时器初始化
MOV TH0, #3CH
MOV TL0, #0B0H ;定时50ms
MOV 50H, #20 ;设定循环次数
KEY2C: SETB TR0 ;开启定时器
HERE: LCALL DIR1 ;调显示
LCALL KEY ;调键扫
JB 20H.0, KEY2B ;此时唯有键S2再次按下有所变化
LJMP HERE
KEY2B: CLR TR0 ;键S2再次按下,关闭定时器 LCALL DIR1 ;调显示
LCALL KEY ;调键扫
JB 20H.0, KEY2C ;键S2按下,转回执行键2C功能
JB 20H.1, KEY3 ;键S3按下,时加1
JB 20H.2, KEY4 ;键S4按下,分加1
JB 20H.3, KEY5 ;键S5按下,秒加1
LJMP KEY2B
;******************************************************************** ;键S3功能程序:时加1
KEY3: MOV R5, 7FH; ;时十位送R5
MOV R4, 7EH; ;时个位送R4
KEY3C: CJNE R5, #02, KEY3B;时十位是否为2,不为2转3B CJNE R4, #03, KEY3D;十位为2时,个位为3否,为3清零
MOV 7EH, #00H
MOV 7FH, #00H;
LJMP KEY2B ;转回继续显示扫描
KEY3B: INC 7EH ;时个位加1
MOV R4, 7EH
CJNE R4, #10, KEY2B;个位是否加到10,不为十转2B
MOV 7EH, #00H ;个位为10进一清零
INC 7FH
LJMP KEY2B
KEY3D: INC 7EH
LJMP KEY2B
;******************************************************************** ;键S4功能程序,分加1
KEY4: MOV R3, 7CH ;分十位送R3
MOV R2, 7BH ;分个位送R2
INC R2 ;个位加1
CJNE R2, #10, KEY4A;个位加到10否,不为10回显示扫描
MOV R2, #00H ;为10清零
INC R3 ;十位加1
CJNE R3, #06, KEY4A;十位为6否,不为6转会显示扫描
MOV R3, #00H ;为6清零
MOV 7BH, R2 ;赋值回缓冲区
MOV 7CH, R3
LJMP KEY2B ;转回扫描
KEY4A: MOV 7BH, R2;
MOV 7CH, R3;
LJMP KEY2B
;******************************************************************** ;键S5功能程序,秒加1
KEY5: MOV R1, 79H ;秒十位送R1
MOV R0, 78H ;秒个位送R0
INC R0 ;个位加1
CJNE R0, #10, KEY5A;个位加到10否,不为10转显示扫描
MOV R0, #00H ;为10清零
INC R1 ;十位加1
CJNE R1, #06, KEY5A;十位为6否,不为6转会显示扫描
MOV R1, #00H ;为6清零
MOV 78H, R0 ;赋值回缓冲区
MOV 79H, R1
LJMP KEY2B ;转回扫描
KEY5A: MOV 78H, R0
MOV 79H, R1
LJMP KEY2B;
;******************************************************************** ;******************************************************************** ;中断服务程序
TTC0: PUSH PSW ;入栈保护
PUSH ACC
MOV TH1, #3CH
MOV TL1, #0B0H ;重装初值
MOV A, 50H
DEC A
MOV 50H, A
JNZ EXT
MOV 50H, #20 ;重新赋值
;******************************************************************** ;秒个位
INC 78H ;秒个位加1
MOV A, 78H
CJNE A, #10, EXT;不为10跳出中断服务程序显示
MOV 78H, #00H ;秒个位清零,十位加1
;******************************************************************** ;秒十位
INC 79H ;秒十位加1
MOV A, 79H
CJNE A, #06, EXT;不为6跳出中断服务程序显示
MOV 79H, #00H ;秒十位清零,分个位加1
;******************************************************************** ;分个位
INC 7BH ;分个位加1
MOV A, 7BH
CJNE A, #10, EXT;不为10跳出中断服务程序显示
MOV 7BH, #00H ;分个位清零,十位加1
;******************************************************************** ;分十位
INC 7CH ;分十位加1
MOV A, 7CH
CJNE A, #06, EXT;不为6跳出中断服务程序显示
MOV 7CH, #00H ;分十位清零,时个位加1
;******************************************************************** ;时个位
INC 7EH; ;时个位加1
MOV A, 7FH
CJNE A, #02, SG1;时十位为2否,不为转SG1
LJMP SG2
SG1: MOV A, 7EH
CJNE A, #10, EXT;不为10跳出中断服务程序显示
LJMP SS ;转时十位操作
SG2: MOV A, 7EH
CJNE A, #04, EXT;十位为2时,时个位不为4跳出中
;断服务程序显示
MOV 7FH, #00H ;为4清零
MOV 7EH, #00H
LJMP EXT
;******************************************************************** ;时十位
SS: MOV 7EH, #00H
INC 7FH ;时十位加1
;********************************************************************
EXT: POP ACC
POP PSW
RETI
;******************************************************************** ;******************************************************************** ;键扫描子程序
KEY: LCALL KEYCHULI ;调键处理
JZ EXTI ;无键按下则返回
LCALL DIR1
LCALL DIR1 ;去抖动
LCALL KEYCHULI ;调键处理
JZ EXTI ;无键按下则返回
MOV B, 20H ;保存取反后键值
KEYSF: LCALL KEYCHULI ;调键处理
JZ KEYY ;释放则保存键值
LCALL DIR1 ;调显示判释放
LJMP KEYSF ;没释放则继续等待
KEYY: MOV 20H, B ;保存键值
EXTI: RET
;******************************************************************** ;******************************************************************** ;键处理子程序,出口:A,20H
KEYCHULI:PUSH PSW ;保护现场
SETB RS1
SETB RS0 ;使用寄存器组3
MOV P1, #0FFH ;按键口P1写1
MOV A, P1 ;读P1口数据,判为哪个键按下
CPL A ;P1口数据取反,为键值
MOV 20H, A ;保存取反后的键值
CLR RS1 ;恢复当前寄存器组为组0
CLR RS0
POP PSW ;恢复现场
RET ;子程序返回
;******************************************************************** ;********************************************************************
;显示子程序
DIR: MOV P2, #01H
MOV P0, #0CH
RET
DIR1: PUSH DPH ;现场保护
PUSH DPL
PUSH ACC
PUSH PSW
SETB RS0 ;使用寄存器1组
CLR RS1
LD2: MOV R0, #78H ;建立显示缓冲区首址
MOV R3, #01H ;从右数第一位LED开始扫描
MOV A, R3 ;位控码初值送A
LD0: MOV P2, A ;输出位控码
MOV DPTR, #DEEG ;表格首地址
MOV A, @R0 ;从显示缓冲区取出显示数据
MOVC A, @A+DPTR ;查表取字形代码(段控码)
MOV P0, A ;输出段控码
LCALL DELAY ;延时
INC R0 ;转向下一缓冲单元
MOV A, R3
JB ACC.7, LD1 ;是否显示到最高位
RL A ;不到,向显示器高位移位
MOV R3, A ;修改后的位控码送R3保存
LJMP LD0 ;继续扫描
LD1: CLR RS0 ;恢复当前通用寄存器组组号
CLR RS1
POP PSW
POP ACC ;恢复现场
POP DPL
POP DPH
RET
DEEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0CH,0FFH
;0~9,"-","P.","灭"
;******************************************************************** ;******************************************************************** ;延时程序:
DELAY: PUSH PSW
SETB RS1; ;使用寄存器组2
CLR RS0;
MOV R6, #3DH
DL0: MOV R5, #05H
DJNZ R5, $
DJNZ R6, DL0
POP PSW
RET
;******************************************************************** END
4 设计总结
4.1 设计课题结论及使用设计说明
本设计为基于单片机的电子钟的设计。
经过硬件和软件的相结合,达到了设计目的,设计了一个具有特定功能的电子钟。
上电或按键复位自动显示系统提示符“P.”,进入始终准备状态。
第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态。
第二次按电子钟启动/调整键,电子钟进入时钟调整状态,此时按下调时键,时加1,满24自动清零;按下调分键,分加1,满60自动清零;按下调秒键秒加1,满60自动清零。
第三次按下电子钟启动/调整键,电子钟从当前显示开始继续运行。
调整功能键只允许在自己控制的位上操作,不允许出现进位;所有键操作均需等到案件释放后做出响应功能反映,负责状态不变。
4.2 设计课题的仿真结果
图7 时钟准备状态仿真图
如图7所示,上电或按键复位自动显示系统提示符“P.”,进入始终准备状态。
图8 时钟运行状态仿真图
如图8所示,第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态。