版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用单片机内部的定时/计数器来实现电子时钟的方法时钟,自从它发明的那天起就成为人类的朋友,但随着时间的推移,科学技术的不段发展,人们对时间计量的精度要求越来越高,怎样让时钟更好的为人们服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断的设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校;数字式电子钟用集成电路计时时,译码代替机械转动,用led显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分,秒的校对,片选的灵活性好。时钟电路在计算机系统中起着非
2、常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:ds1302,ds12887,x1203等都可以满足高精度的要求。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法一 基本功能1 时间显示
3、功能:显示时,分,秒,且计时初值为12:00:002 时间设置功能:可以通过键盘任意设定,修改显示时间二 硬件框图 在系统电路中显示器为6个共阳极的led数码管,用一个bcd七段译码器74ls47驱动数码管(74ls47的输入为bcd码,其输出为集电极开路,可直接驱动七段译码器,具有首尾消零等特点)用3-8译码器的74ls138的输出作为动态扫描数码管的选通信号。因为采用了上述的两个芯片,所以在对数码管进行扫描显示时。只需要单片机的7条i/o线就能完成显示功能了。2.1 单片机单片机采用at89c51型,它是一种带4k字节的闪烁可编程可擦处的只读存储的低电压,高性能的smos8位位处理器,该器
4、件采用atmel高密度非易失性存储器制造技术和工业标准的mcs-51指令集和输出管脚相兼容,由于该8位多功能cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微处理器,为很多嵌入控制系统提供了一种灵活高而且价格低廉的方案。2.2 时钟显示电路为了实现led显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一点,考虑到时钟显示只有6位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现led显示。2.3 时钟电路 如果设置过多的按键,将会占用很多的i/o口,而且给布线带来不便,按键过少,在修改时间和闹钟时间的时候就不能直接输
5、入,只能通过加或者减来完成,稍为有点麻烦,但是程序简单,成本低,考虑到上述原因这里采用独立按键来实现。 2.4 闹钟电路当时间与设置闹钟时间相当时,通过i/o控制继电器接通闹钟实现。2.5 复位电路复位电路采用按钮电平复位电路三 软件设计 由于电路设计巧妙,许多功能都可以有硬件电路来完成,因此软件设计就比较简单,软件采用模块化的设计,流程图如下 主程序 置计时初值 12:00:00 置t0为4ms定时 开t0中断 有键按下 计数值调整 调用控制子程序 3.1 初始化参数设置设置电子钟的计时初值为12:00:00,启动t0进行4ms定时,且允许t0中断 3.2 定时器t0中断服务子程序 中断服务
6、子程序的作用是进行时,分,秒,的计时与显示。定时器t0用于 定时周期设为4ms,中断累计250次,即1s,对秒计数单元进行加一操作。 时间计数单元分别在2ch(s)2bh(min)2ah(h)内存单元中,在计数单元中采用组合bcd码计数,满60进位。定时器t0中断服务程序流程图如下:t0中断 重新启动t0 保护现场 1s定时到 计数值调整 调disp子程序 调scan子程序 恢复现场 中断返回3.3 显示程序disp:disp子程序的作用是分别将时间记数单元 2ch(s)2bh(min)2ah(h)中的十进制时间值(组合bcd码)转化为个位和十位(分离bcd码)存放在显示缓冲区中。显示缓冲区的
7、地质为20h25h,其中,20h21h存放秒数据,22h23h存放分数据,24h25h存放时数据,由于每一个地址单元均为分离bcd码,用bcd七为译码器74ls47直接进行编译。因此,不需要软件方式对bcd码进行编译。 3.4扫描子程序scan scan的作用是把显示缓冲区的数据依次送经显示器进行,把扫描值作为24位,显示数据值作为低4位,输出到p112,以完成显示。因为采用了3-8译码器74ls138作为扫描输出,所以用28h单元存放扫描指针,即28h中存放的是数码管的序层。显示时,只需要去处20h25h某一地址中的数据,并从p1口的低4位输出,同时p1口的高4位作为扫描值的输出,就能保证数
8、码管的正常工作。 3.5 控制子程序 作用是判断时间是否与设置闹钟时间相等。如相等则开启闹钟。3.6 源程序清单 *主程序*org 000h ; 主程序起始地址jmp start ; 跳至主程序org 0bh ; t0中断子程序起始地址jmp timo ; 跳至to中断子程序tim0start:mov sp,#70h ;设置堆栈在70hmov 28h,#00 ;(28h)为扫描指针,初值为0mov 2ah,#12h;时 初值为10hmov 2bh,#00h;分 初值为00hmov 20h,#00h;秒 初值为00hmov tmod,#01h;设t0为mood1mov th0,#0f0h;计时中
9、断为4msmov tl0,#60hmov ie,#10000010b;t0中断使能mov r4,#250;中断250次steb tr0;启动t0loop:jb p0.0 n2;秒按下?若不是,则跳至n2j检查s2call delay;消除抖动mov a,2ch;将秒值存如aadd a,#01h;a的内容加1da a;做十进制位调整mov 20h,a;将a的值存入秒单元cjne a,#60h,n3;是否等于60min?若不是,则跳至n3mov 2bh ,#00h;若是,则清除分的值为00n3:jnb p0.1,$;(分)放开了?call delay;消除抖动n4:jb p0.2 ,loop;时
10、按了么?若不是,则跳至loopcall delay;消除抖动mov a,2ah;将十的值存入aadd d,#01;a的内容加1da a;将十进位调整mov 2ah,a;将a的值存入时单元cjne a,#24h,n5;是否等于20时?若不是,则跳至n5mov 2ah,#00;若是,则消除时的值为00n5:jnb p0.2,$;分放开了?call delay;消除抖动jmp loop *中断服务子程序*tim0:mov th0,#0f0h;重新启动t0mov tl0,#60push ace;将a的值暂时存入堆栈push psw;将psw的值暂时存入堆栈djnz r4,x2;计时一秒mov r4,#
11、250call clock;调用计时子程序clockcall disp;调用显示子程序x2:call scan ;调用扫描子程序pop psw;从堆栈取出psw的值pop ace;从堆栈取出a的值retl *显示器扫描子程序*scan:mov r0,#28h;28h为扫描指针cjne r0,#6,x3;扫描完6个数码管?若不是,则调至x3mov r0,#00x3:mov a,r0;扫描指针存入aadd a,#20h;a加20h即为现实缓冲区地址mov r1,a;将各地址存入r1mov a,r0;扫描指针存入aswap a;将a的高四位交换(p1高电平位扫描值)orl a,r1;p1高四位为扫描
12、值,低四位为显示数据值mov p1,a;输出至p1inc r0;扫描指针加1ret *时分秒计数值调整程序*clock :mov a,20h;20h为秒计数单元add a,#1;秒加1da a;做十进制调整mov 2ch,a;存入秒计数单元cjne a,#60h,x4;是否等于60秒?若不是,则跳至x4mov 2ch,#00;若是,则清除为00mov a,2bh;2bh为计数单元add a,#1;分加1da a;做十进制调整mov 2bh,a;存入分计数单元cjne a,#60h,x4;是否等于60min若不是,则调至x4mov 2bh,#00;若是,则清除为00mov a,2ah;2ah为时
13、计数单元add a,#1;时加1da a;做十进制调整mov 2ah,a;存入时计数单元cjne a,#24h,x4;是否等于24时,若不是则调至x4mov 2ah,#00;若是,则清除为00 *向显示器缓冲区写数据*disp:mov r1,#20h;20h为显示缓冲区的首址mov a,2ch;将秒计数单元的值存入amov b,#10h;设b累加器的值为10hdiv ab;a除以b,商存入a,余存入bmov r1,b;将b的值存入20hinc r1;r1增加为21hmov r1,a;将a的值增加为21hinc r1;r1增加为22h;mov a,2bh;将分数单元的值存入amov b,#10h,将b累加器的值为10hdiv ab;a除以b,商存入a,余存入bmov r1,b;将b的值存入22hinc r1;r1累加为23h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年云计算服务合作投资与运营合同
- 佳木斯大学《试验设计与统计分析》2021-2022学年第一学期期末试卷
- 工厂代工加工合同模板
- 报关资料外销合同模板
- 母亲看望孩子的合同(2篇)
- 改造鱼塘养殖合同模板
- 2024年产品销售居间合同 with 产品价格及销售返佣规定
- 诗词欣赏与理解的学情分析方案
- 2024年专属:货品保管与监督全新协议
- 室外装修架子租赁合同模板
- 苏科版(2024新版)七年级上册数学期中学情评估测试卷(含答案)
- 部编版《道德与法治》三年级上册第10课《父母多爱我》教学课件
- 大语言模型赋能自动化测试实践、挑战与展望-复旦大学(董震)
- 期中模拟检测(1-3单元)2024-2025学年度第一学期西师大版二年级数学
- 气管插管操作规范(完整版)
- 2024-2025学年外研版英语八年级上册期末作文范文
- 四级劳动关系协调员试题库含答案
- 运城中学2023-2024学年八年级上学期期中考试数学试卷(含解析)
- 2025年广东省高中学业水平考试春季高考数学试题(含答案解析)
- 2024年重庆市渝北区数据谷八中小升初数学试卷
- 2024年AI大模型场景探索及产业应用调研报告-前瞻
评论
0/150
提交评论