基于单片机的电子闹钟的设计毕业设计.docx
《基于单片机的电子闹钟的设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子闹钟的设计毕业设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于单片机的电子闹钟的设计毕业设计
基于单片机的电子闹钟的设计
摘要:
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃功能的电子闹钟。
当前电子钟开发手段采用了较多的分立元器件,不仅占用很大空间而且利用率比较低。
单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。
它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。
本设计应用单片机STC12C5A16AD芯片作为核心,由LCD1602液晶屏显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精度高,操作简单,编程容易。
关键词:
电子闹钟,单片机,C语言编程
1绪论
单片机是微型机的一个主要分支,就其组成和功能而言,一块单片机芯片就是一台计算机。
单片机具有如下特点:
1集成度高、体积小、有很高的可靠性;有优异的性能价格比;
2控制功能强;
3低功耗、低电压,便于生产便携式产品;
4外部总线增加了I2C、SPI等串行总线方式,进一步缩小了体积,简化了结构;
5单片机的系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统。
所以单片机的应用非常广泛,在智能仪表、机电一体化、实时控制、分布式多机系统以及人们的生活中均有用武之地。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思路和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种用软件代替硬件的控制技术,是对生产控制技术的一次革命。
利用单片机的智能性,可方便地实现具有智能的电子钟设计。
单片机均具有时钟振荡系统,利用系统时钟借助微处理器的定时器/计数器可实现电子钟功能。
然而系统时钟误差较大,电子钟的积累误差也可能较大,所以可以通过误差修正软件加以修正,或者在设计中加入高精度时钟日历芯片,以精确时间。
另外很多功能不同的单片机是兼容的,这就更便于实现产品的多功能性。
由于单片机具有货源充足、价格低廉,可软硬件结合使用,能够较方便的实现系统的多功能性,性价比高等诸多优点,故采用单片机作为本设计的硬件基础。
2基于单片机的电子闹钟硬件设计
2.1IC芯片选择
2.1.1微处理器选择
STC12系列单片机简要介绍:
1.STC12系列单片机为增强型8051芯片,1T,单时钟/机器周期,指令代码完全兼容传统8051单片机。
2.工作电压:
STC12C5410AD系列工作电压:
5.5V-3.8V(5V单片机)/3.8V-2.4V(3V单片机)
STC12C2052AD系列工作电压:
5.5V-3.4V(5V单片机)/3.8V-2.4V(3V单片机,可到2V)
3.工作频率范围:
0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz
4.用户应用程序空间12K/10K/8K/6K/4K/2K/1K字节
5.片上集成512字节RAM(STC12C5410AD系列),STC12C2052AD系列单片机为256字节RAM
6.通用I/O口(27/23/15个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)
可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
8.EEPROM功能
9.看门狗
10.内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)
11.时钟源:
外部高精度晶体/时钟,内部R/C振荡器
用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟
常温下内部R/C振荡器频率为:
5.2MHz~6.8MHz
精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,应认为是4MHz~8MHz
12.共2个16位定时器/计数器,但可用PCA模块再产生4个定时器(2052系列只有两路PCA)
13.外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断唤醒
14.PWM(4路)/PCA(可编程计数器阵列,4路),5410系列是4路,2052系列只有两路
---也可用来当4路D/A使用
---也可用来再实现4个定时器
---也可用来再实现4个外部中断(上升沿中断/下降沿中断均可分别或同时支持)
15.A/D转换,10位精度ADC,共8路。
STC12C2052AD系列只有8位精度
16.通用全双工异步串行口(UART),由于STC12系列是高速的8051,也可再用定时器软件实现多串口
17.SPI同步通信口,主模式/从模式
18.工作温度范围:
0-75℃/-40-+85℃
19.封装:
PLCC-32,PDIP-28,SOP-28,PDIP-20,SOP-20,TSSOP-20(超小封状6.4mm×6.4mm,定货)
PLCC-32有27个I/O口,PDIP28/SOP28有23个I/O口,PDIP20/SOP20/TSSOP20有15个I/O口,
I/O口不够时,可用74HC595/74HC165串行扩展I/O口,或用双CPU,三线通信,还多了串口。
STC12C5410AD系列及STC12C2052AD系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是
高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成
MAX810专用复位电路。
4路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。
STC12C2052AD系列只有2路PWM,8路高速8位A/D转换。
图2.1STC12C5A16AD芯片PDIP封装引脚图
2.1.2常用时钟日历芯片比较
在电子闹钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。
每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。
DS12887与DS1216芯片都有内嵌式锂电池作为备用电池;X1203引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,只是相比较之下,X1203与AT89S51搭配使用时占用I/O口较多。
DS1643为带有全功能实时时钟的8K×8非易失性SRAM,集成了非易失性SRAM、实时时钟、晶振、电源掉电控制电路和锂电池电源,BCD码表示的年、月、日、星期、时、分、秒,带闰年补偿。
同样,DS1643拥有28只管脚,硬件连接起来占用微处理器I/O口较多,不方便系统功能拓展和维护。
故而从性价比和货源上考虑,本设计采用实时时钟日历芯片DS1302。
2.1.3DS1302简介
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。
此外,DS1302需要使用32.768KHz的晶振。
2.1.4DS1302引脚说明
DS1302引脚图参照图2.2。
图2.2DS1302芯片引脚图
其引脚功能参照表2.1。
表2.1DS1302引脚功能说明
引脚号
名称
功能
1
VCC1
备份电源输入
2
X1
32.768KHz晶振输入
3
X2
32.768KHz晶振输出
4
GND
地
5
RST
控制移位寄存器/复位
6
I/O
数据输入/输出
7
SCLK
串行时钟
8
VCC2
主电源输入
2.1.5DS1302控制字说明
在编程过程中要注意DS1302的读写时序。
DS1302是SPI总线驱动方式。
它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
要想与DS1302通信,首先要先了解DS1302的控制字。
DS1302的控制字如表2.2。
表2.2DS1302控制字(即地址及命令字节)
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
1
RAM
A4
A3
A2
A1
A0
RD
控制字的作用是设定DS1302的工作方式、传送字节数等。
每次数据的传输都是由控制字开始。
控制字各位的含义和作用如下:
BIT7:
控制字的最高有效位,必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
BIT6:
如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
BIT5至BIT1(A4~A0):
用A4~A0表示,定义片内寄存器和RAM的地址。
定义如下:
当BIT6位=0时,定义时钟和其他寄存器的地址。
A4~A0=0~6,顺序为秒、分、时、日、月、星期、年的寄存器。
当A4~A0=7,为芯片写保护寄存器地址。
当A4~A0=8,为慢速充电参数选择寄存器。
当A4~A0=31,为时钟多字节方式选择寄存器。
当BIT6=1时,定义RAM的地址,A4~A0=0~30,对应各子地址的RAM,地址31对应的是RAM多字节方式选择寄存器。
4.BIT0(最低有效位):
如为0,表示要进行写操作,为1表示进行读操作。
2.2电子闹钟硬件电路设计
电子闹钟至少要包括秒信号发生器、时间显示电路、按键电路、供电电源、闹铃指示电路等几部分。
硬件电路框图参照图2.3。
该系统使用STC12C5A16AD单片机作为核心,通过读取时钟日历芯片DS1302的数据,完成此电子闹钟的主要功能——时钟/日历。
使用LCD1602液晶屏显示。
图2.3电子闹钟硬件系统框图
键盘是为了完成时钟/日历的校对和显示功能。
由于此电子闹钟要求具有闹铃功能,所以设计有闹铃电路,进行声音响铃。
闹铃电路中的闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向蜂鸣器送出高电平,蜂鸣器发声。
采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。
也可以在编程的时候编写一段音乐程序,待闹铃时间到时,调用该音乐程序给扬声器,便响起音乐。
不过该方法只能做一些简单音乐,并且音乐程序会占用很多单片机存储资源。
但闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口。
整个电路只使用了一种电源,+5V电源将为整个电路供电。
DS1302没有备用电源。
当+5V电源被切断后,DS1302不能继续工作。
当+5V电源恢复供电,因为断电使系统复位到初始化时间,需要重新校时。
具体电路图如下:
3基于单片机的电子闹钟软件设计
单片机可以应用汇编语言和C语言进行编程。
,汇编语言与机器指令一一对应所以用汇编语言编写的程序在单片机里运行起来效率较高。
C语言程序可读性高,更便于理解。
本设计使用C语言编程。
3.1主程序设计
第一次上电,系统先进行初始化,LCD显示初始时间并开始走时。
单片机依次开始调用键盘扫描子程序、DS1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。
主程序流程图如图3.1。
图3.1多功能电子钟主程序流程图
3.2子程序设计
3.2.1实时时钟日历子程序设计
该程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。
在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。
其流程图如图3.2。
图3.2实时时钟日历子程序流程图
DS1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。
如果DS1302一直没有掉电,则不存在此问题。
在进行写操作时,需要先解除写保护寄存器的“禁止”状态。
当用多字节模式进行操作时,必须写够8字节。
3.2.2显示子程序设计
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
显示质量高;数字式接口;体积小、重量轻;功耗低。
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它由32个5*8点阵字符位组成,每一个点阵字符位都可以显示一个字符,但是它不能显示图形。
模块内部自带有160个5*8点阵字型的字符发生器CHROM和8个可由用户自定义的5*8的字符发生器CGRAM。
图3.4显示子程序流程图
3.2.3键盘扫描子程序
单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。
在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。
在执行键盘按键规定的功能中不理睬键盘输入。
定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。
前两种扫描方式均会占用CPU大量时间。
不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。
单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。
如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。
程序流程如图3.5。
图3.5键盘扫描子程序
3.2.4闹铃子程序设计
闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动一段时间,并根据外部按键执行相应任务。
该程序流程图参见图3.6。
图3.6闹铃子程序流程图
4系统调试
调试工作分硬件调试和软件调试两部分,调试方法介绍如下:
首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检查,最后应用程序进行功能调试。
硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。
然后,软件调试可以直接应用一些编辑或仿真软件进行,比如单片机C51编辑软件Keil。
该软件提供了一个集成开发环境uVision,它包括C编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。
通过编译、运行,可以检查程序错误。
但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。
在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。
还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。
如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力,经济、方便。
总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键。
4.1硬件调试计
4.1.1单片机基础电路调试
单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。
调试过程需要注意以下几点:
1.检查电源是否完好。
2.单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。
AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。
3.如果使用P0口做I/O口,要接上拉电阻。
4.使用万用表排查电路中是否存在断路或者短路情况。
笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。
5.对LCD1602显示屏的调试,旋动与芯片第三管脚相连的变阻器到显示屏出现欲显示的内容,并将其调清晰即可。
4.1.2DS1302电路调试
该电路包含DS1302芯片、主电源、备用电源、晶振等部分。
在与单片机连接的过程中需要注意以下几点:
清楚DS1302与单片机连接的管脚。
本设计定义为:
DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。
注意电源正负极连接。
DS1302接32.768KHz的晶振。
该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。
同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。
编写DS1302的时钟/日历程序,只要求能够正确显示时间。
烧录进单片机,检查电路电源正负极连接是否正确,检查P1.0和P1.1引脚接线是否正确。
检查无误后可以上电检查。
4.2软件调试
在硬件调试完毕的基础上,需要进一步完善程序,也就是进入软件调试阶段。
在本设计中,软件调试主要分两大部分:
实时时钟日历子程序调试、按键子程序调试。
将这两部分调试成功,那么整个设计的软件部分也就基本完成了。
关于这两部分的调试只需要在主程序中分别调用这两部分程序即可,此处不再赘述。
结论
基于单片机实现电子闹钟,仅仅是众多方法之一。
并且市场上的实时时钟日历芯片品类繁多,IC化的传感器各种各样,显示方式也愈趋于人性化。
所以多功能电子闹钟有多种实现方案,能够实现的功能也很多,笔者已经通过仿真和调试,实现了时间日历显示和校对、闹铃等功能。
本文采用51单片机C语言进行编程,当然也可以应用汇编语言编程。
由于笔者能力有限,提供的程序还可以进一步优化,并且还可以根据需求为电子闹钟增设新功能。
致谢
本课题在选题及研究过程是在孙磊老师的亲切关怀和悉心指导下完成的。
他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。
从课题的选择到项目的最终完成,孙老师都始终给予我细心的指导和不懈的支持。
孙老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向孙老师致以诚挚的谢意和崇高的敬意。
还要感谢帮助过我的同学们,他们的陪伴让这将近半载的时光充满色彩!
参考文献
1.王东峰等.单片机C语言应用100例[M].电子工业出版社,2009。
2.周仲.国产集成电路应用500例[M].北京:
电子工业出版社,1992.104-108。
3.夏继强.单片机实验与实践教程[M].北京:
北京航空航天大学出版社,2001.78-83。
4.DanielJPackand StevenFBarrettMicrocontrollerTheoryandApplications:
HC12andS12[M]PrenticeHall2007.
5.DoganIbrahimMicrocontrollerBasedApllieddigitalcontrol[M]JohnWileyandSonsAustralia2003.
6.StevenF.Barrett,DanielPackAtmelAVRMicrocontrollerPrimer[M]Morgan&ClaypoolPublishers2007-12-15.
TitleThedesignoftheelectricclockbasedonsinglechip
Abstract
Thisdesignismainlyforrealizingaelectronicclockwithregularalarmfunctionthatcandisplayproperlyclock/calendar.Thecurrentdigitalelectronicclockwithagreateramountofdiscretecomponents,notonlyoccupiedlargespaceandlowutilizationratio.MicrocontrollerisaCPU,RAM,ROM,timer/counterandavarietyofinterfacesinoneofthemicro-controller.Itssmallsize,lowcost,powerful,widelyusedinsmartproductsandindustrialautomation.ThisdesignapplySTC12C5A16ADchipmicrocontrollerasthecore,useLCD1602todisplay,employDS1302chiptoachieveclock/calendarfunction.Theadvantagesofthismethodissimple,reliableperformance,circuitgoodreal-timeperformance,highprecisiontime,theoperationissimple,programmingeasier.
Keywordselectronicclock,microcontroller,Cprogramminglanguage
部分重要程序
函数申明
voiddelay_us(ucharx);//延时2*x+5us
voiddelay_ms(uintz);//延时任意Ms
voidDS1302_writebyte(ucharwritebyte);//往DS1302写一个字节
ucharDS1302_readbyte();//往DS1302读一个字节
ucharDS1302_read(ucharDS1302_add);//往DS1302指定地址读数据
voidDS1302_write(ucharDS1302_add,ucharDS1302_data);//往DS1302指定地址写数据
voidDS1302_init();//DS1302初始化函数
voidDS1302_set_time();//设置时间
voidDS1302_read_time();//读取时间
voidLCD1602_send_byte(ucharLCD1602_data);//往LCD1602发送一个字节
voidLCD1602_write_com(ucharLCD1602_data);//往LCD1602写命令
voidLCD1602_write_data(ucharLCD1602_data);//往LCD1602写数据
voidweek(ucharweek);//星期代码
voidLCD1602