《单片机的电子时钟设计》由会员分享,可在线阅读,更多相关《单片机的电子时钟设计(17页珍藏版)》请在金锄头文库上搜索。
1、-?单片机应用系统设计?课程设计报告标题:基于单片机的电子时钟设计学生*:*系 部:汽车电子系专 业:应用电子技术 班 级:*指导教师:*目录摘要 ()1、方案选择 11.1 DS1302+液晶显示屏2、设计方框图 2.1 电路设计总体框图 2.2 整体设计思路框图 2.3 程序设计框图 3、硬件电路设计3.1 51单片机最小系统设计3.2 电源供电电路设计3.3 串口通信电路设计3.4 时钟芯片电路设计3.5 LCD显示电路设计3.6 报警电路设计4、软件设计4.1 系统程序流程图设计4.2 系统程序设计结论参考文献 附录摘 要基于单片机设计的电子时钟准确度较高,因为在程序执行过程中,任何指
2、令都不影响定时器的正常计数,即使程序很复杂也不会影响到中断时间。单片机是集CPU,RAM,ROM,定时器,计数器和多种接口于一体的微控制器。它体积小、重量轻、抗干扰能力强、环境要求不高、价格低、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。 本系统为基于DS1302的多功能电子钟,以STC89C51单片机作为主控芯,采用实时时钟芯片DS1302,使用1602液晶作为显示输出。该系统走时准确,具有闹钟设置,时间模式切换,秒表以及可同时显示时间、日期等多种功能。关键词: SCT89C51 单片机 液晶屏 时钟芯片 蜂鸣器1方案选择1.1 DS1302+1602LCD液晶屏DS
3、1302 是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进展通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进展通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。1602LCD液晶屏为显示器。程序控制DS1302时钟芯片实现小时、分钟
4、、秒和年、月、日的计时,并在1602LCD液晶屏上显示出来。通过按键对12小时/24小时显示模式切换。当时间走到程序设定的时间时,蜂鸣器响起,起到闹铃功能。2设计方框图2.1电路的总体设计框图输入局部晶振和复位单片机输出局部2.2 整体设计思路熟透硬件,了解引脚功能完成整体电路图综合各程序进展仿真仿真成功设计各局部电路组合电路调试程序并进展修改用Proteus画了电路图软硬件结合,完成要求2.3 程序设计框图 初始化显示判断按键调时调闹钟调定时显示所调时间显示闹铃时间显示定时时间调整时限到或有其他输入按下1键按下3键假设无键按下3 硬件电路设计3.1 51单片机最小系统设计 单片机最小系统如下
5、列图3-1所示:以SCT89C51单片机为核心,选用12MHZ的晶振,由于晶振的频率越高,单片机的运行速度就越快,但考虑到单片机的运行速度快会导致对存储器的要求就会变高,所以12MHZ晶振为最正确选择。外接电容的值虽然没有严格要求,但它的大小会影响振荡器频率的上下、稳定性和起振的快速性,因此选用30PF的电容作为起振电容。复位电路为按键高电平复位。3.2 电源供电电路设计电源供电电路如下列图3-2所示:我们采用外接USB端口的方式为单片机供电,LOPW1为电源显示灯,当按键S5按下,显示灯亮,表示单片机供+5V电压。3.3 串口通信电路设计串口通信如下列图3-3所示:图中通过MA*232进展T
6、TL电平和232电平转换,从而单片机和上位机之间通信提供通道。通信电路的目的就是让通信双发的匹配,单片机用的是TTL电平,上位机的串口用的是232电平。3.4 时钟芯片电路设计DS1302时钟芯片是本系统实现高精度计时的关键。利用DS1302时钟芯片独立于单片机来计时,在提高计时进度的同时也提高了整个系统的抗干扰能力。DS1302通过SCLK、I/O、RES端口和单片机STC89C51进展通信。SCLK接到单片机P1.7口,在读写操作时给DS1302提供相应的时钟脉冲;I/O接到P3.5口用来传送所有的数据;RES接到P1.6口上用来控制单片机与时钟芯片间的数据传送的开场与完毕。3.5 LCD
7、显示电路设计1602LCD液晶屏显示电路如下列图3-5所示:1602LCD液晶屏为5V电压驱动,带背光,可显示2行,每行16个字符。液晶1,2端为电源;15,16为背光电源。液晶3端为液晶比照度调节端。液晶4端为向液晶控制器写数据端。液晶5端为读/写选择端。液晶6端为使能信号,是操作时必须的信号,接单片机的P3.4口。3.5 报警电路设计蜂鸣器闹铃电路如下列图3-5所示:蜂鸣器电路接在单片机的P2.3引脚上,当给该引脚一个低电平,三极管导通,蜂鸣器发出声音作为闹铃。4软件设计4.1系统程序流程图设计实验主程序流程图如下列图4-1.1所示:主程序开场显示/定时判断/开定时中断调用程序条件中断T0
8、与设定时间t接$B4?接$B0?对应P0.3/P0.4/P0.5输出中断0转换显示年月日中断1调整时间设定定时秒分时日月年进位进入定时中断程序 定时中断程序流程图如下列图4-1.2所示:定时中断重装定时常数T0 100ms整秒调整秒单元整分调整分单元整时调整时单元整日调整日单元整月调整月单元整年调整年单元月判断 调时功能流程图如下列图4-1.3所示:中断开场按键扫描开场调整2路调整3路调整年单元调整月单元调整日单元调整时单元调整分单元调整秒单元进入1路年单元月单元日单元时单元分单元开关定时单元加1单元加1单元加1单元加1中断返回按SB1按SB1按SB1按SB1按SB1按SB1按SB3按SB1按
9、SB1按SB1按SB3按SB3按SB3按SB3单元加1按SB2按SB2按SB2按SB2按SB2按SB2设计小结本系统实现了人机交互功能,有夏时令制以及万年历功能。可对年、月、日、时、分、秒进展设定,闹钟设定,具有整点报时功能,模式切换。本系统采用1602LCD显示信息,比其它电子时钟显示信息更丰富,可同时时间、日期、星期等。秒表功能准确到毫秒。可设置多组闹钟。系统具有断最保护功能,芯片可以保存断电时的信息并继续工作。通过这次的设计使我认识到对单片机的知识知道的太少了,书本上的很多知识不能灵活运用,尤其是不能充分理解程序的含义,导致编程过于复杂。但也提高了我的动手能力,让我享受到电子时钟设计的快
10、乐,让我开阔了视野,丰富了经历。知道了如何把理论运用到实际中去,把理论与实际相结合。这次电子时钟的设计给我奠定了一个根底,我会在以后的学习、生活中锻炼自己。参考文献1王建校. 51系列单片机及C51程序设计M.:科学,20022 康华光主编.电子技术根底M,第4版.高等教育,19913 李维缋.液晶显示器件应用技术M.:邮电学院,19934*志新.液晶显示及其用应J.国际光电与显示,20015 鲍宏亚等编 MCS-51系列单片机应用系统设计及实用技术中国宇航 20056 杨文龙.单片机原理及应用M.*电子科技大学 20007 赵文博,*文涛.单片机语言C51程序设计M.人民邮电 20068 李
11、朝青编 单片机原理及接口应用技术第三版航空航天大学2008附录:主要程序清单/*包含器件配置文件*/*define uchar unsigned char*define uint unsigned intchar DATA_7SEG10=0*C0,0*F9,0*A4,0*B0,0*99,0*92,0*82,0*F8,0*80,0*90,;/*09的数码管段码*/uchar hour=0,min=0,sec=0;/*时、分、秒单元清零*/uchar deda=0;/*5mS 计数单元清零*/uchar t_hour=0,t_min=0;/*闹时时、分单元清零*/bit d_05s=0;/*0.5
12、秒标志*/bit o_f=0;/*闹时启/停标志*/uchar set=0;/*模式设定标志*/uchar m=0;uchar flag=0;/*RAM 掉电标志*/void delay(uint k);/*延时子函数*/void conv();/*走时单元转换*/void p_out();/*判别闹时到否子函数*/void dirve();/*走时时间输出驱动子函数*/void t_dirve();/*闹时时间输出驱动子函数*/*闹时启/停子函数*/void time1_of()uchar m;if(P3_7=0)delay(1);if(P3_7=0)o_f=1;for(m=0;m30;m+
13、)t_dirve();P1=DATA_7SEGt_min/10;P3=0*fd;delay(1);if(P3_1=0)if(o_f=1)P1_7=0;else P1_7=1;delay(1);if(P3_5=0)delay(1);if(P3_5=0)o_f=0;for(m=0;m30;m+)t_dirve();P1=DATA_7SEGt_min/10;P3=0*fd;delay(1);if(P3_1=0)if(o_f=1)P1_7=0;else P1_7=1;delay(1);/*走时函数*/void time()conv();/*走时单元转换*/dirve();/*走时时间输出驱动子函数*/p_out();/*判别闹时到否子函数*/*定时器 T0 5mS 初始化*/void init_timer()TMOD=0*01;TH0=-(4800/256);TL0=-(4800%256);IE=0*82;TR0=1;/*扫描按键子函数*/void scan_key()delay(1);if(P3_4=0)set+;