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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机多功能电子钟设计.docx

1、单片机多功能电子钟设计 摘要:本文为基于单片机的数字电子时钟的设计。单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。而51系列的单片机是各单片机中最为典型和最有代表性的一种。,本次设计提出了系统总体设计方案,并设计了各部分硬件模块和软件流程,在用C语言设计了具体软件程序后,将各个模块完全编译通过过后,结果证明了该设计系统的可行性。通过运用所学的知识及查阅参考大量资料,按照课程设计的基本要求完成了设计。随着科学技术的不断发展,人们对时间计量的精度要求越来越高。数字式电子钟用集成电路计时时,译码代替机械式传动,

2、用LED显示器代替指针显示进而显示时间,减小了计时误差.这种表具有时、分、秒、显示时间的功能,还可以进行时、分的校对。片选的灵活性好。传统的数字电子时钟采用了较多的分立元器件,不仅占用了很大的空间而且利用率也比很低,随着系统设计复杂度的不断提高,用传统时钟系统设计方法很难满足设计需求。该设计利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示数字的设计方案,适当地解决了实际生产和日常生活中对计时高精确度的要求,因此该设计在现代社会中具有广泛的应用性。关键字:51单片机 ;电子时钟 ; 数码管显示 ; C程序引言1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基

3、础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。1 概论1.1设计目的单片机

4、以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。本次数字时钟的设计就是需要通过选择合适的单片机来进行主控,再结合电路的知识,同时在软件的设计过程中用到液晶显示驱动、模数转换程序及汉字库的的设计,做到对我们所学数电、模电、单片机等知识的综合应用,最终实现所设计数字电子秤的各项功能,达到“巩固知识,培养技能,学而用之”的实践目的。通过这次课程设计,不但要提高我们在工作中的学习能力、探究能力、应用能力和动手能力,还要历练我们不畏艰难、不懂便学、有漏必补的认真严谨的工作态度,强化我们的社会适应力和社会竞争力,为走向社会提前试水,完善自我。1.2 设计要求 设计应包括以下基本功能:(1)应用AT

5、89C51单片机设计实现数字时钟电路。(2)显示的数据为12:00:00,然后电路会自动开始计时。(3)电路中有时、分、秒各自单独的调整按钮,时间调整按钮每按一次,相应的显示时间加1。(4)实现时分秒和的调时功能。 (5) 采用C语言编写程序并调试。2 设计流程图 N N N NN N Y NN Y Y 图2 设计流程图3 电子元件介绍3.1 AT89C51介绍高AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能、CMOS、8位单片机。该器件采用ATMEL高密度

6、非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。AT89C51的管脚图如图3.1所示:图3.1 AT89C51管脚图 3.1.1 AT89C51标准功能 4k 字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。3.1.2

7、 AT89C51主要特性1、与MCS-51 兼容2、4K字节可编程闪烁存储器3、寿命:1000写/擦循环4、数据保留时间:10年5、全静态工作:0Hz-24Hz6、三级程序存储器锁定7、128*8位内部RAM8、32可编程I/O线9、两个16位定时器/计数器10、5个中断源11、可编程串行通道12、片内振荡器和时钟电路 4 电路设计4.1数字钟的构成 数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟. 晶体振荡器电路 晶体振荡器电路给数字

8、钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路. 分频器电路 分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数.分频器实际上也就是计数器. 时间计数器电路 时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器. 译码驱动电路 译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并

9、且为保证数码管正常工作提供足够的工作电流. 数码管 数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管.4.2数字钟的工作原理 设计原理主要利用AT89C51单片机,由单片机的p2口控制数码管的位显示,p1口控制数码管的段显示,p3.0p3.2与按键相接用于时间校正。整个系统工作时,秒信号产生器是整个系统的时基信号,他直接决定计时系统的精度,将标准信号送入计数器的时钟脉冲。分计数器也采用60进制计数器,每累计60分钟,发出一个“分脉冲”信号,该信号将被送到时计数器。时计数器采用24进制计数器,可以实现对一天24小时的累计。显示电路将“时”“分”“秒”计数器

10、的输出,通过六个八段led显示器现出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”“分”“秒”显示数字进行校对调整。4.3各部分电路分析 此实时时钟的设计与实现,主要采用了6只LED数码管,89C51内部二进制16位定时器/计数器,可编程中断控制器89C51等芯片,包括显示模块,运算模块和校时模块三大功能模块。4.3.1显示模块 用89C51控制,用数码管的显示功能来设计。显示部分硬件用六只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这8只发光二极管的阳极加+5 V或0 V的电压使不同的二极管发光,形成不同的数字。该模

11、块主要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表示的时位、分位和秒位数值转化为十进制,并通过8只数码管显示出来。CPU直接往LED输出八段代码,省去了硬件译码器。P1口作为8段数据输出口,经74LS04驱动后到达各LED。只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只LED依次出现数字显示。4.3.2运算模块该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为秒定时模块和运算模块。秒定时模块负责提供中断信号,由于CP

12、U运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现。本实验中用89C51定时器/计数器,但因为89C51供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是89C51工作方式为方式1,产生一个50ms的脉冲信号。运算模块负责时、分、秒的计算,该模块主要通过89C51的IR1号中断来实现,但由于每50ms一次中断请求,所以在中断服务程序必须利用已申请内存单元35H来统计中断请求的次数,只有当35H的值为20时,才能让秒单元内的数值加1。在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当

13、秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。当时加到24时,直接清零。然后转到调用处。4.3.3校时模块 该模块主要功能是修改时、分、秒内存单元的数值。每按一次键,对应的显示值便加1。分、 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。注意:在主程序中对时间进行调校前应关闭中断,以防在调校过程中定时中断服务程序也对时间进行修改而造成混淆。4.3.4电路仿真图 在6块LED数码管上能实现数字时钟的时、分、秒显示,并能对时、分、秒进行加1校对、减1校对和清零。本实验中陪。P3.0键、P3.1键

14、、P3.2键是分别对时、分、秒的加1校对。并且开机时时钟时从120000开始计时的,到235959时在回到000000. 图4.3.4电路仿真图5 软件设计 在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。本系统的软件设计主要分为系统初始化、按键、显示处理及信号频率输入处理。程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点: (1)分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合理的计算方法及适当的

15、数据结构,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。(2) 根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。(3)编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。程序数据的一种理想方法是结构化程序设计方法。结构化程序设计是对利用到的控制结构类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、显示子程序、数据采集子程序和延时程

16、序等组成。5.1 C语言在单片机中的应用C语言是一种通用的计算机程序设计语言,在国际上非常流行。它既可以用来编写计算机的系统程序,也可以用来编写一般的应用程序。以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。C语言是当前最流行的程序设计语言,它像其它高级语言一样,面向用户,面向解题的过程,编程者不必熟悉具体的计算机内部结构和指令;C语言又像汇编语言一样,可以对机器硬件进行操作。如进行端口I,0操作、位操作、地址操作,并可内嵌汇编指令,将汇编指令当作它的语句一样。我们知道,汇编语言将涉及计算机硬件,所以C语言又像低级语言一样,可以对计算机硬件进行控制,因此人们把它称为介于高级语言

17、与低级语言之间的一种中级语言。正是因为C语言具有这样的特性,所以很适合编写要对硬件进行操作的软件程序。本文采用C语言进行编写因为此系统软件比较,其存储量较大,因此必须应用C语言编程。5.2程序设计结束语 第三学期的单片机课程设计到目前为止可以说是告一段落了,我也顺利的完成了自己的课题简易电子时钟的设计,由于自己一心准备考研在这次课程设计上除了那些必要的时间其余也么有花太多的时间,本想着是做实物的,但在程序上出了点问题就没花时间去做了,所以这次设计还不算很完美。刚开始被拿到这个课题的,感觉挺迷茫的,当时就只知道软件编程要用到定时器,自己也就在这方面懂一点,其余的关于硬件电路,液晶显示电路的驱动的

18、什么都不知道,后来回来之后就看了一下51单片机课程设计那本书,自己还学过这门专业可,加上在网上找了一些资料对硬件电路的设计有了一定的了解。在大脑里面有了一个大致的思路了,于是就把仿真软件装好开始了我的课设。本次课设让我对单片机有了更深入的认识,现代社会中几乎处处都有单片机的影子,电子产品离不开它。课设提高了我的单片机实际运用能力,也发现了自己以前学习的不扎实,对问题不求甚解。现在才知道“书到用时方少”啊!学习还是得扎实。本次课设能顺利完成,甚是感谢指导老师的帮助。参考文献1张洪润,易涛.单片机应用技术教程M.清华大学出版社.20062康华光.电子技术基础M.高等教育出版社.20003阎石.模拟

19、电子技术基础M.华中科技大学出版社.20054刘乐善.微型计算机接口技术及应用M.华中科技大学出版社.20055张毅刚.MCS-51单片机应用设计M.哈尔滨工业大学出版社.2005附录一 C语言程序#include#define uchar unsigned char#define uint unsigned intsbit rs=P33;sbit rw=P34;sbit lcden=P35;unsigned int a,b,c;uchar count,k;uchar shi,fen,miao;uchar code table=12:00:00;void delay(uint z) uint

20、x,y; for(x=0;xz;x+) for(y=0;y110;y+);void w_com(uchar com) rs=0; lcden=0; P1=com; delay(5); lcden=1;/给高脉冲 delay(5); lcden=0;/*写指令*/void w_data(uchar date) rs=1; lcden=0; P1=date; delay(5); lcden=1; delay(5); lcden=0;/*写数据*/*初始化函数*/void w_sfm(uchar add,uchar date)/时分秒 uchar shi,ge; shi=date/10; ge=da

21、te%10; w_com(0x80+add); w_data(0x30+shi); w_data(0x30+ge); void init() uchar num; lcden=0;/初始化使能为0 fen=00; miao=00; shi=00; w_com(0x30);/写入显示模式指令码 w_com(0x0c);/写入显示开/关及光标指令码 w_com(0x06);/当写一个字符后,地址指针加一,光标加一,不动光标不闪烁 w_com(0x01); /清零作 w_com(0x00);/代表第一位 for(num=0;num8;num+) w_data(tablenum); delay(5);

22、 w_sfm(0,shi); w_sfm(3,fen); w_sfm(6,miao); TMOD=0x01; TH0=(65536-50000)/256;/50毫秒产生一次中断 TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;void key() P2=0x0f;/,a=P2; /先对P2置数 行扫描 if(P2!=0x0f) /判断是否有键按下 delay(100); /延时,软件去干扰 if(P2!=0x0f) /确认按键按下 a=P2; P2=0x0f0; if(P2!=0x0f0) b=P2; c=a&b; else c=P2;void keysca

23、n() key(); if(c=0x88)/闪烁位置/选择要调整的项目,左移 k+; if(k=1)/k键按一下依次向左移 TR0=0; delay(100); w_com(0x80+0x07); w_com(0x0f);/左移光标开始闪烁 if(k=2) delay(100); w_com(0x80+0x04); w_com(0x0f);/左移光标开始闪烁 if(k=3) delay(100); w_com(0x80+0x01); w_com(0x0f);/光标恢复原样,不闪烁 if(k=4) k=0; delay(100); w_com(0x0c); TR0=1; if(c=0x84) i

24、f(k=1)/秒升调节 miao+; if(miao=60) miao=0; w_sfm(6,miao); w_com(0x80+0x07); if(k=2)/分升调节 fen+; if(fen=60) fen=0; w_sfm(3,fen); w_com(0x80+0x04); if(k=3)/时升调节 shi+; if(shi=24) shi=0; w_sfm(0,shi); w_com(0x80+0x01); if(c=0x82) if(k=1)/秒降调节 miao-; if(miao=-1) miao=59; w_sfm(6,miao); w_com(0x80+0x07); if(k=

25、2)/分降调节 fen-; if(fen=-1) fen=59; w_sfm(3,fen); w_com(0x80+0x04); if(k=3)/时降调节 shi-; if(shi=-1) shi=23; w_sfm(0,shi); w_com(0x80+0x01); void main() rw=0; init(); while(1) keyscan(); if(count=20)/20*50毫秒=1000毫秒=1秒 count=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+; if(shi=24) shi=0; w_sfm(0,shi); w_sfm(3,fen); w_sfm(6,miao); void timer0() interrupt 1 TH0=(65536-50000)/256;/50毫秒产生一次中断 TL0=(65536-50000)%256; count+;附录二 原理图

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

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