单片机课程设计—万年历[1]

合集下载

单片机课程设计万年历

单片机课程设计万年历

项目一万年历一、任务目的通过对万年历的设计和制作,应用了单片机的数码管、键盘接口技术,以及定时/计数器、中断等程序设计技术,进一步训练了单片机并行I/O端口的应用能力、循环程序设计、键盘查询程序设计和调试能力,让同学们初步了解了作为单片机的重要输入设备——键盘接口技术和程序设计方法。

二、设计要求用单片机设计一个在数码管能同时显示年月日时分秒,具体要求:根据提供的单片机,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。

三、系统硬件电路设计可分为最小系统、数码管显示、按键三个单元电路,要求画出各部分电路图,写出工作原理。

最小系统:数码管显示:按键:四、软件设计主流程图:流程图:软件设计有三部分:计时(区分大小月与平月)、显示、校时(使用按键)。

#include <reg51.h>unsigned char msec,sec,min,hou,day=20,mon=3,ci;/*定义msec为50ms计数变量,sec为秒变量,min为分变量,hou为时变量,day 为天变量,mon为月变量,ci为循环次数*/int year=2013;/*定义year为年变量,定义起始年为2013年*/sbit P30=P3^0;/*通过sbit定义可位寻址变量*/sbit P32=P3^2;sbit P33=P3^3;sbit P34=P3^4;void delay(unsigned char i)/*延时函数,当i=1时,延时255微秒*/ { unsigned char j,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}//函数名:T0_INT//函数功能:定时器0中断函数,50ms定时时间到,自动执行该函数,判断是否中断20次//形式参数:无//返回值:无void T0_INT() interrupt 1//定时器0中断类型号为1{TH0=0x3c; //50ms定时初值TL0=0xb0;msec++; //中断次数增1if(msec==20) //中断次数为20次么?{msec=0; //是,1s计时到,50ms计数变量清零sec++; //秒变量加1if(sec==60) //到60s么?{sec=0; //是,1分计时到,秒变量清零min++; //分变量加1if(min==60) //到60分么?{ min=0; //是,1小时计时到,分变量清零hou++; //时变量加1if(hou==24) //到24时么?{ hou=0; //是,1天计时到,时变量清零day++; //天变量加1if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) //月是为1,3,5,7,8,10,12么?{if(day==32){day=1;mon++;} } //是,天到32么?是,天变量复位为1,月变量加1else if( mon==2) //月是为2么?{if(day==29){day=1;mon++;}} //是,天到29么?是,天变量复位为1,月变量加1else //月是为4,6,9,11么?{if(day==31){day=1;mon++;}} //是,天到31么?是,天变量复位为1,月变量加1if(mon==13) //月到13么?{ mon=1; //是,1年计时到,月变量复位到1year++;}}}}}} //年变量加1void main() //主函数{unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f};//定义数字0~9字型显示码,数码管共阴TMOD=0x01; //定时器0工作方式1TR0=1; //启动定时器TH0=0x3c; //50ms定时初值TL0=0xb0;EA=1; //开总中断ET0=1; //定时器0中断while(1){if(P30==1) //P3.0=1么?(开关是开启的么?){ for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[sec%10];delay(2); //选中P2为0x00时控制的数码管,显示秒个位P2=0x01;P0=led[sec/10];delay(2); //选中P2为0x01时控制的数码管,显示秒十位P2=0x02;P0=led[min%10];delay(2); //选中P2为0x02时控制的数码管,显示分个位P2=0x03;P0=led[min/10];delay(2); //选中P2为0x03时控制的数码管,显示分十位P2=0x04;P0=led[hou%10];delay(2); //选中P2为0x04时控制的数码管,显示时个位P2=0x05;P0=led[hou/10];delay(2);} //选中P2为0x05时控制的数码管,显示时十位if(P32==0) //P3.2=0么?按钮按下么?{delay(55);if(P32==0) {sec++;}if(sec==60) {sec=0;}} //是,延时55*255um;P3.2=0么?是,秒变量加1;秒到60么?是,秒变量清零if(P33==0) //P3.3=0么?按钮按下么?{delay(55);if(P33==0) {min++;}if(min==60) {min=0;}} //是,延时55*255um;P3.3=0么?是,分变量加1;分到60么?是,分变量清零if(P34==0) //P3.4=0么?按钮按下么?{delay(55);if(P34==0) {hou++;}if(hou==24) {hou=0;}}} //是,延时55*255um;P3.4=0么?是,时变量加1;时到24么?是,时变量清零else if(P30==0) //P3.0=0么?(开关是闭合的么?){for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[day%10];delay(2); //选中P2为0x00时控制的数码管,显示天个位P2=0x01;P0=led[day/10];delay(2); //选中P2为0x01时控制的数码管,显示天十位P2=0x02;P0=led[mon%10];delay(2); //选中P2为0x02时控制的数码管,显示月个位P2=0x03;P0=led[mon/10];delay(2); //选中P2为0x03时控制的数码管,显示月十位P2=0x04;P0=led[year%10];delay(2); //选中P2为0x04时控制的数码管,显示年个位P2=0x05;P0=led[year/10%10];delay(2); //选中P2为0x05时控制的数码管,显示年十位P2=0x06;P0=led[year/100%10];delay(2); //选中P2为0x06时控制的数码管,显示年百位P2=0x07;P0=led[year/1000];delay(2);} //选中P2为0x07时控制的数码管,显示年千位if(P32==0) //P3.2=0么?按钮按下么?{delay(50);if(P32==0){day++;}if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10|| mon==12) //是,延时50*255um;P3.2=0么?是,天变量加1;月是为1,3,5,7,8,10,12么?{if(day==32){day=1;} } //是,天到32么?是,天变量复位为1else if( mon==2) //月是为2么?{if(day==29){day=1;}} //是,天到29么?是,天变量复位为1else //月是为4,6,9,11么?{if(day==31){day=1;}}} //是,天到31么?是,天变量复位为1if(P33==0) //P3.3=0么?按钮按下么?{delay(50);if(P33==0) {mon++;}if(mon==13) {mon=1;}} //是,延时50*255um;P3.3=0么?是,月变量加1;月到13么?是,月变量复位为1if(P34==0) //P3.4=0么?按钮按下么?{delay(50);if(P34==0) {year++;}}} //是,延时50*255um;P3.3=0么?是,年变量加1;else {;}}}五、系统调试画proteus图,了解单片机最小系统,选用的元件有AT89C51,共阴的蓝色的8位数码管(7SEG-MPX8-CC-BLUE),三八译码器(74HC138),按钮(BUTTON),普通电容(CAP),极性电容(CAP-ELEC),晶体管(CRYSTAL),10K电阻(RES),排阻(RESPACK-8),单刀单匝开关(SWITCH),将电路连接完整。

万年历单片机课程设计

万年历单片机课程设计

万年历单片机课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握其功能和应用。

2. 学生能掌握万年历的运行机制,理解日期、时间计算的方法。

3. 学生能了解并运用编程语言(如C语言)进行单片机程序设计。

技能目标:1. 学生能运用所学知识,设计并实现一个具有日期和时间显示功能的万年历单片机系统。

2. 学生能够通过实践操作,掌握使用开发工具和调试技巧,提高问题解决能力。

情感态度价值观目标:1. 学生培养对单片机技术及编程的兴趣,激发创新意识和探索精神。

2. 学生通过团队协作,培养沟通、合作能力,提高集体荣誉感。

3. 学生在学习过程中,认识到科技发展对社会的重要性,增强社会责任感。

课程性质:本课程为实践性较强的课程,结合理论知识与实践操作,让学生在动手实践中掌握单片机技术。

学生特点:学生具备一定的电子技术基础,对编程有一定了解,好奇心强,喜欢动手实践。

教学要求:教师需结合学生特点,采用任务驱动、案例教学等方法,引导学生主动探究,确保课程目标的实现。

在教学过程中,注重培养学生的实践能力和创新能力。

通过对课程目标的分解和教学评估,确保学生达到预期学习成果。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理及功能特点,结合教材第二章内容,使学生建立单片机的基本概念。

2. 编程语言基础:回顾C语言编程基础,强调其在单片机编程中的应用,参考教材第四章进行教学。

3. 万年历原理:讲解日期和时间的计算方法,分析万年历的运行机制,结合教材第三章内容进行教学。

4. 单片机程序设计:教授如何使用C语言编写单片机程序,实现万年历功能,参考教材第五章内容。

5. 硬件电路设计:介绍万年历单片机系统的硬件组成,分析电路原理,结合教材第六章进行教学。

6. 实践操作:指导学生使用开发工具进行程序编写、调试和烧录,完成万年历单片机系统的搭建和测试。

7. 教学进度安排:- 第1周:单片机基础知识学习;- 第2周:编程语言基础复习;- 第3-4周:万年历原理讲解和单片机程序设计;- 第5周:硬件电路设计;- 第6周:实践操作,完成万年历单片机系统设计;- 第7周:总结与展示,进行教学评估。

单片机课程设计-万年历

单片机课程设计-万年历

一、课程设计名称万年历二、课程设计目的1、掌握单片机的原理、应用。

2、学会利用单片机设计电路。

3、培养大家的创新意识及动手能力。

三、课程设计内容(一)方案设计我们组设计的万年历是以一片40引脚的单片机AT89C52为主体,结合16位定时器/计数器和LED数码管等元器件来实现的,主要有几个单元电路构成,分别是复位电路、振荡电路、按键电路、整点报时电路和显示电路,下面给出了电路框图及其分析和说明。

1、复位电路此单元电路为手动复位电路,由按键、电解电容、电阻等构成,与单片机的RST引脚相连接,在单片机运行过程中可以随时按键复位,电路图如图1所示:图-1 复位电路2、振荡电路此单元电路由晶振和电容构成,其中的晶振频率为12MHz,与单片机的XTAL1和XTAL2引脚相连接,具体电路如图2所示:图-2振荡电路3、调整电路此单元电路主要由多个弹性按键构成,在所设计的电路中与单片机的I/O(P1)口相连接,具体电路可参考图3:图-3按键调整电路图中的按键K0、K1、K2、K3分别具有不同的功能,其中K0、K1、K2用于校准,K0调节小时(或年)、K1调节分(或月)、K2调节秒(或日);K3用于切换,启动时万年历显示的为时分秒,当按下K3时可以切换到年月日显示界面。

4、整点报时电路此部分电路通过采用晶体管驱动蜂鸣器实现的,每当显示时间出现整点时(如12:00:00),蜂鸣器会发出短暂响声,起到整点报时功能。

实际电路中与单片机的P1.3相连接,具体电路可参照图4:图-4整点报时电路5、显示电路此单元电路为万年历的显示屏,由共阳数码管构成,采用动态扫描的方式来显示年月日和时分秒,示意图如图5所示:图-5数码管显示电路注意:实际中电路与上述电路不同,稍复杂些,而且采用的是两个四位一体的数码管,还要接限流电阻(较小,如470欧)和晶体管(如9012)。

(二)系统硬件设计该系统主要由时钟电路部分、中央处理单元、数码管显示部分组成,各组成部分如图所示。

毕业设计 基于51单片机的万年历设计1

毕业设计 基于51单片机的万年历设计1

基于51单片机的万年历设计单片机经过几十年的发展,已经广泛应用于生活中的各个领域。

单片机以其体积小、功能全、性价比高等诸多优点,在许多行业都得到了广泛应用。

在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。

基于单片机的万年历作为设计的课题,因为它有很好的开放性和可发挥性,对作者的要求比较高,不仅考察了对单片机的掌握能力而且强调了对单片机扩展的应用。

另外液晶显示的万年历已经越来越流行,特别适合在家庭居室、办公室、大厅、会议室、车站和广场等地方使用,它具有显示清晰直观、走时准确、可以进行夜视等功能,并且还可以扩展出其它多种功能。

所以,电子万年历作为设计课题很有价值。

现在对于电子万年历的设计大多运用51单片机。

主要是因为51单片机种类齐全、结构体系完整、指令系统功能完善、性能优越、具有较高可靠性和高性价比等特点。

本篇论文主要介绍了运用单片机实现电子万年历的设计,万年历系统拟用STC89C51单片机控制,以DS1302时钟芯片计时、1602液晶屏显示。

系统主要由单片机控制电路,显示电路以及校正电路三个模块组成。

本文阐述了系统的硬件工作原理,所应用的各个接口模块的功能以及其工作过程,论证了设计方案理论的可行性。

目录第一章绪论 (1)1.1本课题主要的研究工作 (1)第二章系统的硬件设计与实现 (2)2.1电路设计框图 (2)2.2系统硬件概述 (2)2.3主要单元电路的设计 (2)2.3.1 单片机主控制模块的设计 (2)2.3.2时钟电路模块的设计 (3)2.3.3独立式键盘设计 (4)2.3.4显示模块的设计 (4)第三章系统的软件设计 (6)3.1程序流程图 (6)3.1.1 系统总流程图 (6)3.1.2 DS1302时钟程序流程图 (7)3.1.3 LCD显示程序流程图 (8)3.2程序的设计 (9)3.2.1 DS1302读写程序 (9)3.2.2 液晶显示程序 (11)第四章仿真与调试 (13)4.1K EIL软件调试流程 (13)4.2P ROTEUS软件运行流程 (13)4.3万年历的功能仿真 (13)致谢 (15)参考文献 (16)附录:主程序 (17)第一章绪论1.1 本课题主要的研究工作本项目是一种基于AT89C51片机的万年历设计,本方案以AT89C51片机作为主控核心,与时钟芯片DS1302、按键、LCD1602液晶显示器组成硬件系统。

单片机课程设计--基于51单片机的万年历

单片机课程设计--基于51单片机的万年历

单片机课程设计报告万年历的设计基于51单片机的万年历摘要:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。

在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。

万年历的设计过程在硬件与软件方面进行同步设计。

硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。

在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。

显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。

软件方面主要包括日历程序、时间调整程序,显示程序等。

程序采用C语言编写。

所有程序编写完成后,在KeilC51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

一、设计要求基本要求:1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”;2,具有日历功能;③时间可以通过按键调整。

发挥部分:④具有闹钟功能(可以设定多个)。

二:总体设计电路设计框图系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由单片机定时功能提供;温度的采集由DS18B20构成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,使用时不需要额外的外围电路。

单片机课程设计—万年历[1]

单片机课程设计—万年历[1]

单片机课程设计—万年历[1]郑州轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目:电子万年历学生姓名:系别:专业:班级:学号:指导教师:2011年12月16日逻辑总框图:该电子万年历的总体设计框图如图(1)所示。

设计所需的元件:元件名称型号数量/个单片机 AT89C52 1时钟芯片 DS1302 1晶振 12MHz 1晶振 32.768kHz 1电容 30pF 2电容 22uF 1按键开关 4电阻 10K 9滑动变阻器 1K 1电池 1.5V 4LCD LCD1602 1电源Vcc +5V 1导线若干单元电路设计:1、主控制系统单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图(2)所示。

该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。

整个系统结构紧凑,抗干扰能力强,性价比高。

2、时钟振荡电路时钟振荡电路图(3)所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。

此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。

电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。

图(3)时钟振荡电路图图(4)复位电路3、复位电路复位电路由电阻和极性电容组成,如图(4)所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。

此复位电路为上电复位,较为简单。

若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。

单片机课程设计报告电子万年历

单片机课程设计报告电子万年历

单片机课程设计报告电子万年历单片机课程设计报告:电子万年历一、设计简介在本次单片机课程设计中,我们选择了电子万年历作为设计主题。

电子万年历是一种结合了数字电路、单片机技术和实时时钟(RTC)技术的电子产品,它具有显示年份、月份、星期、日、时、分、秒的功能,还可以根据用户的需求进行定时、闹钟、报时等功能。

二、硬件设计我们采用了基于8051内核的单片机作为主控芯片。

该单片机具有丰富的I/O 端口,适于实现各种复杂的输入输出操作。

此外,它还内置了定时器和中断控制器,可以很方便地实现实时时钟功能。

1.显示模块:为了方便用户查看时间信息,我们选用了LCD显示屏作为显示设备。

LCD屏具有功耗低、体积小、显示内容丰富等优点。

2.实时时钟(RTC)模块:我们采用了常用的DS1302芯片作为实时时钟模块。

该芯片可以提供秒、分、时、日、星期、月、年的信息,而且还有可编程的报警功能。

3.按键模块:为了实现人机交互,我们设计了一组按键。

用户可以通过按键来调整时间、设置闹钟等。

4.电源模块:为了保证系统的稳定工作,我们采用了稳定的5V直流电源。

三、软件设计我们采用了C语言编写程序。

程序主要由以下几个部分组成:1.主程序:主程序主要负责读取RTC模块的时间信息,并控制LCD显示屏显示时间。

同时,主程序还要检测按键输入,根据用户的需求进行相应的操作。

2.RTC驱动程序:为了正确地读取和设置DS1302芯片的时间信息,我们编写了相应的驱动程序。

驱动程序包括初始化和读写寄存器两部分。

3.按键处理程序:按键处理程序用于检测按键输入,并根据按键值执行相应的操作。

比如,用户可以通过按键来增加或减少时间,设置闹钟等。

4.LCD显示程序:LCD显示程序用于控制LCD显示屏的显示内容。

在本设计中,我们使用了点阵字符库,将时间信息以字符的形式显示在LCD屏上。

四、测试与验证为了确保我们的电子万年历设计正确无误,我们进行了以下的测试和验证:1.硬件测试:首先,我们对硬件电路进行了测试,确保每个模块都能正常工作。

基于51单片机的万年历设计

基于51单片机的万年历设计

基于51单片机的万年历设计一、系统设计方案本万年历系统主要由 51 单片机、时钟芯片、液晶显示屏、按键等部分组成。

51 单片机作为核心控制器,负责整个系统的运行和数据处理。

时钟芯片用于提供精确的时间信息,液晶显示屏用于显示万年历的相关内容,按键则用于设置时间和功能切换。

二、硬件设计1、单片机选型选用常见的 51 单片机,如 STC89C52 单片机,它具有性能稳定、价格低廉、易于编程等优点。

2、时钟芯片选择 DS1302 时钟芯片,该芯片能够提供高精度的实时时钟,具有闰年补偿功能,并且可以通过串行接口与单片机进行通信。

3、液晶显示屏采用 1602 液晶显示屏,能够清晰地显示字符和数字,满足万年历的显示需求。

4、按键电路设计四个按键,分别用于时间设置、功能切换、加和减操作。

三、软件设计1、主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、时钟芯片初始化、液晶显示屏初始化等。

然后读取时钟芯片中的时间数据,并在液晶显示屏上显示出来。

接着进入循环,不断检测按键状态,根据按键操作执行相应的功能,如时间设置、功能切换等。

2、时钟芯片驱动程序通过单片机的串行接口向 DS1302 发送命令和数据,实现对时钟芯片的读写操作,获取准确的时间信息。

3、液晶显示屏驱动程序编写相应的函数,实现对1602 液晶显示屏的字符和数字显示控制。

4、按键处理程序采用扫描方式检测按键状态,当检测到按键按下时,执行相应的按键处理函数,实现时间设置和功能切换等操作。

四、时间设置功能通过按键操作进入时间设置模式,可以分别设置年、月、日、时、分、秒等信息。

在设置过程中,液晶显示屏会显示当前设置的项目和数值,并通过加、减按键进行调整。

设置完成后,将新的时间数据保存到时钟芯片中。

五、显示功能万年历的显示内容包括年、月、日、星期、时、分、秒等信息。

通过合理的排版和显示控制,使这些信息在液晶显示屏上清晰、直观地呈现给用户。

六、系统调试在完成硬件和软件设计后,需要对系统进行调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

郑州轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目:电子万年历学生姓名:系别:专业:班级:学号:指导教师:2011年12月16日设计题目:电子万年历设计任务与要求:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能方案比较:方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。

方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源电路、复位电路、晶振电路等模块。

主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

两个方案工作原理大致相同,只有显示模块和时钟电路不同。

LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。

DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。

单片机有定时器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。

对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

逻辑总框图:该电子万年历的总体设计框图如图(1)所示。

设计所需的元件:元件名称型号数量/个单片机 AT89C52 1时钟芯片 DS1302 1晶振 12MHz 1晶振 32.768kHz 1电容 30pF 2电容 22uF 1按键开关 4电阻 10K 9滑动变阻器 1K 1电池 1.5V 4LCD LCD1602 1电源Vcc +5V 1导线若干单元电路设计:1、主控制系统单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图(2)所示。

该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。

整个系统结构紧凑,抗干扰能力强,性价比高。

2、时钟振荡电路时钟振荡电路图(3)所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。

此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。

电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。

图(3)时钟振荡电路图图(4)复位电路3、复位电路复位电路由电阻和极性电容组成,如图(4)所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。

此复位电路为上电复位,较为简单。

若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。

手动按钮复位需要人为在复位输入端RST上加入高电平。

一般采用的办法是在RST端和正电源Vcc之间接一个按钮和一个电阻。

4、DS1302时钟电路时钟电路主要由时钟芯片DS1302、备用电池、晶振等几部分组成,如图(6)所示。

DS1302采用3线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。

图(5) DS1302管脚图图(6) DS1302时钟电路DS1302各引脚的功能为:8: Vcc1:备用电池端;1: Vcc2:5V电源。

当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电;7: SCLK:串行时钟,输入;6: I/O:数据输入输出口;5: CE/RST:复位脚;2、3: X1、X2 是外接晶振脚(32.768KHZ的晶振);4: 地(GND)。

DS1302有关日历、时间的寄存器:图(7)DS1302有关日历、时间的寄存器1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。

当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄器的该位置改写为0时,时钟才能开始运行。

2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。

当为高时,选择12小时模式。

在12小时模式时,位5是,当为1时,表示PM。

在24小时模式时,位5是第二个10小时位3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。

在对任何的时钟和RAM的写操作之前,WP位必须为0。

当WP位为1时,写保护位防止对任一寄存器的写操作。

也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。

DS1302读写时序DS1302是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

DS1302的控制字如图(8):图(8)DS1302的控制字图控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。

读数据:读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。

写数据:控制字总是从最低位开始输出。

在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入也是从最低位(0位)开始。

5、按键电路按键电路由四个轻触开关组成,如图(9)所示。

按键用来调整时间,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过一个与门只要这四个按键有一个按下就会在P3.2检测到一低电平就触发外部中断0进入按键调节程序中,通过与个各键相连的端口P3.4_P3.7可以判断是哪个键按下,从而作相应的操作。

图(9) 按键电路6、显示电路1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

显示电路采用LCD1602液晶显示,如图(10)所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。

图(10) LCD1602显示电路LCD1602的特性+5V电压,对比度可调;内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM;基本操作时序:读状态:输入:RS=L,RW=H,E=H;输出:DB0~DB7=状态字;写指令:输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码;输出:无。

读数据:输入:RS=H,RW=H,E=H;输出:DB0~DB7=数据;写数据:输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据;输出:无。

LCD1602的各种指令不再一一说明。

流程图与软件设计:1、程序流程图主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和日期,若没有按下,则执行下面的时间、日期的显示,最后依次循环这些相同的操作,相应流程图如图(11)所示:图(12)程序流程图按键的检测是通过中断的办法来实现,利用按键进行间调整。

K1按下则开始设置时间及日期,同时在第一行最右端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕,K4是确定键,设置好按下即可保存设置了。

2、软件设计软件总设计:主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。

接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。

软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。

因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。

具体程序见附件一:程序3、软件调试在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题,对于开发板上的液晶一般RW都接的地,故不需要读液晶状态,也不需要读忙,但在仿真中还是加上了这一部分。

还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题,整体电路与仿真结果分析:电子万年历硬件电路图及仿真如图(13)所示,系统由AT89C52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。

仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,,按K2键用于加1操作,K3键用于减1操作,K4是确定按钮。

仿真正确显示了时间和日期,符合设计的要求。

相关文档
最新文档