收藏 分销(赏)

数字电子钟的设计.docx

上传人:xrp****65 文档编号:5925955 上传时间:2024-11-23 格式:DOCX 页数:16 大小:509.52KB 下载积分:10 金币
下载 相关 举报
数字电子钟的设计.docx_第1页
第1页 / 共16页
数字电子钟的设计.docx_第2页
第2页 / 共16页


点击查看更多>>
资源描述
摘要:数字电子钟的设计方法有多种,其中,利用单片机实现的电子钟具有编程灵活,精确度高等特点,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号。 本设计由单片机AT89S52芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能等特点。 该电子钟可以做到的功能:上电或按键复位后能自动显示系统默认时间“12-00-00”进入时钟运行状态。按电子钟调整键A1,则电子钟进入时钟调整状态,小时自动加1,按电子钟调整键A2,分自动加1,本电子时钟利用了8位LED显示时分秒。 关键词:单片机;电子钟;数码管 1 绪论 1.1课题背景 数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 1.2课程设计目的 (1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。 (2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。 (3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。 1.3设计技术参数 (1)时制式为24小时制。 (2)采用LED数码管显示时、分,秒采用数字显示。 (3)具有方便的时间调校功能。 (4)计时稳定度高,可精确校正计时精度。 2 电子钟的工作原理 2.1实现时钟计时的基本方法 利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现时钟计数。 1.计数初值计算 把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。 假设使用T/C0,方式1,50ms定时,fosc=12MHz。 则初值X满足(216-X)×1/12MHz×12μs =50000μs X=15536→0011110010110000→3CB0H 2中断方式 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒)。 3.计时方式 从秒到分和从分到时的计时是通过累加和数值比较实现。 2.2电子钟的时间显示 电子钟的时钟时间在六位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共8个单元如表1所示。 表1时间显示 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 37H 36H 35H 34H 33H 32H 31H 30H 时十位 时个位 分隔 分十位 分个位 分隔 秒十位 秒个位 2.3电子钟的时间调整 电子钟设置2个按键通过程序控制来完成电子钟的时间调整。 A键调小时;B键调分钟。 2.4总体方案介绍 1.计时方案 利用AT89S52单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。 2.键盘/显示方案 AT89S52的P0口和P2口外接由八个LED数码管(LED8~LED1)构成的显示器,用P0口作LED的段码输出口,P2口作八个LED数码管的位控输出线,P1口外接四个按键A、B构成键盘电路。 AT89S52 是一种低功耗,高性能的CMOS 8位微型计算机。它带有8K Flash 可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash 集成在一个芯片上,可用与解决复杂的问题,且成本较低。简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本书中采用的设计方案,结构如图1如示: 按键电路 晶振电路 复位电路 AT89S52 驱动电路 LED 图1 设计方案 3 电子钟原理图及元件清单 3.1电子钟电路原理图 1.时钟电路原理图 时钟电路原理图如图2所示,在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经 过触发器进行二分频之后,才成为单片机的时钟脉冲信号。 图2 时钟电路原理图 2.单片机最小系统 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。51单片机的最小系统电路图如图3所示。 复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。一般教科书推荐C 取10u,R取8.2K。当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。至于如何具体定量计算,可以参考电路分析相关书籍。 晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行.这一点是初学者容易忽略的. 图3 单片机最小系统 3.单片机复位电路 单片机复位的条件是:必须使RST/VPD 或RST引(9)加上持续两个机器周期(即24个振荡周期)的高电平。例如,若时钟频率为12 MHz,每机器周期为1μs,则只需2μs以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。单片机常见的复位如图4所示。电路为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。只要保证RESET为高电平的时间大于两个机器周期,便能正常复位。 该电路除具有上电复位功能外,若要复位,只需按图中的RESET键,此时电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。 图4 单片机复位电路 4.显示器工作原理 系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。 3.2元件清单 电子钟元件清单如表2所示。 表2 电子钟元器件清单 元件名称 规格型号 数量(个) 单片机 AT89S52 1 显示驱动三极管 A1013 8 晶振 11.0592MHz 1 电容 30pF 2 电容 22μF 1 按键 BUTTON 2 排阻 RESPACK-8/10K 1 4 程序流程图 定时器0中断服务程序 重设定时器值 关闭所有位,更新段码 选通下一位数码管 增量位索引 RETI 图6 定时0中断服务程序 YES 数字电子钟主要包括初始化程序,中断服务程序和键处理程序。程序流程图如图5,图6,图7,图8所示。 图7 定时1服务中断程序 图5 电子时钟初始化 电子时钟 初始化定时器 设置上电默认显示时间 键盘扫描及处理 YES YES NO YES NO NO 定时器1中断服务程序 中断是否 达100次(1s) 秒是否满60 秒加1 分是否满60 分清0,小时加1 小时是否满24 小时清0 RETI 秒清0,分加1 图8 键处理程序 键处理子程序 小时加1 RET 按键为AN1 按键为AN2 YES 分加1 YES NO NO 4.1本章小结 程序设计无疑是单片机学习中的重中之重,写不好程序就无法对单片机进行高效的控制。 对于简单的程序而言,不需要事先画程序流程图,因为程序简单,条理分明。但对于功能稍微强大的程序来说,不画流程图就很容易走弯路,造成条理不清晰,思维混乱。 C语言以它独特的函数结构模块化正逐步推广到嵌入式的控制。我相信在不久的将来,C在嵌入式中的地位是不可动摇的。 5 源程序 #include <reg51.h> #include <intrins.h> unsigned char data dis_digit; unsigned char key_s, key_v; unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8]; unsigned char data dis_index; unsigned char hour,min,sec; unsigned char sec100; sbit K1 = P1^4; sbit K2 = P1^5; bit scan_key(); void proc_key(); void inc_sec(); void inc_min(); void inc_hour(); void display(); void delayms(unsigned char ms); void main(void) { P0 = 0xff; P2 = 0xff; TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xdc; TL1 = 0; TH0 = 0xFC; TL0 = 0x17; hour = 12; min = 00; sec = 00; sec100 = 0; dis_buf[0] = dis_code[hour / 10]; // 时十位 dis_buf[1] = dis_code[hour % 10]; // 时个位 dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 dis_buf[6] = dis_code[sec / 10]; // 秒十位 dis_buf[7] = dis_code[sec % 10]; // 秒个位 dis_buf[2] = 0xbf; // 显示"-" dis_buf[5] = 0xbf; // 显示"-" dis_digit = 0xfe; dis_index = 0; TCON = 0x01; IE = 0x8a; // 使能timer0,1 中断 TR0 = 1; TR1 = 1; key_v = 0x03; while(1) { if(scan_key()) { delayms(10); if(scan_key()) { key_v = key_s; proc_key(); } } } } bit scan_key() { key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1; return(key_s ^ key_v); } void proc_key() { EA = 0; if((key_v & 0x01) == 0) // K1 { inc_hour(); } else if((key_v & 0x02) == 0) // K2 { min++; if(min > 59) { min = 0; } dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 } EA = 1; } void timer0() interrupt 1 // 定时器0中断服务程序, 用于数码管的动态扫描 // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 // dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管 // dis_buf --- 显于缓冲区基地址 { TH0 = 0xFC; TL0 = 0x17; P2 = 0xff; // 先关闭所有数码管 P0 = dis_buf[dis_index]; // 显示代码传送到P0口 P2 = dis_digit; // dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管 dis_index++; // dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 } void timer1() interrupt 3 { TH1 = 0xdc; sec100++; if(sec100 >= 100) { sec100 = 0; inc_sec(); } } void inc_sec() { sec++; if(sec > 59) { sec = 0; inc_min(); } dis_buf[6] = dis_code[sec / 10]; // 秒十位 dis_buf[7] = dis_code[sec % 10]; // 秒个位 } void inc_min() { min++; if(min > 59) { min = 0; inc_hour(); } dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 } void inc_hour() { hour++; if(hour > 23) { hour = 0; } if(hour > 9) dis_buf[0] = dis_code[hour / 10]; // 时十位 else dis_buf[0] = 0xff; // 当小时的十位为0时不显示 dis_buf[1] = dis_code[hour % 10]; // 时个位 } void delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } } 6 结论 在调试运行过程中,在所有参数正确的情况下,我的结果仍出现运行缓慢情况。产生误差的主要原因是我们用软件计时,计时1秒是采用定时器的中断服务程序。当电子钟运行1秒,执行中断程序需要一定时间,这个时间就是所产生的误差,这个误差是不可避免的。同时,单片机工作也会受到环境的影响,比如温度、湿度,以及其它电子设备的干扰。 因此,应该让电子钟工作在适度温度、干燥和电子干扰较少的环境下,还有一种方法就是采用实时时钟芯片,这样可以使误差降低到最少。 因为我对单片机的掌握还不够全面,硬件做的也不多,所以先做一个不带实时时钟芯片的电子钟暂且练习对定时器/计数器的用法,还有一点就是系统简单好调试,以保证按时完成设计任务。在以后的学习生活中,我会逐渐增加它的功能,比如说加实时时钟芯片,加温度控制,加闹钟等功能来完善这个电子钟。 7 课程设计体会 首先,感谢我的指导老师黄喜云老师,有了她的谆谆教诲,处处提点,我才得以成功的完成。老师一次次给我指出程序中的错误,让我修改再重新编写。老师在课堂上严格要求我们,这是对我们的负责,严师出高徒。而我的自由散漫的性格弱点也由于于老师督促和鞭策变得勤奋,上进,我学到的不仅仅是书本上的知识,还有做人的道理。老师们严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。在此谨向各位老师致以诚挚的谢意和崇高的敬意。 通过这次的设计使我认识到我对单片机编程方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。 参考文献 1 郑君里,应启珩,杨为理. 信号与系统(第二版)上册[M]. 高等教育出版社,2000 2 郑君里,应启珩,杨为理. 信号与系统(第二版)下册[M]. 高等教育出版社,2000 3 谭浩强. C程序设计(第二版)[M]. 清华大学出版社,2003 4 W.Richard Stevens,范建华译. TCP/IP详解卷1:协议[M]. 机械工业出版社,2000 5 Androw S. Tanenbaum. 计算机网络(第4版)[M]. Pearson,2004 6 吴坚,刘高平.基于GPRS网络的点对点图像传输方案[J].计算机应用研究,2004,5:222-223,231 7 W.Simpson, Editor. The Point-to-Point Protocol, RFC1661 [EB/OL]. July 1994 8 WAVECOM. AT Commands Interface Guide, Revision 002[EB/OL].6th November 2003 附录1 图 图1 总体电路图 图2 PCB板
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服