基于单片机多功能电子钟电路的设计毕业论文.doc

上传人:laozhun 文档编号:3939672 上传时间:2023-03-28 格式:DOC 页数:47 大小:536KB
返回 下载 相关 举报
基于单片机多功能电子钟电路的设计毕业论文.doc_第1页
第1页 / 共47页
基于单片机多功能电子钟电路的设计毕业论文.doc_第2页
第2页 / 共47页
基于单片机多功能电子钟电路的设计毕业论文.doc_第3页
第3页 / 共47页
基于单片机多功能电子钟电路的设计毕业论文.doc_第4页
第4页 / 共47页
基于单片机多功能电子钟电路的设计毕业论文.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《基于单片机多功能电子钟电路的设计毕业论文.doc》由会员分享,可在线阅读,更多相关《基于单片机多功能电子钟电路的设计毕业论文.doc(47页珍藏版)》请在三一办公上搜索。

1、 毕业教学环节成果 (2014届)题 目 多功能数字钟电路的设计 学 院 信息工程学院 专 业 应用电子技术专业 班 级 应电XX 学 号 201137010030341 姓 名 指导教师 2014年 05月23日理工类XXXXXXX学院毕业教学成果 目 录摘要1英文摘要2引言31 系统方案的设计51.1 功能要求51.2 方案设计思路52 系统硬件电路设计62.1 单片机最小系统的设计62.2 时钟显示模块的设计72.3 按键模块82.4 液晶显示模块92.5 蜂鸣器报警模块模块103 软件设计123.1 软件设计总体方案123.1.1 主程序流程图123.2 按键模块实现134 系统软件仿

2、真及结果分析144.1 Proteus软件简介144.2 Proteus软件仿真过程144.3 仿真结果15结论与谢辞17参考文献18附件1电路原理图19附件2电路PCB图19附件3程序源代码20附件4元器件清单46多功能数字钟电路的设计信息工程学院 应用电子技术 俞江红 摘要:数字钟已成为人们日常生活中必不可少的必需品,它应用广泛给人们的生活、学习、工作、娱乐带来极大的方便。本次设计主要以AT89C51为核心控制芯片,DS1302为时钟芯片电路模块,LCD1602为液晶显示模块,通过按键模块来设置年月日和闹钟的设定。软件部分主要通过c程序的编程实现对时钟芯片进行时间数据的读和写,然后通过液晶

3、显示程序将时间显示出来,通过按键操作实现功能的转换和屏幕的切换。数字钟可以实现显示时间的基本功能,进行校时整点报时,闹铃的功能。关键词: 电子时钟 单片机 DS1302 LCD1602XXAbstract:Digital clock has become the indispensable necessities in Peoples Daily life, it is widely applied to peoples life, study, work and entertainment extremely convenient. This design USES AT89C51 as t

4、he nucleus is the main control chip, for DS1302 clock chip, LCD1602 LCD display time, through the key module to set the date and alarm Settings. Software part mainly accomplished by programming of c program for time clock chip data read and write, and then through the liquid crystal display program

5、can display the time conversion functions are implemented by keystrokes and switch of the screen. This design can be implemented according to the basic functions of time, during school hour alarm function.Keywords: electronic clock single chip DS1302 LCD1602引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。

6、从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。 电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所

7、有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。当今市场上的电子时钟品类繁多,外形小巧别致。也有体型较大的,诸如公共场所的大型电子报时器等。电子时钟首先是数字化了的时间显示或报时器,在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹铃,万年历,环境温度、湿度检测,环境空气质量检测,USB扩展口功能等。1 系统方案的设计1.1 功能要求(1) 以数字形式显示时、分、秒的时间。(2)手动快校时、快校分或慢校时、慢校

8、分。(3)定时控制、仿广播电台整点报时等功能。1.2 设计思路本次设计主要以数字形式显示年月日和手动快校时,快校分或慢校时,慢校分,实现整点报时和闹铃的功能。在硬件电路设计方面主要包括单片机最小系统,DS1302时钟芯片电路模块,LCD1602液晶显示模块,按键模块以及蜂鸣器报警模块。在软件方面主要是采用c语言来进行编程,实现对时钟芯片进行时间数据的读和写,然后通过液晶显示程序将时间显示出来,通过按键操作实现功能的转换和屏幕的切换。设计中结合硬件、软件的分步调试,达到要求的控制效果。2 系统硬件电路设计2.1 单片机最小系统的设计AT89C51是一款非常适合单片机初学者学习的单片机,它是美国A

9、tmel公司生产的低功耗、高性能CMOS8位单片机,片内含4KB可系统编程的Flash只读程序存储器,器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器,即可在线编程(ISP),也可以用传统方法进行编程可灵活应用于各种控制领域。AT89C51单片机最小系统如图1所示。图1 单片机最小系统单片机AT89C51的主要技术参数如表1所示。表1 单片机AT86C51技术参数主要功能特性4K字节可编程闪烁存储器寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24Hz 三级程序存储器锁定128*8位内部RAM 两个16位定时器/

10、计数器可编程串行通道 低功耗的闲置和掉电模式片内振荡器和时钟电路 5个中断源与MCS-51 兼容 2.2 时钟模块电路的设计DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V 。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。DS1

11、302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入位移寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

12、如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 下图为DS1302的引脚功能图2,图3为时钟模块电路。图2 DS1302封装图图3时钟电路2.3 按键模块按键模块电路如图4所示。图4按键电路按键模块功能描述如下:1)该电子钟有四个按键S0、S1、S2、S3、S4分别是闹钟停止键、时间设置和闹钟设置键,加一键、减一键、移动键。具体按键说明如下:2)S0闹钟停止键:当闹钟响起的时候,按下此

13、键,可以关闭闹钟。3)S1时间校准键、闹钟设置键:按下这个键后LCD液晶屏进入按下此键进入预置时间状态,依次按两下进入闹钟设置状态。在以上两种状态下可进行小时、分、秒设定,设定完成后在按下此键退出预置时间状态或闹钟设置状态,进入正常走时状态。4)S2加1键:在调整年、月、日、星期、小时、分、秒时间数值时按下此键时相应的数值加一。5)S3减1键:与S2相反。6)S4移动键:当时钟进入到预置时间状态或闹钟设置状态时,依次按下此键进行年、月日、星期、小时、分、秒的位子移动变化,进行时间的设定,设定完成后,按下S1键退出状态,进入正常走时状态。2.4 液晶显示模块液晶显示模块电路如图5所示。图5 液晶

14、显示电路LCD1602技术参数如表2所示。表2 LCD1602主要技术参数LCD1602主要技术参数显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm 图6 LCD1602实物图 图7 LCD1602引脚图 图6和图7各个引脚功能如表2所示。表3 LCD1602引脚说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D

15、1数据16BLK背光源负极2.5 蜂鸣器报警模块蜂鸣器报警模块的作用:当定时闹钟时间到时,蜂鸣器发出预设的声音,而发光二极管则会随着音乐闪烁。本模块采用PNP三极管为蜂鸣器放大电流,基极通过1k电阻与单片机AT89C51的闲置引脚P3.4相连接,集电极直接接地,发射极接发光二极管和蜂鸣器。 报警模块电路如图8所示。图8 报警电路3 软件设计3.1 系统软件设计总体方案 本系统的程序采用C语言编写,为了便于修改和调试,系统软件采用模块化设计,程序的编写编译在WAVE6000软件中完成。3.1.1 主程序流程图主程序流程图如图9所示。初始化设置闹钟判断整点判断显示按键扫描开始图9 主程序流程图首先

16、对AT89C51、DS1302、LCD1602进行初始化,时间通过LCD1602显示出来,同时进行按键扫描,判断哪个键按下,如果时间与设定的闹钟时间相同后,单片机通过报警模块进行警报,此时,若按下S0按键,报警停止,LCD1602显示的时间继续精确显示。主程序代码见附件3。3.2 按键模块软件的实现按键模块流程图如图10所示。图10按键子程序流程图在按键扫描状态的时候,先判断是否有键按下,如果有键按下,读取相应的键值,进入到相应键值的功能状态。如图11所示,按键模块子程序详见附录3。4 PROTEUS软件仿真4.1 Proteus软件简介Proteus是世界上著名的EDA工具(仿真软件),从原

17、理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。4.2 Proteus软件仿真过程我们软件调试一般使用Proteus ISIS 7和Keil整合进行仿真调试。其中Keil作为软件调试界面

18、,Proteus作为硬件仿真和调试界面,下面说一下如何操作:(1)用Keil软件写出相应的51程序,并进行编译,直到编译成功。(2)打开Proteus软件。(3)选择file菜单下的 open design选项,找到所需的元器件,元器件上单击右键选中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出并绘制设计所要的各种元器件,按照电路图连接后并保存。(4)将用keil编译产生的hex文件下载到单片机中:双击单片机,在对话框中把保存过的hex文件打开,再单击确定。 (5)单击左下角运行按钮,进行软件仿真调试,直到出现正确的结果。 本次设计仿真流程图如图11所示,效果图如图12所示。绘

19、制原理图程序编写和编译装载HEX代码调试得到仿真效果图11仿真流程图图12仿真效果图4.3 仿真结果整点报时仿真如图13所示,当电子钟整点时,发光二极管亮,蜂鸣器响。图13 整点报时电子钟时间设置仿真如图14图15所示,当电子钟运行时,光标闪烁,电子钟进入时间设置状态或闹钟设置状态。图14 时间设置状态仿真图15闹钟设置状态仿真经过调试,结果满足设计要求,验证无误。通过单片机硬件电路的调试,实现了预先设定的功能,设计主要用到的元件不多,最主要的是程序也比较长比较麻烦,同时也遇到了少量困难,尤其是关于校时模块的设计实现。关于显示模块,在以前的实验中做过,所以问题很容易解决。学以致用,将从书本上学

20、到的知识应用于实践,学会初步的电子电路仿真设计。结论与谢辞本次课程设计是用AT89C51单片机CPU及LCD1602设计一个数字时钟,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高。当最终调试成功的时候也是对自己的一种肯定。此次的设计作业不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。另外在这次实验中我们遇到了不少的问题针对不同的问题我们采取不同的解决方法,最终一一解决设计中遇到的问题。在我们曾经遇到不懂的问题时,利用网上的资源,搜索查找得到需要的信息。总的来说,这次设计的多功能数字电子钟的电路设计还

21、是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。在本文的撰写过程中,XXX老师作为我的指导老师,她教学严谨,为我营造了一种良好的学术氛围。在此特向XXX老师致以衷心的谢意! 参考文献1 余红娟.电子电路分析与调试M. 北京: 人民邮电出版社, 2010.2 罗杰、谢自美.电子线路设计实验测试(第4版)M.北京:电子工业出版社, 20083 胡仁喜. Altium Design

22、er 10电路设计标准实例教程M.北京: 机械工业出版社, 2012.4 廖先芸.电子技术实践与训练(第3版)M.北京: 高等教育出版社, 20115 郑惠群.电子产品生产工艺与管理实训M.浙江: 浙江科学技术出版社, 2012.6 袁旭军,庄松林.单片机复位电路的可靠性分析J.电子技术应用.2002.11:19-217 陈洪财.基于单片机的模块化教学研究N.电气电子教学学报.2010.32(6).8 马汝星.单片机应用系统设计与制作M.人民邮电出版社, 2010,1: 2236.附件1电路原理图附件2电路PCB图 附件1程序源代码#include#include config.h/*函数声明

23、*/void disp(void);void init_Led1602(void);void init_DS1302(void);void Normal( );void key4();void key5();/*延时程序*/void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void main() init_DS1302(); /初始化1302 init_Led1602(); /初始化Led1602 while(1) disp(); /显示 /*ds1302*/*向DS1302写入一字节数据 void Write1302(u

24、char addr, uchar d) unsigned char i; SCK=0; RST=1;/写入目标地址:addr for (i = 0; i 1; /写入数据:d for (i = 0; i 1; RST=0; /停止DS1302总线/*从DS1302读出一字节数据unsigned char Read1302(uchar addr) unsigned char i; unsigned char temp; unsigned char dat1=0; unsigned char dat2=0; SCK=0; RST=1;/写入目标地址:addr for (i = 0; i 1; /输

25、出数据:temp for (i = 0; i 1; if (SDA) temp |= 0x80; else temp &= 0x7F; SCK=1; SCK=0; RST=0; /停止DS1302总线 dat2 = temp/16; / 数据进制转换 dat1 = temp%16; dat1 = dat2*10+dat1; return dat1;/*1602显示*/void write_add(uchar add) /1602控制字 RS=0; P0=add; EN=1; delay(5); EN=0;void write_date(uchar date) /1602显示字 RS=1; P0

26、=date; EN=1; delay(5); EN=0;void writesfm(uchar add,uchar date) /1602显示时分秒 uchar s,g; s = date/10; g = date%10; write_add(0x80+0x40+add); write_date(0x30+s); write_date(0x30+g);void writenyr(uchar add,uchar date) /1602显示年月日 uchar s,g; s=date/10; g=date%10; write_add(0x80+0x00+add); write_date(0x30+s

27、); write_date(0x30+g);void writexi(uchar a) write_add(0x80+0x00+11); if(a=1) for(i=0;i3;i+) write_date(xi1i); delay(5); if(a=2) for(i=0;i3;i+) write_date(xi2i); delay(5); if(a=3) for(i=0;i3;i+) write_date(xi3i); delay(5); if(a=4) for(i=0;i3;i+) write_date(xi4i); delay(5); if(a=5) for(i=0;i3;i+) writ

28、e_date(xi5i); delay(5); if(a=6) for(i=0;i3;i+) write_date(xi6i); delay(5); if(a=7) for(i=0;i3;i+) write_date(xi7i); delay(5); void writefuhao(void) /写符号 write_add(0x80+0x00+2); write_date(table2); delay(10); write_add(0x80+0x00+5); write_date(table2); delay(10); write_add(0x80+0x40+2); write_date(ti

29、me12); delay(10); write_add(0x80+0x40+5); write_date(time12); delay(10);void Speak1() /闹铃 alarm = 0; smiao = Read1302(r_Sec); sfen = Read1302(r_Min); sshi = Read1302(r_Hou); snian = Read1302(r_Yea); syue = Read1302(r_Mou); sri = Read1302(r_Day); sxi = Read1302(r_xi); writefuhao(); writesfm(0,sshi);

30、writesfm(3,sfen); writesfm(6,smiao); writenyr(0,snian); writenyr(3,syue); writenyr(6,sri); writexi(sxi); delay(500); alarm = 1; delay(500);void Speak2() alarm=0; delay(500); Normal(); delay(500); Normal(); alarm=1;void Normal() /正常显示时间功能 smiao = Read1302(r_Sec); sfen = Read1302(r_Min); sshi = Read13

31、02(r_Hou); snian = Read1302(r_Yea); syue = Read1302(r_Mou); sri = Read1302(r_Day); sxi = Read1302(r_xi); /读取时间数据 if(nshi=sshi)&(nfen=sfen) /闹钟铃响 for(i=0;i2;i+) key5(); if(b=0) Speak1(); /关闭蜂鸣器 if(sshi=0|sshi=1|sshi=2|sshi=3 |sshi=4|sshi=5|sshi=6|sshi=7 |sshi=8|sshi=9|sshi=10|sshi=11|sshi=12|sshi=13|

32、sshi=14|sshi=15|sshi=16|sshi=1|sshi=18|sshi=19|sshi=20|sshi=21|sshi=22|sshi=23) &(sfen=0)&(smiao=0) Speak2(); /整点报时 alarm=1; /关闭蜂鸣器 writefuhao(); writesfm(0,sshi); writesfm(3,sfen); writesfm(6,smiao); writenyr(0,snian); writenyr(3,syue); writenyr(6,sri); writexi(sxi); /*按键程序*/void key() /闹钟时的按键功能 if

33、(k1=0) delay(10);if(k1=0) n+; while(!k1); if(n=1) write_add(0x0f); write_add(0x80+0x40+4); /写shi if(n=2) write_add(0x0f); write_add(0x80+0x40+7); /写fen if(n=3) n=0; nfen=fen; nshi=shi; /确认 write_add(0x0c); /光标不闪烁 if(k2=0) delay(10); if(k2=0) while(!k2); if(n=1) shi+; if(shi=24) shi=0; writesfm(4,shi

34、); if(n=2) fen+; if(fen=60) fen=0; writesfm(7,fen); if(k3=0) delay(10); if(k3=0) while(!k3); if(n=1) shi-; if(shi=-1) shi=23; writesfm(4,shi); if(n=2) fen-; if(fen=-1) fen=59; writesfm(7,fen); void key1(void) if(k1=0) /设置光标所在位置 delay(10); /去抖 if(k1=0) num+; while(!k1); if(num=1) write_add(0x0f); /显示光标并闪烁 write_add(0x80+0x40+6); if(num=2) write_add(0x0f); /显示光标并闪烁 write_add(0x80+0x40+3); if(num=3) write_add(0x0f); /显示光标并闪烁 write_add(0x80+0x40+0); if(num=4) write_add(0x0f);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号