1单片机原理与应用2013年课程综合设计报告设计题目基于单片机的电热水杯设计院系名称计算机科学与技术专业(班级)计算机科学与技术计本(2)班姓名(学号)指导教师完成时间2013年6月16日2课程设计任务书摘要随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中,电子万年历作为一种功能十分强大的日常计时工具,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长、误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、星期、时、分、秒等信息,还具有时间校准等功能,已逐步的出现在我们的日常生活中。一般日常生活中大都使用的是纸质日历。纸质日历显示效果不太好并且使用寿命不长,造成了一定的资源浪费。针对传统的纸质日历局限性,本论文设计了一款基于单片机的电子万年历系统。本设计以AT89S52单片机为核心,构成系统主控制电路。AT89S52是一种带8K字节闪速可编程可擦除只读存储器的低电压、高性能CMOS8位为控制器,全部信息用12864液晶显示时间、日期、闹铃及界面的切换由四个独立按键来实现,并可对闹铃开关进行设置。日历能显示阳历和阴历年、月、日以及星期、时、分、秒。如有节气及生日都会有提醒显示的功能。电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。关键词:电子万年历;AT89S52;TLC549;12864液晶显示屏31设计要求与方案1.1设计要求(1)具有年、月、日、时、分、秒显示和校准功能。(2)闹钟功能,提示时间到后以3分钟每次的频率报警提示用户,直到用户通过按键确定。1.2系统基本方案选择和论证方案一:采用89C51芯片作为硬件核心采用FlashROM内部只具4KBROM存储空间,由于本设计程序比较长,单片机内部的FlashROM不够,需要加外部扩展ROM芯片24C016,电路设计较为复杂。同时此单片机也具有89C51的功能,且具有在线编程可能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时。由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用LED数码管动态扫描数码管价格适中,对于显示数字最合适,但不能显示汉字、图形、显示效果比较差,并且采用LED数码管连接时接线多,硬件电路较为复杂。所以在此设计中不采用LED数码管显示。方案三:采用LCD液晶显示屏液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,所以在此设计中采用FYD12864-0402B液晶显示屏。1.4系统工作原理说明本电路包括基本的时钟电路模块、液晶显示模块、语音报时模块。各功能模块通过控制芯片连接起来,完成本设计要求。电路实现的基本功能是电子万年历。通过液晶LCD12864,可显示年月日、时分秒、等基本信息。增强功能是具备时钟语音报时功能。即每到整点,系统会自动语音报时,报时信息包括日期及时间。4ds1302程序流程框图:图3ds1302程序流程框图2硬件系统的设计2.1时钟芯片的选择方案采用DS1302时钟芯片实现时钟。DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区。工作电压2.5V--5.5V范围内,2.5V时耗电小于300nA。按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列AT89S52单片机时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片可以做到计时准确。更重要的是DS1302可以在很小电流的后备电源2.5--5.5V电源,再2.5V时耗电小于300nA,而且初始化Flag=1?Dnum=?1:小时加一2:分加一3:秒加一4:年加一5:月加一6:日加一7:星期加一1:小时减一2:分减一3:秒减一4:年减一5:月减一6:日减一7:星期减一计算要显示的数据送到12684显示Dnum=?5DS1302可以编程选择多种充电电流来为备电源进行慢速充电,可以保证后备电源基本不耗电,显示模块采用液晶显示屏。2.2单片机主控制模块的设计AT89S52系列单片机是宏品科技生产的单片机,它是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统80C51,但速度快8~12倍。内部集成MAX810专用复位电路,250K/S即25万次/秒,针对电机控制、强干扰场合。它有高速、高可靠、低功耗、超低价、强抗静电、强抗干扰的功能。AT89S52系列工作电压5.5V~3.5V,工作频率范围0MHz~35MHz相当于普通8051的0MHz~420MHz。在芯片上,拥有灵巧的8位CPU和在系统,可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。2.3单元电路设计2.3.1时钟电路时钟芯片DS1302,控制电路如图4所示:图4时钟电路时钟电路采用的是ds1302芯片,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。工作电压与单片机的输入电压比较适合。上面是它的一些基本的应用介绍。2.3.2单片机最小控制系统控制芯片使用AT89S52,控制部分最小系统如图5所示:6图5单片机系统2.3.3液晶显示模块显示模块使用液晶FYD12864-0402B,电路原理图如图6所示图6液晶显示2.3.4液晶FYD12864-0402B概述FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和7简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多。2.3.5液晶FYD12864-0402B基本特性(1)低电源电压(VDD:+3.0--+5.5V)(2)显示分辨率:128×64点(3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)(4)内置128个16×8点阵字符(5)2MHZ时钟频率(6)显示方式:STN、半透、正显(7)驱动方式:1/32DUTY,1/5BIAS(8)视角方向:6点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10(10)通讯方式:串行、并口可选(11)内置DC-DC转换电路,无需外加负压(12)无需片选信号,简化软件设计2.3.6液晶FYD12864-0402B串口接口管脚信号如表1、表2所示:表1液晶屏管脚管脚号名称LEVEL功能1VSS0V电源地2VDD+5V电源正(3.0V——5.5V)3V0-对比度(亮度)调整4CSH/L模组片选端,高电平有效5SIDH/L串行数据输入端6CLKH/L串行同步时钟:上升沿时读取SID数据15PSBLL:串口方式(见注释1)17/RESETH/L复位端,低电平有效(见注释2)19AVDD背光源电压+5V(见注释3)20KVSS背光源负端0V(见注释3)表2液晶屏管脚功能管脚号管脚名称电平管脚功能描述1VSS0V电源地82VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7——DB0R/W=L,E=H→L,DB7——DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)3、课程设计整体电路整体原理图如图7所示:9图7原理图4、课程设计部分程序4.1main主程序#includereg52.h10#includeintrins.h#includeLCD12864.h//液晶显示木块头文件#includeds1302.h//时钟模块头文件#includedelay.h//延时模块头文件#includebeep.h//报警模块头文件#defineucharunsignedchar#defineuintunsignedintuchartemp,TNL,almtemp;voidmain(){Set_RTC();//设置万年历初始时间delay(500);lcdset();//液晶显示屏初始化beepoff();//关闭蜂鸣器while(1){TNL=shuju1302();//读-年-月-日-时-分-秒,并将万年历函数变量返回值送给闹铃变量TNLif(TNL==1)beepon();//蜂鸣器报警elsebeepoff();disply1302();//送液晶显示屏显示}}4.2LCD12864函数#includeLCD12864.h#includedelay.h#includereg52.h#defineucharunsignedcharsbitrs=P3^1;sbitrw=P3^6;sbiten=P3^7;voidwritecommand(ucharcommand){delay(100);rs=0;rw=0;en=1;P0=command;//液晶数据线P0en=0;11}voidwritedata(uchardate){delay(100);rs=1;rw=0;en=1;P0=date;en=0;}voidlcdset(void){writecommand(0x30);//基本指令集writecommand(0x01);//清屏,DDRAM的地址归零writecommand(0x02);//地址归位writecommand(0x0c);//显示开,光标关,反白关writecommand(0x06);//DDRAM地址加1}voiddisplay(uchary,ucharx,uchar*p){switch(y){case1:writecommand(0x7f+x);break;//液晶第一行case2:writecommand(0x8f+x);break;//0x90+(x-1)case3:writecommand(0x87+x);break;case4:writecommand(0x97+x);break;default:break;}while(*p)writedata(*p++);}4.3显示程序#includeds1302.h#includeLCD12864.h#includedelay.h#includeintrins.h#includereg52.h#de