ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:484.57KB ,
资源ID:4444573      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4444573.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子时钟设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电子时钟设计.docx

1、电子时钟设计目 录前言2一、概述31.1课程设计项目名称31.2项目设计目的及技术要求31.3实验使用的仪器设备3二、整体制作思路3三、系统设计43.1硬件框图43.2 电路原理与原理图83.2程序框图9四、仿真及结果124.1 Protues仿真图124.2仿真结果134.3实物图片13五、结束语14六、参考文献15附录(源程序)前言 时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。 现今,高精度的计时工具大多数都使用了石

2、英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实

3、现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC12C5A06S2芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。一、概述1.1课程设计项目名称电子时钟设计1.2项目设计目的及技术要求基于51单片机,通过设计外围硬件设计和编写软件程序,完成LED七段数码管数字钟电路,数字钟显示格式为:HH:MM

4、:SS。具有通过键盘能够调整时、分、秒的功能。要求设计者拥有对51单片机的基本运用能力。拥有使用计算机语言进行简单程序开发的能力。以及对新接触电子模块的学习使用能力。1.3实验使用的仪器设备一块单片机STC12C5A60S2、一块74LS04芯片、3个2位数码管、4个按键、一个石英晶振、两个30pf的电容、5个发光二极管。二、整体制作思路 首先,我们明确本设计需要解决的问题有: (1)芯片的选择 (2)硬件的连接 (3)电子时钟的实现然后围绕这些问题进行总体考虑并逐项解决。通过查阅大量资料,特别是论文,我们选择了单片机STC12C5A60S2,然后搭建了最小系统,通过proteus仿真,证实我

5、们的方案是切实可行的,能够完成电子时钟功能。最后通过把程序烧到单片机中,实现了设计要求。在这过程中,其实并不是一帆风顺的,首先对最小系统的搭建就经过我们的大量讨论,然后才确定了器件的选择。由于proteus中没有STC12C5A60S2,我们用AT89C51进行仿真实验。接着就是程序了,这也是我们头痛的地方。通过看书并到图书馆借阅单片机编程相关资料,我们编出了程序,但仿真时却发现有错误,通过反复修改并仿真,才最终完成设计要求。最后我们将程序烧到焊好的单片机中,完成了本次课程设计。3、系统设计3.1硬件框图本设计使用单片机STC12C5A60S2作为主控芯片,通过外接按钮进行时间调整,完成时间调

6、整,并在数码管上显示出来相应的结果。根据本次设计的要求,在尽量要求准确精简的条件下设计了以下电路框图。本次设计包含有四个主要的部分:单片机的最小系统,即由单片机,时钟电路,复位电路组成;数码管显示电路和按键控制电路。其整体设计框图如下图3.1所示:图3.1 电路框图STC12C5A60S2单片机功能介绍:STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机

7、控制,强干扰场合。1.增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机);3.工作频率范围:0-35MHz,相当于普通8051的0420MHz;4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节;5.片上集成1280字节RAM;6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双

8、向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);9.看门狗;10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%

9、;12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz15.5MHz, 3.3V单片机为:8MHz12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器再加上2路PCA模块可再实现2个16位定时器;14.2个时钟输出口,可由T0的溢出在P3.4/T0

10、输出时钟,可由T1的溢出在P3.5/T1输出时钟;15外部中断I/O口7路传统的下降沿中断或低电平触发中断并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ),CCP1/P1.4(也可通过寄存器设置到P4.3);16.PWM(2路)/PCA(可编程计数器阵列,2路):也可用来当2路D/A使用也可用来再实现2个定时器也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17. A/D转换,10位精度ADC共8路,转换

11、速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);20.工作温度范围:-40-+85(工业级)/0-75(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU

12、,三线通信,还多了串口。时钟电路模块: 单片机时钟内部有一个高增益反向放大器,用于构成时钟震荡电路,XTAL1为该放大器的输入端,XTAL2为放大器的输出端,但要形成时钟还需附加其他的电路。(1)内部时钟方式 利用单片机内部的高增益反相放大器,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡。定时元件一般采用石英晶体和电容组成的并联谐振回路。晶体可在1.212MHz之间任选,电容可在530pF之间选择,电容C1和C2的大小可起频率微调的作用,电容大小要和晶体的容性负载阻抗相匹配,否则不易起振。 (2)外部时钟方式 外部时钟方式常用于多机系统,以便各个单片机能够同步工作。对

13、外部振荡信号无特殊要求,但需保证脉冲宽度不小于20ns,且频率应低于单片机所支持的最高频率。 本设计采用12Mhz的晶振,30pF的电容,内部时钟电路。如图3.2所示:图3.2 时钟电路 复位电路模块:计算机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。 MCS-51单片机有一个复位引脚RST,采用施密特触发输入,对于CHMOS单片机,RST引脚的内部有一个低拉电路。当振荡器起振后,只要该引脚上出现2个机器周期以上的高电平时即可确保使器件复位。复位完成后,如果RST端继续保持高电平,单片机就一直处于复位状态,只有RST端恢复低电平后,单片机才

14、能进入其他工作状态。 RST端的外部复位电路有两种复位操作形式:上电自动复位和按键手动复位。 (1)上电自动复位电路 对于HMOS型单片机,只要在RST复位端接一个电容至VCC和一个电阻至VSS(地),就能实现上电自动复位。在加电瞬间,电容通过电阻充电,就在RST端出现一定宽度的高电平,只要高电平时间足够长,就可以使单片机有效复位。RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间。VCC上升时间约为10ms,振荡器起振时间和频率有关。10MHz时约为1ms.1MHz时约为10ms,所以一般为了可靠的复位,RST在上电时应保持20ms以上的高电平。当振荡频率为12MHz时

15、,典型值为C=10Uf,R=8.2K。 (2)按键手动复位 按键手动复位有电平方式和脉冲方式两种。按键电平复位是通过使复位端经电阻与VCC接通而实现的;按键脉冲复位则是利用RC微分电路产生正脉冲来实现的。 复位电路采用手动复位和上电自动复位组合。如图3.3所示:图3.3 复位电路 外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。键盘控制模块:

16、 根据题目要求及另加的一些功能要求,总共只需要4个按键(如图3.4),故选用独立按键模式。 这4个键分别为,调时选择键k0、加值键k1、减值键k2、单片机复位键k3。下面具体介绍一下每个键的功能。 K0:时、分、秒的调时选择键。 K1:加值键,每按一次所选的时间值加1; K2:减值键,每按一次所选的时间值减1; K3:单片机手动复位键。图3.4 控制按键3.2电路原理与电路图3.2.1 电路原理 一个AT89C51单片机做为控制电路,用P0、P2口来控制数码管的段码和位码,利用动态扫描来实现数码管的显示。开通定时器T0中断来对数码管的查表和1秒的准确计时,然后利用P3口的低三位作为判断程序,判

17、断是否分时秒是否溢出,若无溢出则显示当前值,若溢出则清零实现时分秒的加一。3.2.2 电路原理图 图3.1电路原理图3.3程序框图3.3.1 系统软件设计主程序流程图 主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和案件处理模块,当有键按下时,则转入相应功能程序。图3.2 主程序流程图3.3.2 定时器/计数器T0中断服务程序 计数选择定时器/计数器T0.具体处理如下:定时器/计数器T0选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清零;分单元加到6

18、0则对时单元加1,同时分单元清零;时单元加到24则对时单元清零,标志一天时间计满,这样就行成了时钟关系。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器/计数器T0中断服务的流程图如下:图3.3 定时器/计数器T0中断服务程序的流程3.3.3 按键处理模块 按键处理设置为:如没有按键,则时钟正常走时。当按K0键一次,时钟暂停走动,进入调分状态,再按K0键一次,进入调小时状态,再按K0键一次,回到正常走时;对于K1和K2按键,如果是正常走时,按K1和K2不起作用,如果进入调时或调分状态,按K1可对时或分进行加1操作,小时加到24则回到0,分加到60则回到0;按K2可对时或分进行减1

19、操作,小时减到负责回到23,分减到负则回到59。按键处理模块的流程如图所示:图3.4 按键处理模块的流程四、仿真及结果4.1 Protues仿真图 通过protues建立基于AT80C51单片机仿真原理图,按键从左到右,第一个键为模式选择键,按第一次暂停设分钟,按第二次暂停,设小时,按第三次从新走动。第二个键为加1键,第二个键为减一键。4.2仿真结果 通过Proteus进行仿真,通过按键调整让其显示时间为12时07分。4.3实物图片 上图是由STC12C5A06S2单片机做出的实物,可以通过按钮调整时间。五、结束语 我在这一次数字电子钟的设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学

20、的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识解决实际问题的能力。通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,也从中得知了很多书本上无法得知的知识。我

21、们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。 六、参考文献1曹巧媛,单片机原理及应用M,北京:电子工业出版社,1997.7 2赵秀珍,单永磊,单片微型计算机原理及其应用M,北京:中国水利水电出版社,2001.8 3张毅刚,修林成,胡振江,MCS-51单片机应用设计M,哈尔滨:哈

22、尔滨工业大学出版社,1990.8 4张洪润,兰清华,单片机应用技术教程M,北京:清华大学出版社,1997.11 5李华,MCS-51系列单片机实用接口技术M,北京:北京航空航天大学出版社,1993.8 6陈景初,单片机应用系统设计与实践M,北京:北京航空航天大学出版社7马忠梅,单片机的C语言Windows环境编程宝典M, 北京:北京航空航天大学出版社,2003.6 8李光飞,单片机C程序设计指导M,北京:北京航空航天大学出版社,2003.01 附录源程序如下:#include#define uchar unsigned char#define uint unsigned intuchar se

23、c,min,hour;/定义时、分、秒变量uchar counter10ms0,counter10ms1; /定义T0和T1的10ms计数变量uchar counter05s0;/定义0.5秒变量uchar KeyCounter; /定义保存功能按键计数值变量uchar OldKey; /定义保存按键状态变量bit AddFlag,SubbFlag;/定义加、减按键标志bit FlashFlag; /定义闪烁标志sbit LED1=P10;sbit LED2=P11;sbit LED3=P12;sbit LED4=P13;uchar Disbuff8=1,2,10,3,4,10,5,6;/定义

24、数码管显示缓冲区单元uchar code DisCode12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff; /共阳数码管段码,09及“-”“熄灭”字符的字型码/uchar code DisCode12=0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00; /共阴数码管段码,09及“-”“熄灭”字符的字型码sbit LED=P34; /工作指示灯/* 延时函数Delaynms(uint dly) * 延时时间 dly x 1ms 12MHz */void

25、 Delaynms(uint dly) uchar i; while(dly-) for(i=0;i123;i+);/*/* 显示函数Display() * 功能:根据将8个数码管显示一遍 */void Display(void) uchar i,n=0x01; for(i=0;i8;i+) P0=DisCodeDisbuffi; /送段码 P2=n; /开位选 Delaynms(1); /延时 n=n1; /位选移位 P0=0xff; /段码低电平全灭 P2=0xff; /经过非门后变成高电平,使得位选关闭 /*/* BIN码变换成BCD码函数TimeDataBin2Bcd() * 功能:将

26、时、分、秒分离出十位和个位 */void TimeDataBin2Bcd() Disbuff0=hour/10;/分离小时十位 Disbuff1=hour%10;/分离小时个位 Disbuff3=min/10;/分离分钟十位 Disbuff4=min%10;/分离分钟个位 Disbuff6=sec/10;/分离秒十位 Disbuff7=sec%10;/分离秒个位/*/* 读入按键函数ReadKey() * 功能:若有按键按下,返回按键值 * 若没有按键按下,返回255 */uchar ReadKey() uchar Key; Key=P3&0xe0; /读入按键值 P3&1110 0000 i

27、f(Key!=0xe0) /若有键按下 Delaynms(10); Key=P3&0xe0; /重新读入按键值 if(Key!=0xe0) /若有键按下 if(Key!=0xe0)&(OldKey=0xe0) /判断是否下降沿 ? OldKey=Key; /保存本次按键值 return(Key); /返回按键值 OldKey=Key; /无键按下,保存本次按键值,返回255 return(255); /不能够删,否则出错 ?/*/* 按键分析函数KeyAnalysis(uchar Key) * 功能:对功能键计数 * 对加、减键设标志 */void KeyAnalysis(uchar Key) if(Key!=255) /有键按下 switch(Key) case 0x60: KeyCounter+; /功能键按下 0110 0000 因为85行Key=P3&0xe0; /重新读入按键值 if(KeyCounter=3)KeyCounter=0; break; case 0xa0: if(KeyCounter!=0)AddFlag=1;break;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1