多功能数字钟的设计论文.docx
- 文档编号:26333334
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:42
- 大小:165.69KB
多功能数字钟的设计论文.docx
《多功能数字钟的设计论文.docx》由会员分享,可在线阅读,更多相关《多功能数字钟的设计论文.docx(42页珍藏版)》请在冰豆网上搜索。
多功能数字钟的设计论文
目录
0前言2
1总体方案设计3
2硬件电路设计3
2.1单片机最小系统3
2.1.1时钟电路设计4
2.1.2复位电路设计5
2.2LCD显示电路设计5
2.3按键选择电路设计6
2.4蜂鸣器电路设计7
3软件设计7
3.1主程序设计8
3.1.1.中断服务子程序8
3.2LCD显示子程序9
3.3键扫描子程序10
4调试分析11
4.1软件调试11
4.1硬件调试11
5结论及进一步设想12
参考文献12
课设体会12
附录1电路原理图13
附录2程序清单14
多功能数字钟的设计
谭欣沈阳航空航天大学自动化学院
摘要:
本文设计了一种基于单片机控制的多功能数字钟系统。
该系统主要以单片机芯片AT89C52为核心控制器,通过硬件电路的制作以及软件程序的编制,主要由单片机最小系统、LCD液晶显示模块、按键选择模块、蜂鸣器模块组成。
可以实现准确显示时间且能显示到秒,可随时进行时间及闹铃调整,具有24或12时制转换功能,并且设有一个“复位”按键。
设计以硬件软件化为指导思想,充分发挥单片机功能,大部分能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该数字钟系统还具有功耗小、成本低的特点,具有很强的实用性。
由于系统所用的元器件较少,单片机被占用的I/O口不多,因此具有一定的可扩展性。
关键词:
AT89C52单片机;LCD液晶显示;时制转换;复位
0前言
近年来随着科技的飞速发展,单片机的应用正在不断的走向深入,同时带动着传统控制检测日新月异更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。
单片机的应用的重要意义在于,它从根本上改变了传统意义设计理念和设计方法。
曾经必须要通过模拟电路或者是数字电路实现的功能,单片机应用软件技术就可以实现,这种微控技术不仅简化了电路,而且还可以改变软件程序或者参数实现不同的设计。
数字钟已经成为人们日常生活中不可缺少的必需品,广泛的应用于家庭以及办公室等公共场所。
给我们生活、学习、工作、娱乐带来了极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
尽管目前市场上已有现成的数字中集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时功能也可以完成数字钟的电路设计,因此进行数字钟的设计是必要的。
本次设计的多功能数字钟就是应用单片机的计时功能为设计核心,当计时器满则实行中断程序,对LCD的显示的数字按进制进行刷新,当设定的闹铃时间与当前显示的时间相同时,则蜂鸣器和闹铃灯开始工作,达到提醒时间的作用。
1总体方案设计
针对本课题的设计任务,进行分析得到:
本次设计用单片机做为总控制系统,由LCD进行数字显示,由6个开关键作为键盘进行对时间的调整和闹铃设定。
根据设计要求采用AT89C52单片机做为控制器,时钟电路方案设计有两种:
方案一:
直接采用单片机定时计数器提供的秒信号,使用软件编程实现时、分、秒计数。
采用此种方案可以减少芯片的使用,节约成本,实现的时间误差较小,但软件编程比较麻烦。
方案二:
采用时间专用芯片实现时钟,时钟芯片是一种高性能的针对时钟的芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度比较高,芯片用的多,成本高,但软件程序设计较易实现。
综合各方面因素,针对此次多功能数字钟的设计,我采用方案一来实现本次设计的要求。
该多功能数字钟的设计,总体上大致可分为以下几个部分组成:
1.时钟电路部分;2.复位电路部分;3.LCD显示电路部分;4.按键选择电路部分;5.蜂鸣器电路部分。
系统原理框图如图1所示。
图1系统原理框图
整个电路的工作原理是由晶振芯片提供准确的时钟电路,由键盘调整数字钟的功能,并通过软件编程把时间数字通过LCD显示出来。
2硬件电路设计
2.1单片机最小系统
单片机最小系统电路主要包括复位电路和时钟电路,是单片机工作的基础。
所谓最小系统,是指一个真正可用的单片机的最小配置系统。
对于单片机内部资源已能够满足系统的需要的,可直接采用最小系统。
由于MCS—51系列单片机片内不能集成时钟电路所需要的晶体振荡器,也没有复位电路,因此在构成最小系统时,必须外接这些部件。
根据片内有无程序存储器,MCS—51的单片机最小系统分为两种情况。
第一种情况:
8051/8751片内有4KB的ROM/EPROM,因此,只需要外接晶体振荡器和复位电路就可以构成最小系统。
第二种情况:
8031片内无程序存储器,因此,在构成最小系统时,不仅要外接晶体振荡器和复位电路,还应在外扩展程序存储器。
本设计采用的89C52单片机,故无需外扩程序存储器。
所需的电路如图2所示。
图2单片机最小系统
2.1.1时钟电路设计
MCS-51单片机内部的振荡电路是一个到增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。
单片机内部虽然有震荡电路,但要形成时钟,外部还需要附加电路。
石晶振荡和陶瓷振荡均可采用.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
51单片机的时钟产生方式有两种,分别为:
内部时钟方式和外部时钟方式。
利用其内部的震荡电路XTAL1和XTAL2引线上外接定时元件,内部震荡电路便产生自激震荡,用示波器可以观察到XTAL2输出的时钟信号。
在MCS-51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体震荡器与电容构成稳定的自激震荡器,电路如下图3所示:
图3时钟电路
电路中,电容器C1和C2对振荡器有微调作用,通常的取值范围是30+/-10PF;石英晶体选择6MHZ或12MHZ都可以。
其结果只是机器周期时间不同,影响计数器的计数初值。
2.1.2复位电路设计
复位是单片机的初始化操作,其主要功能是把程序计数器PC的内容初始化为0000H,也就是使单片机从0000H单元开始执行程序,同时使CPU及其他的功能部件都从一个确定的初始状态开始工作。
除了系统上电时需要进行正常的初始化外,当程序运行出错或操作错误导致处于“死机”状态时都需要进行复位操作。
复位后PC=0000H,SP=07H,P0--P3=0FFH。
复位电路通常采用上电复位方式,上电复位时通过外部复位电路的电容充电来实现的。
当电源Vcc接通时只要电压上升时间不超过1ms,就可以实现自动上电复位。
复位电路如下图4所示。
图4复位电路
电路中阻容器件的参考值如图中所示,电解电容C3取1u,R1取1K,R2取100,开关按键可以选择专门的复位按键,也可以选择轻触开关。
在时钟电路工作后,只要在RST引脚上出现2个机器周期以上的高电平,就能确保单片机可靠复位。
2.2LCD显示电路设计
单片机应用系统中,通常都需要进行人-机对话。
这包括人对应用系统的状态干预与数据输入,以及应用系统向人们显示运行状态与运行结果。
显示器和键盘电路就是用来完成人-机对话活动的人-机通道。
由于单片机的并行口不能直接驱动LED显示器,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能够正常工作,所以采用LED显示装置较为麻烦。
本设计采用LCD显示装置。
液晶显示器简称LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性实现显示信息的。
液晶显示器具有体积小、重量轻、功耗极低、显示内容丰富等特点。
液晶显示器按其功能可分为三类:
笔段式液晶显示器、字符点阵式液晶显示器和图形点阵式液晶显示器。
本设计采用的是字符点阵式液晶显示器,它是一种专门用于显示字母、数字、符号等的点阵式液晶显示模块。
它是由若干个5x7或5x11等点阵符位组成的,每一个点阵字符位都可以显示一个字符。
点阵字符位之间有一定点距的间隔,这样就起到了字符间距和行距的作用。
此显示器接法简单,即把时钟信号显示在液晶显示器上,不仅结构简单清晰可见,而且又容易控制。
LCD液晶显示电路如下图5所示。
图5LCD液晶显示电路
其中,数据的传输采用P0口进行控制,其引脚VSS/VEE接地,VDD接+5V电压,E和RS端由P2.6和P2.7口进行控制。
2.3按键选择电路设计
数字钟的应用系统工作应具备两个基本功能,一是随时输入定时(闹钟)时间,二是随时对当前时间进行调整。
要实现这两项功能,可以接入键盘输入电路。
键盘结构可以分为独立式键盘和行列式键盘(矩阵式)两类,本设计中需要八个按键,因此选择独立式键盘,按键分别命名为:
调整时间按键,调整闹钟时间按键,调整时针按键,调整分针按键,开闹钟按键、关闹钟按键、24或12时制转换开关和复位开关,按键可以采用轻触开关。
按键选择电路如下图6所示。
图6按键选择电路
其中,调整时间按键的功能是设置当前时间,即当数字钟的时间有误差时,随时对它进行调整;调整闹钟时间按键的功能是设置定时(闹钟)时间;调整时针按键的功能是对时间值的小时位进行调整,每按一次+1;调整分针按键的功能是对时间值的分位进行调整每按一次+1;开闹钟按键的功能是开闹钟;关闹钟按键的功能是关闹钟;24或12时制转换开关的功能是对数字钟进行24或12时制转换,当开关闭合时为12时制数字钟,打开时为24时制数字钟;复位开关的功能是对当前显示时间值进行复位,复位后,即从00:
00:
00开始计时。
键盘的硬件电路设计只能保证八个按键信号的可靠进入,要想完成键盘的输入功能,还要靠软件编程来具体实现。
2.4蜂鸣器电路设计
设计要求定时(闹钟)时间到时要有声音提醒信号产生,可选择一只蜂鸣器来实现这个功能。
蜂鸣器有长声和短声两种,本设计中选择短声蜂鸣器--压电式蜂鸣器(HA)即可。
工作时约需10MA的驱动电流,具体驱动电路如下图7所示。
图7蜂鸣器电路
蜂鸣器(HA)一端接单片机的P3.6引脚,另一端接+5V的高电平,所以只要P3.6引脚上为低电平时,蜂鸣器就会发出鸣叫声音,否则,蜂鸣器不发声。
3软件设计
根据设计方案要求,应用Keil软件和Proteus软件对电路进行仿真,实现了设计的要求,具备了对时间即时的显示,对时间和闹铃的设定,24或12时制转换功能,并且设有一个“复位”按键等功能。
该课题的软件设计采用了模块化设计的思想即将程序划分为若干个相对独立的功能模块,接着画出每一个功能模块的详细流程图,并根据流程图编写程序,最后按照软件设计的总体结构框图,将各模块连接成一个完整的主程序。
软件的设计主要采用模块化的程序设计方法。
采用自顶向下的设计方法。
从总体到局部,再到细节,按要求将各功能以子模块的形式实现。
采用模块化设计可使程序的可读性好,修改与完善比较方便。
本设计中数字钟的系统软件程序由主程序和子程序组成,主程序包含初始化参数设置、按键处理、数码管显示模块等,在设计时各个模块都采用子程序结构设计,在主程序中调用。
由于定时器/计数器采用中断方式处理,因此还要编写定时器/计数器中断服务子程序,在定时器/计数器中断虎屋子程序中对时钟进行调整。
下面对软件各部分程序进行简要介绍:
3.1主程序设计
主程序的内容一般包括:
主程序的起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序调用等。
主程序主要是先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
主程序执行流程图如下图8所示。
否
是
图8主程序流程框图
3.1.1.中断服务子程序
定时器/计数器T0用于时间计时,选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清零;分单元加到60则对时单元加1,同时分单元清零;时单元加到24则对时单元清零,标志一天时间计满。
在对各单元计数的同时,把它们的值放到存储单元的指定位置,之后把计数内容送到显示缓存区准备显示。
定时器/计数器T0的中断程序流程框如图9所示。
N
Y
N
N
Y
N
Y
图9中断子程序流程框图
3.2LCD显示子程序:
LCD1602有64B的CGRAM,可用来写入自定义字符,5*8点阵的可写8个(每个占8字节),5*11点阵的可写4个(每个占16字节)写命令wcmd(0x40),显示所写入字符,送入数据0x00-0x07(对应显示8个字符)。
单片机通过P0口把要显示的数据的送到LCD的数据端,再根据得到的指令和数据在屏幕相应的位置上显示数据,LCD显示子程序流程图如下图10所示:
N
Y
图10显示流程框图
3.3键扫描子程序:
键盘扫描子程序的功能主要完成各键盘的任务,即对当前时间以及闹钟时间的调整、复位和时制转换。
判断是否有按键按下,去抖动,在判断是否有按键按下,分析键值,调取相应键值的函数实现各项功能。
由于机械触点的弹性作用,在闭合及断开开关的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5~10ms。
而按键稳定闭合时间的长短则由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次,所以为了保证CPU对键的一次闭合仅作一次处理,就必须要消除键抖动的问题。
常可用硬件和软件两种方法来消除键抖动。
本设计中采用的是软件消除键抖动的方法,具体的键扫描子程序的流程图如下图11所示。
N
Y
图11按键扫描取值流程框图
4调试分析
4.1软件调试
软件调试也是分模块分别调试,然后再联合起来进行联调。
软件的调试需要相应的硬件与其配合,只有利用了相应的硬件才能进行调试。
在软件的调试过程中也出现了很多错误,但经过反复的验证修改,最终使整个设计的软件程序部分正确无误。
在进行对时间分的调整时,调整分的时候如果调整不当,例如调整到59分钟的时候,又按了一下,分清0了,但时却加1,这与想要的结果不同,因为调时的时候,无论怎么调整分,与小时无关。
分析问题,是有序调整分的函数我直接调用了外部中断的带小时进位的分的函数导致了那样的问题。
解决方案是在编写一个不带小时进制的分加函数,当调整分时,直接调用这个子程序就解决了问题。
4.1硬件调试
在连接硬件电路时遇到了一些麻烦,由于第一次解除LCD显示器,对它的引脚功能不是很明白,把VSS,VDD,VEE引脚都接低电平了,导致了不能正常显示,R/W端接高电平是从LCD读取信息,接低电平是写入指令或数据,RS端接高电平是输入数据,接低电平是输入指令,E端=1时是读取信息(下降沿)执行指令我查找了大量资料后,明白了1602显示器的因脚功能,解决方案是VDD接高电平,并且R/W端接地,RS端和E端由单片机控制。
实现了单片机的总控制作用。
5结论及进一步设想
根据实验结果,本设计基本完成了设计要求,实现了时间在LCD液晶显示器上的显示,并且能够通过按键调整时间以及设置闹铃,开关闹铃等功能,但由于本次设计只设计了简单的时钟显示,没有设计显示年,月,日的功能,可以通过软件编程实现该功能。
同时在硬件电路上添加DS18B20温度传感器芯片,使得它与单片机相连,再通过软件编程,能够实现对温度的显示,完善了数字钟的多功能性。
参考文献
[1]韩志军.单片机系统设计与应用实例.北京:
机械工业出版社,2010.2
[2]周润景.基于proteus的电路及单片机设计与仿真(第2版).北京:
北京航空航天大学出版社,2009.12
[3]谢维成.单片机原理与应用及C51程序设计.北京:
清华大学出版社,2006
[4]张毅刚.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社,1997
[5]张靖武.单片机系统的proteus设计与仿真.北京:
电子工业出版社,2007.4
[6]周向红.51系列单片机应用与实践教程.北京:
北京航空航天大学出版社,2008.5
[7]李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2000,19(4):
23-27
课设体会
本次课程设计主要是利用单片机和LCD液晶显示器组建一个简单的多功能数字钟电路,需要实现准确显示时间且能显示到秒,可随时进行时间及闹铃调整,具有24或12时制转换功能,并且设有一个“复位”按键功能,在通过硬件搭建与软件编程中,都遇到了一些困难,感谢我的指导老师不厌其烦的对我的指导和帮助,解决了在课程设计中遇到的问题,使我学到了很多新知识,例如对LCD显示有了更深层的了解,以及单片机是如何通过软件编程来控制电路的。
通过老师和同学的帮助,我完成了本次设计的要求,在此,向指导老师和实验室的同学表示衷心的感谢。
通过本次课程设计,也使得我对单片机和LCD液晶显示器有了更多的了解。
通过动手搭接实物,使书本上的理论知识等到了充分利用。
理论联系实际,将学所到的知识应用在了平时生活中。
同时,也体会到了多功能数字钟在现实生活中有着广泛的应用。
对于单片机来说,平时学习的只是简单的编程,其作用体会的并不是很深。
在这次设计中,通过对单片机输入程序,来完整这个设计的软件环节。
最终感受到了单片机应用的多功能性。
也让我体会到了光有扎实的理论基础还不够,应当还需要有熟练的实际操作动手能力,理论与实践相结合,方可创造出非凡的成果。
[2011年1月12日完成]
附录1电路原理图
附录2程序清单
//开闹铃时显示闹铃符号,关时不显示
//设置闹铃按1下进入设置状态;按2下,退出设置状态;
//设置时间按1下进入设置状态,并停止计时;按2下,推出设置状态,并开始计时
//当设置闹铃、时间没按下时,调时、调分不起作用
//不可以在设置时间的过程中设置闹铃,不可以在设置闹铃的过程中设置时间
//设置闹铃后,闹铃时间在第一行显示
//每当设置闹铃时,闹铃都初始化为00:
00,设置完后,闹铃消失
//lcd1602有64B的CGRAM,可用来写入自定义字符,5*8点阵的可写8个(每个占8字节),5*11点阵的可写4个(每个占16字节)
//写命令wcmd(0x40),显示所写入字符,送入数据0x00-0x07(对应显示8个字符)。
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidinc_second();
voidinc_minute();
voidinc_hour();
voidbeep();
voidwdscan();
voiddisp_sfm(ucharx,uchary,uchardat);
#definePORTP0
sbitlcdrs=P2^7;//LCD数据命令选择端
sbitlcden=P2^6;//LCD使能端
sbitsetsj=P2^0;//设置时间
sbitsetnl=P2^1;//设置闹铃
sbitts=P2^2;//调整小时
sbittf=P2^3;//调整分钟
sbitknl=P2^4;//开闹铃
sbitgnl=P2^5;//关闹铃
sbitlam=P1^0;//AM指示灯
sbitlpm=P1^1;//PM指示灯
sbitlnl=P1^2;//闹铃就绪指示灯
sbitfm=P3^6;//蜂鸣器端口
sbitzh=P1^3;//24或12进制转换按键
//sj为设置时间按下的标志,nlflag为闹铃键按下的标志;tzflag为调时键按下的标志;tznl为调整闹铃时间按下的标志;wdnum为开闹铃键按下的标志;hwnum为关闹铃键按下的标志
ucharsj,tzflag,nlflag,tznl,wdnum,hwnum;
ucharhour,minute,second,tcnt,nlhour,nlminute,nldk;
ucharcodetable[]="00:
00:
00";
ucharcodebmp[]={0x0e,0x11,0x1f,0x00,0x0a,0x00,0x00,0x00,
0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};//闹铃符号
ucharlsb,msb;
uchardisbuf[7];
uchart1,t2;
sbitdq=P1^5;
bitpresence;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelay1(uinti)//延时14us,12MHz
{while(--i);}
bitrst_ds18b20()//dq复位;没有检测从机
{
dq=1;
dq=0;//单片机将dq拉低
delay1(60);//延时480us-960us,主要是此延时要长最好800us以上
dq=1;//拉高总线
delay1(5);//延时16-60us,等待从机发存在信号
presence=dq;//从机发送60-240us的低脉冲作为存在脉冲
delay(30);//至少延时(480us-720us),等待dq拉为高电平(自动的)
returnpresence;
}
ucharrd_byte()//读时,先拉低数据线至少1us,再释放。
每两次读至少有1us的间隔
{
uchari,dat;
dq=1;
for(i=0;i<8;i++)
{
dq=0;//给脉冲信号
dat>>=1;//该句4us
dq=1;//给脉冲信号
delay1
(1);//主机马上释放总线,并延时至少14us,等待数据送上
if(dq)
dat|=0x80;
delay1(5);//保持数据至少(60us-15us),等待上拉电阻将dq拉高
}
returndat;
}
voidwr_byte(uchardat)//数据线由高拉低产生写信号
{
uchari;
dq=1;
for(i=0;i<8;i++)
{
dq=0;//dq由高拉低后,在15内期间采样dq状态
dq=dat&0x01;
delay1(8);//写数据要维持60us-120us
dq=1;//然后拉高dq
dat>>=1;
}
}
voidwcmd(ucharcmd)
{
lcden=0;
lcdrs=0;
PORT=cmd;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwdata(uchardat)
{
lcden=0;
lcdrs=1;
PORT=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidgoxy(ucharx,uchary)
{
if(x==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 数字 设计 论文