基于单片机c51的简单万年历设计_毕业设计_第1页
基于单片机c51的简单万年历设计_毕业设计_第2页
基于单片机c51的简单万年历设计_毕业设计_第3页
基于单片机c51的简单万年历设计_毕业设计_第4页
基于单片机c51的简单万年历设计_毕业设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第十届学生科技节单片机设计大赛作品名称万年历专业物联网班级1指导老师郑旭丹组长邓清兰学号3112113111组员黄孟秋学号3112113101目录一、绪论1二、系统功能1三、硬件电路131电路设计框图132系统硬件概述2四、各模块功能及工作原理241单片机主控制模块的设计242LCD1602显示模块343键盘模块6五、实现结果9六、系统的实用性及创新性9七、调节中遇到的问题及心得体会10八、程序设计1181流程图1182源代码12九、总结及感谢241、绪论众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是单片机于生活中最为常见的几种应用万年历。本设计以AT89S52单片机作为核心,可以显示当前的日历和时间,时间也可以人为设定,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位)。设置时间的位切换、设定数值、启动定时器、切换日历通过外部中断来实现。万年历显示电路由LCD1602组成,制作该装置的材料需要有软硬件的支持,硬件方面AT89C51单片机,晶振,电源,液晶屏LCD1602。2、系统功能本次设计的是万年历,采用LCD1602显示,实现的功能如下1显示当前时间,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位);2时钟计时,自动进行时间的位切换;3键盘设置,能通过键盘设定当前时间和计时,并通过键盘人为设定时间。3、硬件电路电路设计框图AT89S52主控制模块LCD1602显示模块计时模块键盘输入模块32系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作,本系统选用12MHZ的晶振,使得单片机有合理的运行速度;利用液晶屏LCD1602显示时间信息,通过对AT89S52单片机的编程控制液晶屏LCD1602的显示。显示时间在LCD1602,通过按键切换选择。外部按键可及时设定或调整时间信息。4、各模块功能及工作原理单片机主控制模块的设计AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程FLASH存储器。AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。引脚图如图图41图41AT89S52引脚结构图421LCD1602引脚结构42LCD1602显示模块421LCD1602引脚介绍LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,引脚图如图图421各引脚接口说明如表422所示编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表422LCD1602引脚说明第1脚VSS为地电源。第2脚VDD接5V正电源。第3脚VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚D0D7为8位双向数据线。第15脚背光源正极。第16脚背光源负极。422LCD1602指令1602液晶模块内部的控制器共有11条控制指令,如表423表423LCD1602的指令说明1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明1为高电平、0为低电平)指令1清显示,指令码01H,光标复位到地址00H位置。指令2光标复位,光标返回到地址00H。编号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回0000000013置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L6置功能00001DLNF7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容指令3光标和显示模式设置I/D光标移动方向,高电平右移,低电平左移S屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4显示开关控制。D控制整体显示的开与关,高电平表示开显示,低电平表示关显示C控制光标的开与关,高电平表示有光标,低电平表示无光标B控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5光标或显示移位S/C高电平时移动显示的文字,低电平时移动光标。指令6功能设置命令DL高电平时为4位总线,低电平时为8位总线N低电平时为单行显示,高电平时双行显示F低电平时显示5X7的点阵字符,高电平时显示5X10的点阵字符。指令7字符发生器RAM地址设置。指令8DDRAM地址设置。指令9读忙信号和光标地址BF为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10写数据。指令11读数据。423LCD1602读/写操作LCD1602基本操作时序说明,如表424读状态输入RSL,R/WH,EH输出D0D7状态字写指令输入RSL,R/WL,D0D7指令码,E高脉冲输出无读数据输入RSH,R/WH,EH输出D0D7数据写数据输入RSH,R/WL,D0D7数据,E高脉冲输出无表424LCD1602基本操作时序说明424LCD1602显示模块流程图43键盘模块本设计采用4乘4键盘的反转法控制万年历的计时和时间设定,4乘4键盘电路图如图图431按下按键开始LCD1602初始界面显示欢迎界面显示初始时间结束NY图432431键盘功能图432流程图YN开始对键盘进行扫描,返回键值键值为或键值为键值为键值为09键值为YYNYNYNYNNYNNY44计时模块441计数器工作原理计数器是单片机应用中的重要部件,工作方式灵活,可以对外部事件计数和检测等;实现计数功能。其核心是特殊功能寄存器中能进行加1计数的寄存器。实现原理对T0或T1引脚输入的外部脉冲计数,如下图442流程图NYYNNYYN开始初始时间SEC60开始计时,SECMIN,SEC0YEARH0YEARH,YEARL0YEARL,MON1MON,DAY1HOUR,MIN0DAY,HOUR0按下按键HOUR24MIN60YEARH99YARL99DAY31MON131计数器溢出中断脉冲控制开关NYYNNYNY5、实现结果6、系统的实用性及创新性基本功能能显示当前时间和计时,实现基本时钟功能。创新性界面友好,能实现计时和键盘数字的时间设定和自增、自减的时间设定。7、调节中遇到的问题及心得体会问题一LCD1602的初始化不规范,导致无法正确在LCD1602上显示相应的字符,时间等。解决在网上及课本上查找有关LCD1602初始化的程序,找出错误的地方并及时改正,最终解决了LCD1602的初始化问题。问题二在对秒、分、时、日、月、年等的大小判断时,采用逐位判断,导致程序冗长,不利于程序的优化。解决通过老师的指导及其他相关程序的借鉴,对时间大小的判断进行优化,将秒的十位和各位合为一个整体进行判断,分、时、日、月、年类似。问题三在计时模块中,因为细节问题,找不到导致不能正常计时的原因。解决通过老师的精心指导,找到不能正常计时的原因,将中断次数的判断IFCOUNT100改为IFCOUNT100即可。问题四在键盘设计模块中,对空数组的定义无效。解决通过查找相关资料,了解到空数组的定义要放在DATA中,不能放在CODE中。将空数组定义为UCHARA14使其默认放在DATA中就解决了该问题。8、程序设计流程图NYYY开始显示“SHOWTIME”界面WELCOME设置键按下显示当前时间键盘数字进行时间设置键盘自增、自减进行时间设置开始计时按键开始按下82源代码INCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINTUCHARCODEBUFFER40XFE,0XFD,0XFB,0XF7UCHARCODETABLE0,1,2,3,4,5,6,7,8,9,UCHARCODEW140X83,0X84,0X85,0X86,0X88,0X89,0X8B,0X8C,0XC4,0XC5,0XC7,0XC8,0XCA,0XCBUCHARA14SBITEP27/1602使能引脚SBITRWP26/1602读写引脚SBITRSP25/1602数据/命令选择引脚VOIDDELAYUINTXMS/延时VOIDTIME0_INIT/中断请求VOIDTIMER1_INTVOID/中断VOIDCHARGE/判断秒分时日月等是否大于额外值,若大于向上一位加一VOIDFTIME/初始时间VOIDTIMEON/计时VOIDADD/自加VOIDSUB/自减VOIDWCMDUCHARDEL/1602写指令VOIDWRITEUCHARDEL/1602写数据VOIDL1602_INITVOID/1602初始化VOIDSECOND/秒显示VOIDMINUTE/分显示VOIDHOURS/时显示VOIDDAYS/日显示VOIDMONTH/月显示VOIDYEARS/年显示VOIDOTHER/符号显示VOIDNUMBER/键盘输入数字UINTCOUNT,T/中断执行次数,光标位置参数UCHARSEC0/初始秒UCHARMIN0/初始分UCHARHOUR0/初始时UCHARDAY0/初始日UCHARMON0/初始月UCHARYEARH0/初始年前两位UCHARYEARL0/初始年后两位/1602命令函数VOIDWCMDUCHARDELP0DELRS0RW0E1DELAY1E0DELAY1/1602写数据函数VOIDWRITEUCHARDELP0DELRS1RW0E1DELAY1E0DELAY1/1602初始化VOIDL1602_INITVOIDWCMD0X38WCMD0X38WCMD0X38WCMD0X0EWCMD0X06WCMD0X01/显示秒VOIDSECONDUCHARI,JISEC/10JSEC10WCMD0XCAWRITETABLEIWRITETABLEJ/显示分VOIDMINUTEUCHARI,JIMIN/10JMIN10WCMD0XC7WRITETABLEIWRITETABLEJ/显示时VOIDHOURSUCHARI,JIHOUR/10JHOUR10WCMD0XC4WRITETABLEIWRITETABLEJ/显示日VOIDDAYSUCHARI,JIDAY/10JDAY10WCMD0X8BWRITETABLEIWRITETABLEJ/显示月VOIDMONTHUCHARI,JIMON/10JMON10WCMD0X88WRITETABLEIWRITETABLEJ/显示年VOIDYEARSUCHARI,J,M,NIYEARH/10JYEARH10MYEARL/10NYEARL10WCMD0X83WRITETABLEIWRITETABLEJWRITETABLEMWRITETABLEN/符号显示VOIDOTHERWCMD0XC9WRITEWCMD0XC6WRITEWCMD0X87WRITEWCMD0X8AWRITE/延时VOIDDELAYUINTXMSUINTI,JFORI0I100COUNT0CHARGEFTIME/显示初始时间/时间初值VOIDFTIMESECONDDELAY5MINUTEDELAY5HOURSDELAY5DAYSDELAY5MONTHDELAY5YEARSDELAY5OTHERDELAY5/各个按键返回值UINTKEYVALUEUINTI,JUCHARTEMPUINTKEY_VALUEWHILE1P10XF0IFP10XF0DELAY100IFP10XF0FORJ0J0YEARHYEARSELSEIFT3/光标在第四个位置时,判断年后两位是否大于0,是,年后两位减1,并显示IFYEARL1YEARLYEARSELSEIFT5/光标在第六个位置时,判断月是否大于1,是,月减1,并显示IFMON1MONMONTHELSEIFT7/光标在第八个位置时,判断日是否大于1,是,日减1,并显示IFDAY1DAYDAYSELSEIFT9/光标在第十个位置时,判断时是否大于0,是,时减1,并显示IFHOUR0HOURHOURSELSEIFT11/光标在第十二个位置时,判断分是否大于0,是,分减1,并显示IFMIN0MINMINUTEELSEIFT13/光标在第十四个位置时,判断秒是否大于0,是,秒减1,并显示IFSEC0SECSECOND/主函数VOIDMAINUCHARKEYSUINTI,KEY/数组A的参数I0T0/位置参数L1602_INIT/1602初始化L1602_STRING1,5,“SHOWTIME“/初始界面显示L1602_STRING2,5,“WELCOME“/初始界面显示WHILE1KEYKEYVALUE/将键值赋值给KEYKEYSTABLEKEYIFKEYS/判断键值是否为,是,执行计时TIME0_INITWHILE1TIMEONELSEIFKEYS/判断键值是否为,是,显示初始时间,光标在第一个位置FTIMEWCMD0X83ELSEIFKEYS|KEYS/判断键值是否为或IFKEYS/键值为,执行自加函数ADDELSE/键值为,执行自减函数SUB/判断键值是否为1ITT1WCMDWTELSEIFKEYS/判断键值是否为,是,光标不在最右边时,光标右移一位IFT13ITT1WCMDWTELSE/键值为数字键时,将键值放入A数组中,在调用函数,显示当前设置的时间NUMBERII14AIKEYITNUMBER/输入数字VOIDNUMBERYEARHA010A1YEARLA210A3MONA410A5DAYA610A7HOURA810A9MINA1010A11SECA1210A13FTIME/中断请求VOIDTIME0_INITTMOD0X10TH16553610000/256TL16553610000256EA1ET11TR11/中断VOI

温馨提示

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

评论

0/150

提交评论