基于单片机89C52定时闹钟的课程设计_第1页
基于单片机89C52定时闹钟的课程设计_第2页
基于单片机89C52定时闹钟的课程设计_第3页
基于单片机89C52定时闹钟的课程设计_第4页
基于单片机89C52定时闹钟的课程设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前言20世纪末,电子技术获得了飞速的开展.在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的开展和社会信息化程度的提升.同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快.时间对人们来说总是那么珍贵,工作的忙碌性和繁杂性容易使人忘记当前的时间.忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅.但是,一旦重要事情,一时的耽误可能酿成大祸.例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间.所以有必要制作一个定时系统.随时提醒这些容易忘记时间的人.而钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能.诸如定时自动

2、报警、按时自动打铃、时间程序自动限制、定时播送、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等等.所有这些,都是以钟表数字化为根底的.因此,研究数字钟及扩大其应用,有着非常现实的意义.随着生活水平的提升,人们越来越追求人性化的事物.传统的时钟已不能满足人们的需求.而现代的时钟不仅需要模拟电路技术和数字电路技术而且更需要单片机技术,增加数字钟的功能.利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,减小因元器件精度不够引起的误差,但是数字钟还是可以改良和提升如选用更精密的元器件.但与机械式时钟相比已经具有更高的准确性和直观性,且无机械装置,具有更长的使用寿

3、命,因此得到了广泛的使用.数字钟通过数字电路实现时、分、秒.数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品.由于数字集成电路的开展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表.多功能数字钟的应用非常普遍.由单片机作为数字钟的核心限制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来.通过键盘可以进行校时、定时等功能.输出设备显示器可以用液晶显示技术和数码管来显示技术.本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机STC89c52为核心元件同时采用LCD1602显示“时、“分、“秒的

4、现代计时装置.另外具有校时功能,秒表功能,定时器功能和继电器限制外围电路功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点.文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢送下载支持.目录前言1摘要I第1章课题的背景11.1课题的来源11.2课题研究的目的和意义1L3应解决的主要问题及到达的技术要求2第2章方案的选择和论证32.1 单片机型号的选择32.2 按键的选择32.3 显示器的选择32.4 计时局部的选择32.5 发音局部的设计42.6 显示器驱动电路42.7 电源的选择4第3章数字电子钟的设计原理和方法53.1设计原理53.2 硬件电路的设计53. 2.1

5、STC89c52单片机简介54. 2.2键盘电路的设计65. 2.3时钟电路66. 2.4蜂鸣器驱动电路67. 2.5继电器电路78. 2.6LCD1602电路79. 2.7复位电路83.3 软件局部的设计83.4 .1主程序局部的设计8总结1112摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、开展很快.而51单片机是各单片机中最为典型和最有代表性的一种.本设计以STC89c52芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的电子时钟,它由5V直流电源供电.在硬件方面,除了CPU外,使用LCD1602来进行显示.软件方面采用C语言编程

6、.整个电子钟系统能完成时间的显示、调时、校时和三组定时闹钟的功能.选用单片机最小系统应用程序,添加比拟程序、时间调整程序及蜂鸣程序,通过时间比拟程序触发蜂鸣,实现闹钟功能,完成设计所需求的软件环境.介绍并使用Keil单片机模拟调试软件,测试程序的可行性并用Proteus进行仿真.关键词:单片机,定时器,中断,闹钟,LCD1602第1章课题的背景1.1 课题的来源随着生活水平的提升,人们越来越追求人性化的事物,传统的时钟已不能满足人们的需求.现代的时钟不仅需要模拟电路技术而且需要数字电路技术和单片机技术,增加时钟的功能.数字电子钟可利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰

7、,减小因元器件精度不够引起的误差;尽管如此数字钟还是可以改进和提升,比方选用更精密的元器件.但与机械式时钟相比已经具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用.1.2 课题研究的目的和意义20世纪末,电子技术获得了飞速的开展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的开展和社会信息化程度的提升,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快.时间对人们来说总是那么珍贵,工作的忙碌性和繁杂性容易使人忘记当前的时间.忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅.但是,一旦重要事情,一时的耽误可能酿成

8、大祸.例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间等造成的.而钟表的数字化给人们生产生活带来了极大的方便.数字钟是通过数字电路实现时,分,秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品.由于数字集成电路的开展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动限制、定时播送、自动起闭路灯、定时开关烤箱、通断动力设备、甚至各种定时电气的自动启用等.所有这些,都是以钟表数字化为根底的.因此,研究

9、数字钟及扩大其应用,有着非常现实的意义.文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢送下载支持.1.3 应解决的主要问题及到达的技术要求使用STC89C52单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,假设LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用.定时闹钟的根本功能如下:(1)同时设置一个夜晚的全芯片休眠功能,当定时时间到后,激活单片机同时启动报警,以起到一个节能的作用.(2)显示格式为“时时:分分.(3)由LED闪动来做秒计数表示.(4)一旦时间到那么发出声响,同时继电器启动,可以扩充限制家电开启和关闭.(5)程序执行后工作指示灯LED闪动,

10、表示程序开始执行,LCD显示“00:00,按下操作键K1K4动作如下:K1设置现在的时间.K2显示闹钟设置的时间.K3一设置闹铃的时间.K4闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗的一声,设置为OFF发出“哗的一声.设置当前时间或闹铃时间如下.K1一时调整.K2一分调整.K3一设置完成.K4一闹铃时间到时,发出一阵声响,按下本键可以停止声响.文档收集于互联网,已重新整理排版.word版本可编辑,有帮助欢送下载支持.第2章方案的选择和论证2.1 单片机型号的选择通过对多种单片机性能的分析,最终认为STC89c52是最理想的电子时钟开发芯片.STC89c52是STC公司生产的一种低

11、功耗、高性能CM0S8位微限制器,具有8K在系统可编程Flash存储器.STC89c52使用经典的MCS-51内核,但做了很多的改良使得芯片具有传统51单片机不具备的功能.在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89c52为众多嵌入式限制应用系统提供高灵活、超有效的解决方案.2.2 按键的选择方案一:4X4矩阵式键盘.如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂.方案二:独立式按键.如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况.如果选择此方案,由于按键较少,在修改时间

12、或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单.由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、本钱低,因此,选择方案二.2.3 显示器的选择方案一:液晶显示器.如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带.但液晶显示器的驱动电路复杂,使用起来有一定的难度.方案二:用数码管作为显示器.数码管的驱动电路简单,使用方便,其缺点是功耗较大.由于液晶显示器功耗低,显示的内容灵活,因此选择方案一.2.4 计时局部的选择如果使用时钟芯片,系统就不怕掉电且时间精确.但这种芯片比拟贵,况且,设计本系统主要是为了学习单片机程序的编写和调

13、试以及设计硬件电路的一些方法,因此采用软件的方法来计时而没有采用价格较高的时钟芯片.2.5 发音局部的设计通过三极管放大后驱动蜂鸣器工作.2.6 显示器驱动电路采用LCD1602显示所需显示的字符,需要用电位器调节背光.2.7 电源的选择如果是用电池供电,就比拟方便携带,但需要经常更换电池.况且,本系统的体积较大,即使使用电池供电也不能随身携带,因此,用电池供电不大适宜,所以用5V外部稳压电源来供电.第3章数字电子钟的设计原理和方法1.1.1 原理系统原理图内部时钟方式和外部时钟P1.0/T2vcc一PI.LT2EXPI.2AIMKPO.OAD1.P0.I二采用内部时钟方式.最常P1.3PI.

14、4AD2/P0.2AD3.P03二体和电容组成的并联谐振PL5A1MP0.4一PI.6PL7AD5.PO.5AD6,P0.6二12MHz之间.电容值无严RSTP3.0/RXDAD7.I1T7EA二出的稳定性、大小和振荡P3.LTXDPROG/ALli一P3.2JM0P3.3/INTIPSENAI5/P2.7二在20pFlOOpF之间取值P34ToA14/P2.6一P35TlAI3/P2.5一P3.6.WRA12/P2.4一P3.7/RDXTAI2AII.P23A10/P2.2二驱动蜂鸣器工作,当闹钟XTAL1A9/P2.I一GNDA8/P2.0_士尸3STC89C52STC89C52是STC公

15、司生产的一种低功耗、高性能CM0S8位微限制器,具有8K在系统可编程Flash存储器.STC89c52使用经典的MCS-51内核,但做了很多的改良使得芯片具有传统51单片机不具备的功能.具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构兼容传统51的5向量2级中断结构,全双工串行口.1.1.2 键盘电路的设计键盘采用4个独立按键实现对时钟和闹钟的设定及修改.1.1.3 时钟电路单片机的时钟产生方法有两种:方式.本系统中STC89c52单片机用的内部时

16、钟方式是采用外接晶回路.振荡晶体可在1.2MHz格要求,但电容取值对振荡频率输电路起振速度有少许影响,一般可3.2.4蜂鸣器驱动电路发音局部是通过三极管放大开启时响三声,闹钟关闭时响一图3-6蜂鸣器驱动电路3.2.5继电器电路当单片机的引脚输出高电平时,三极管截止,继电器线圈两端没有电位差,继电器衔铁释放,同时状态指示的发光二极管也熄灭,继电器的常开触点释放,相当于开关断开.在三极管截止的瞬间,由于线圈中的电流不能突变为零,继电器线圈两端会产生一个较高电压的感应电动势,线圈产生的感应电动势那么可以通过二极管IN4148释放,从而保护了三极管免被击穿,也消除了感应电动势对其他电路的干扰,这就是二

17、极管的保护作用.326LCD1602电路U2LCD16023.2.7复位电路17复位电路工作原理如上喉理岁豌曾锌鸣展电阻上出现电压,使得单片机复位;几个亳腌甫阳豳圃赫国豳粕%麟0,使得单片机进入工作状态.工作期间,此4*,电容放电.松手,展?充电,在电阻上出现电压,使得单片机复位“I匚途?总电路图KGND3.3软件局部的设计33.1主程序局部的设计主程序流程图如卜图3-7o开始图初始化设理斗4个按键每个都具有两个功能,I最终门现菜单上的输入功能.采用通过逐层嵌套的循环扫描,实现嵌套式的键盘输的时间之后,蜂鸣器发出声音,并且继电器启动,以此限制堀接的外闱Lu要到达按键具有多个:力能,需在程少旭个

18、量,当按键按下与变量的值同时满足实现一个功能,不同时满足时实现旷/与闹钟时间相同蜂鸣器响,继电器开启第4章实验结果此电子闹钟设计是先利用Proteus仿真软件进行仿真,实现了课程设计要求实现的功能.然后在使用AltiumDesigner绘制原理图和PCB,图3-14运行仿真图实际电路运行图总结通过自己的不懈努力,我完成了单片机课程设计上的任务要求.功能上达标:时钟的显示,调时功能、校时功能、闹铃功能、闹钟设功能.其精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷;校时功能保证了时钟准确和可靠性,通过继电器可以扩展多种外围电路的可能.硬件设施符合要求,软件设计可以配合硬件实现要求的功

19、能.可见技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的数字时钟.数字时钟更具人性化,更能提升人们的生活质量,更受人们欢送.无可否认机械时代已经过去,电子时代已经到来.做为新时代的我们,更应该提高自身水平,适应新时代的开展.知识来自实践,多去生活中探询所需要的.对于上述所提到的研究课题,我们应尽量考虑到人的因素,增强时钟的实用性和操作性,为使用者提供切实的方便,营造一种舒适的生活气氛.所以,在设计的时候,应该从多方面、多角度去考虑问题,而且应该进一步提升时钟的质量.另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的

20、设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比方写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握.从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提升,我想这就是我在这次课程设计中的最大收获.附录相关的程序代码:#incl

21、ude#include#defineuintunsignedint#defineucharunsignedchar#defineLCD1602_DBPOucharcodetab!e=MCurrentTimeH;ucharcodetablet=M00:00:00n;ucharkey1Flag=0;ucharkey2Flag=0;ucharkey3Flag=0;ucharkey4Flag=0;uchartemp=0;ucharsec=0;ucharmin=0;ucharhour=0;ucharclkHour=0;ucharclkMin=0;ucharclkFlag=0;ucharbeepNum=0

22、;ucharrelayFlag=1;sbitLCD1602_RS=P2A0;数据/命令选择端电平H/LsbitLCD1602_RW=P2A1;数据/命令选择端电平H/LsbitLCD1602_E=P2人2;使能信号sbitKeyl=PlA0;sbitKey2=P1A1;sbitKey3=P1A2;sbitKey4=P1A3;sbitLed=P2A4;sbitSpeaker=P2八5;sbitRelay=P2八3;voidDelaylms()/12.000MHz(unsignedchari,j;i=12;j=169;do(while(-j);)while(-i);)voidDelay20ms()

23、/12.000MHz(unsignedchari,j,k;_nop_();_nop_();i=1;j=234;k=113;dodo(while(-k);while(-j);)while(-i);)voidBeep()Speaker=0;Delay20ms();Speaker=1;)voidLcdWaitReadyOunsignedcharsta;LCD1602_DB=0xFF;LCD1602_RS=0;LCD1602_RW=1;doLCD1602_E=1;sta=LCD1602_DB:LCD1602_E=0;while(sta&0x80);)voidLcdWriteCmd(unsignedch

24、arcmd)LcdWaitReadyO;LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;LCD1602_E=1;LCD1602_E=0;)voidLcdWriteDat(unsignedchardat)LcdWaitReadyO;LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;LCD1602_E=1;LCD1602_E=0;)voidLcdSetCursor(unsignedcharx,unsignedchary)unsignedcharaddr;if(y=0)addr=0x00+x;elseaddr=0x40+x;LcdWr

25、iteCmd(addrI0x80);)voidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str)LcdSetCursor(x,y);while(*str!=O)LedWriteDat(*str+);)voidInitLcd1602()LcdWriteCmd(0x38);LcdWriteCmd(OxOC);LcdWriteCmd(0x06);LcdWriteCmd(OxO1);)voidWriteAddress(ucharx)LcdWriteCmd(0x80+x);)voidDisplayMinTens()显示分十位WriteAddr

26、ess(0x49);LcdWriteDat(min/10)+0);Delaylms();)voidDisplayMinUnits()显示分个位WriteAddress(0x4A);LcdWriteDat(min%10)+0);Delaylms();)voidDisplayHourTens()显示时十位WriteAddress(0x46);LcdWriteDat(hour/10)+0);Delaylms();)voidDisplayHourUnits()WriteAddress(0x47);LcdWriteDat(hour%10)+0);Delaylms();)voidDisplayClkMin

27、Tens()WriteAddress(0x49);LcdWriteDat(clkMin/10)+O);Delaylms();)voidDisplayClkMinUnits()WriteAddress(0x4A);显示时个位显示时钟分十位显示时钟分个位LcdWriteDat(clkMin%10)+L);Delaylms();)显示时钟时十位voidDisplayClkHourTens()WriteAddress(0x46);LcdWriteDat(clkHour/10)+L);Delaylms();)voidDisplayClkHourUnits()显示时钟时个位WriteAddress(0x4

28、7);LcdWriteDat(clkHour%10)+0);Delaylms();)voidDisplayClkSecTens()显示秒十位WriteAddress(0x4C);LcdWriteDat(sec/10)+0);)voidDisplayClkSecUnits()显示秒个位WriteAddress(0x4D);LcdWriteDat(sec%10)+0);Delaylms();)voidScanKey4()if(Key4=0)&(clkFlag=1)Delay20ms();if(Key4=0)&(clkFlag=1)clkFlag=0;beepNum=0;key4Flag=0;)vo

29、idInitTimerOO初始化定时器0TMOD=0x01;TH0=(65536-50000)/256;TLO=(65536-50000)%256;EA=1;ET0=1;TR0=1;)voidmain()InitLcd1602();LcdShowStr(0,0.table);LcdShowStr(6,1stable1);InitTimerOO;while(l)if(sec=60)sec=0;min+;)if(min=60)min=0;hour+;)if(hour=24)hour=0;)LcdShowStr(0,0,table);DisplayHourTens();DisplayHourUnit

30、s();LcdShowStr(8,l,:);DisplayMinTens();DisplayMinUnits();LcdShowStr(ll,l,:“);DisplayCIkSecUnits();DisplayClkSecTens();/=if(Keyl=0)&(keylFlag=0)设置当前时间Delay20ms();if(Keyl=0)&(keylFlag=0)TRO=0;InitLcd1602();LcdShowStr(0,0,nSetCurrentTimeH);DisplayHourTens();DisplayHourUnits();LcdShowStr(8,l,:);DisplayM

31、inTens();DisplayMinUnits();key1Flag=1;while(keylFlag=1)if(Keyl=0)Delay20ms();if(Keyl=0)hour+;if(hour=24)hour=0;DisplayHourTens();DisplayHourUnits();LcdShowStrCSJ,:);DisplayMinTens();DisplayMinUnits();)if(Key2=0)DeIay20ms();if(Key2=0)min+;if(min=60)min=0;hour+;)DisplayHourTens();DisplayHourUnitsO;Lcd

32、ShowStr(8,1DisplayMinTens();DisplayMinUnits();)退出设置当前时间if(Key3=0)&(keylFlag=1)Delay20ms();if(Key3=0)&(keylFlag=1)InitLcd1602();LcdShowStr(0,0,table);DisplayHourTens();DisplayHourUnits();LcdShowStr(8DisplayMinTens();DisplayMinUnits();LcdShowStr(11,1DisplayClkSecUnits();DisplayClkSecTens();key1Flag=0;

33、TR0=1;)/7=if(Key2=0)&(key2Flag=0)&(relayFlag=1)显示闹钟时间Delay20ms0;if(Key2=0)&(key2Flag=0)&(relayFlag=1)key2Flag=1;InitLcd1602();while(key2Flag=1)LcdShowStr(0,0/fClockTime);DisplayClkHourTens();DisplayClkHourUnits();LcdShowStr(8,l,:);DisplayClkMinTens();DisplayClkMinUnits();if(Key2=0)Delay20ms();if(Key

34、2=0)key2Flag=0;InitLcd1602();DisplayHourTensO;DisplayHourUnits();LcdShowStr(8,1H);DisplayMinTens();DisplayMinUnits();LcdShowStr(11JDisplayClkSecUnits();DisplayClkSecTens();)/=if(Key3=0)&(key3Flag=0)(设置闹钟时间Delay20ms0;if(Key3=0)&(key3Flag=0)TRO=0;InitLcd1602();LcdShowStr(0,0,nSetClockTimeH);DisplayClk

35、HourTens();DisplayClkHourUnits();LcdShowStr(8,l,:);DisplayCIkMinTens();DisplayCIkMinUnits();key3Flag=1;)while(key3Flag=1)if(Keyl=0)DeIay20ms();if(Keyl=0)clkHour+;if(clkHour=24)clkHour=0;)DisplayClkHourTens();DisplayClkHoiirUnits();LcdShowStr(8,1/f:H);DisplayClkMinTens();DisplayClkMinUnits();)if(Key2=0)Delay20ms();if(Key2=0)clkMin+;if(clkMin=60)clkHour+;clkMin=0;1DisplayClkHourTens();DisplayClkHourU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论