- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四、设计思路
1、硬件设计思路
本人使用Proteus软件绘制硬件系统。硬件系统以AT89C51单片机、显示系统、键控系统构成。晶振电路由12MHz振荡器和两个25pF电容构成。复位电路采用按键脉冲复位电路,由一个SW-SPST按键、一个10k和一个1k电阻、两个22uf电容构成。
显示系统由六位共阴极红色数码管进行动态扫描输出。
按键部分由三个SW-SPST键构成。
扬声器为交流SOUNDER。
如图, P0口上拉电阻为RESPACK-8,每位均为10k欧姆。
由于使用Proteus进行仿真,所以省去设置keil软件的麻烦,只要把WAVE编译产生的烧写HEX文件导入单片机即可仿真。
2、软件设计思路
根据电路可以设计一个带整点报时、调时功能的电子钟。
根据要求对硬件功能进行分配:本系统由 P0口做段码口,P2口做位码口。P3.0为启停键(控制电子钟的启动和停止),P3.1,P3.2为调时键,其中P3.1为取码键(选择要调的位),P3.2为加一键(对选择的位进行加1操作)。
据功能程序可以由以下几部分组成:主程序、定时器中断子程序、显示子程序、延时子程序、启停子程序、调时子程序、调时比较子程序(调表时检测所调位是否溢出,并进行清0处理)、整点报时子程序。
1)主程序说明:
本程序利用定时计数器T0进行定时。首先设置T0工作模式为模式1,显示缓冲区清零,设置调时取位寄存器(存储所调位的地址)初值。启动定时器。进入循环模块后先调用显示子程序,然后判断启停键是否闭合。如果闭合则调用启停子程序,如果断开就跳到下一项判断定时器是否停止,若停止则调用调时子程序,若启动则直接调用整点报时子程序。
主程序流程图
2)中断子程序
先介绍一下定时器产生秒的过程:定时器在模式1时为16位计数器,记到65535才溢出,最长计时65.535ms。可以每隔50ms中断一次,中断20次为1秒。计算初值由公式
(216-X)×12/6/106=10-1
得 X=15536=3CB0H
因此THO=3CH,TL0=0B0H
此程序工作过程为:此程序把时分秒的个位和十位分开计算。
首先要堆栈保护现场,把定时器循环次数20送入让,然后时钟运行,秒个位到10进位,秒十位到6进位,分个位到10进位,分十位到6进位,时个位到10进位,到4时检查时位是否为2,如果是就全部清零,如果不是就进位。另外分十位进位时整点报时标志位置1。并将3送入响铃延时寄存器。中断子程序流程图如下:
Y
3)显示子程序:此程序把显示缓冲区内容通过查表得到段码,再把段码送到P0口并依次送入六位数码管。实现动态扫描输出。
显示子程序流程图
4)延时子程序:用两个寄存器做两层嵌套循环实现延时,MOV指令执行时间为1T,NOP为1T,DJNZ指令为2T,因晶体振荡频率为fosc12MHz,则机器周期T=1us,该程序可以延时时间
t =(1+ (1+1+2)×200+2)×5=4015us
延时子程序流程图
5)启停子程序
该程序用来检查启停键的动作,如果闭合则对TR0取反,以此控制定时器的启停,进而启停时钟。
6)调时子程序
调时程序是在定时器停止的时候通过P3.1口的取位键和P3.2口的加一键进行调时。在定时器暂停期间,程序反复扫描P3.1与 P3.2。
这里用到了寄存器来存储所调的位地址。每按一次取位键,寄存器所存地址加一,即所调的文位左移一次。加一键闭合时对R1所存地址内的数据加一。然后调用比较子程序以确定每一位是否溢出。
7)调时比较子程序
此程序在调时时调用以确定所调位,再检测该位是否溢出,溢出则清0。
调时比较子程序流程图
8)整点报时程序
通过测试闹铃标志位来确定是否响铃,再对SPERKER电平循环取反产生方波。
同时将秒个位数字与响铃延迟时间比较,时间到了就清0标志位。
五、调试过程
软件调试的过程据功能的增加分为几步:
首先,根据原来的100进制显示程序的基础上编写成时分秒六位显示的主干程序。该程序将时分秒分成个位和十位分别计算,所以将60进制和24进制变成10进制、6进制和2进制。又因为如果时十位为2的话,不能大于3,所以在分十位向时个位进位时得判断时十位是否为2,在组员的帮助下经过不断试验和修改终于完成。过程比较顺利。
接下来是增加暂停的功能,先构想按下启停键时关闭中断,等待第二次按下时再开启。但总不得要领,却在整点报时取得突破。过程是这样的:先在时个位加一时将一个标志位置1,然后在主程序循环部分判断此标志位,以决定是否开启响铃。所以就增加了整点报时子程序,响铃时间在标志位置1时就送进R3中,就取得是响铃3秒的效果。可是编译时用户标志位F1通不过,就改成了B.1。现在就差启停功能就完成了。
启停的功能后经过同学提醒可以在
您可能关注的文档
- 【精品】暖通施工组织设计.doc
- 【精品】饰面板(砖)工程作业指导书.doc
- 【精品】医疗废水污水处理设计方案.doc
- 【精品】HCS2000医院管理信息系统简介.doc
- 【精品】服装QC验货标准.doc
- 【精品】精密空调机房专用空调技术方案.doc
- 【精品】沈阳瑞宝项目1-3#楼基础工程土方开挖施工方案.doc
- 【精品】生产员工绩效考核办法.doc
- 【精品】自动化仪表安装调试方案.doc
- 【精品】2010年福力德公司培训规划报告.doc
- 仓库保管员述职报告 仓库保管员述职报告总结 (21篇).docx
- 教师高级职称述职报告 教师高级职称述职报告要求字数多少 (17篇).docx
- 加油站经理述职报告 加油站经理述职报告2023年 (17篇).docx
- 销售主管述职报告范文 销售主管述职报告范文大全 (17篇).docx
- 机修班长述职报告 机修班长述职报告 (20篇).docx
- 村干部半年述职报告 村干部半年述职报告 (17篇).docx
- 学生会组织部述职报告 (15篇).docx
- 教师职称评定述职报告 初中教师职称评定述职报告 (17篇).docx
- 信贷述职报告 信贷述职报告怎么写 (17篇).docx
- 入党述职报告范文 入党述职报告范文大全 (19篇).docx
文档评论(0)