版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十届学生科技节单片机设计大赛作品名称:万年历专业:物联网班级:1组长:邓清兰学号:3112113111组员:黄孟秋学号:3112113101目录TOC o 1-5 h z一、绪论0二、系统功能0三、硬件电路0 HYPERLINK l bookmark2 o Current Document 电路设计框图0系统硬件概述1四、各模块功能及工作原理1单片机主控制模块的设计1 HYPERLINK l bookmark4 o Current Document LCD1602显示模块2 HYPERLINK l bookmark6 o Current Document 键盘模块5五、实现结果8六、系统的实
2、用性及创新性9七、调节中遇到的问题及心得体会9八、稈序设计10 HYPERLINK l bookmark26 o Current Document 流稈图10 HYPERLINK l bookmark28 o Current Document 源代码11九、总结及感谢23一、绪论众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是
3、单片机于生活中最为常见的几种应用万年历。本设计以AT89S52单片机作为核心,可以显示当前的日历和时间,时间也可以人为设定,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位)。设置时间的位切换、设定数值、启动定时器、切换日历通过外部中断来实现。万年历显示电路由LCD1602组成,制作该装置的材料需要有软硬件的支持,硬件方面AT89C51单片机,晶振,电源,液晶屏LCD1602。二、系统功能本次设计的是万年历,采用LCD1602显示,实现的功能如下:显示当前时间,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位);时钟计时,自动进行时间
4、的位切换;键盘设置,能通过键盘设定当前时间和计时,并通过键盘人为设定时间。三、硬件电路3.1.电路设计框图福建工稈学院软件学院软件工稈物联网工稈第1页共26页3.2.系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作,本系统选用12MHZ的晶振,使得单片机有合理的运行速度;利用液晶屏LCD1602显示时间信息,通过对AT89S52单片机的编程控制液晶屏LCD1602的显示。显示时间在LCD1602,通过按键切换选择。外部按键可及时设定或调整时间信息。買鲷鴯譖昙膚遙闫撷凄四、各模块功能及工作原理单片机主控制模块的设计AT89S52是一种低功耗、高性
5、能CMOS8位微控制器,具有8K在系统可编程Flash存储器。AT89S52单片机为40引脚双列直插芯片,有四个I/O口PO,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(PO、Pl、P2、P3),每一条I/O线都能独立地作输出或输入。18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。引脚图如图图4.1:(T2)P1.0C2VCCq40:T二EX)F1.-匚23
6、0PC.C(ADOF1.2匚3阳PC.1的m門卫匸斗37PC.2(A&2P1.4匚539pc.2e.g-孙(MGSI)P1.5:a35P0.4(AD4)(MISO)F1.0匚丁34PC.5eg(SCK)P1.7匚033PD.6RSTT匚932PC.?(RXD)P3.0匚1031EAsVPPED)P3.1匚1130ALEPROG(INTD)L1229F5ENJTH:.R3.3LI32BP2.7(A1E)(TDJP3.4匚1427P2.0(A14)(T1)ra.aiz1529P216图4.1AT89S52引脚结构1602图4.2.1LCD1602引脚结构福建工稈学院软件学院软件工稈物联网工稈第 页
7、共26页LCD1602显示模块4.2.1LCD1602引脚介绍LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,引脚图如图图4.2.1:各引脚接口说明如表4.2.2所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表4.2.2LCD1602引脚说明第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比
8、度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。猫虿驢绘燈鮒诛髅貺庑。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。锹籁第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:DOD7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。4.2.2LCD1602指令1602液晶模块内部的控制器共
9、有11条控制指令,如表4.2.3编号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表4.2.3LCD1602的指令说明1602液晶模块的读写操作、屏幕和光标的操作都是通过指令
10、编程来实现的。(说明:1为高电平、0为低电平)構氽頑黉碩饨荠龈话骛指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。咼电平表示有效,低电平则无效。輒峄指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。尧侧閆繭絳闕绚勵蜆贅。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命
11、令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。识饒鎂錕缢灩筧嚌俨淒。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。凍鈹鋨劳臘锴痫婦胫籴。指令10:写数据。指令11:读数据。4.2.3LCD1602读/写操作LCD1602基本操作时序说明,如表4.2.4读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉
12、冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表4.2.4LCD1602基本操作时序说明4.2.4LCD1602显示模块流程图键盘模块本设计采用4乘4键盘的反转法控制万年历的计时和时间设定,4乘4键盘电路图如图图4.3.1福建工稈学院软件学院软件工稈物联网工稈4*4键盘图4.3.2凹日匡SS0EEHHE4.3.2流程图YYNYNYNY4.4计时模块4.4.1计数器工作原理计数器:是单片机应用中的重要部件,工作方式灵活,可以对外部事件计数和检测等;实现计数功能。其核心是特殊功能寄存器中能进行加1计数的寄存器。实现原
13、理:对T0或T1引脚输入的外部脉冲计数,如下图:第8页共26页福建工稈学院软件学院软件工稈物联网工稈第 页共26页六、系统的实用性及创新性基本功能:能显示当前时间和计时,实现基本时钟功能。创新性:界面友好,能实现计时和键盘数字的时间设定和自增、自减的时间设定。七、调节中遇到的问题及心得体会问题一LCD1602的初始化不规范,导致无法正确在LCD1602上显示相应的字符,时间等。解决在网上及课本上查找有关LCD1602初始化的程序,找出错误的地方并及时改正,最终解决了LCD1602的初始化问题。阌擻輳嬪諫迁择楨秘騖问题二在对秒、分、时、日、月、年等的大小判断时,采用逐位判断,导致稈序冗长,不利于
14、稈序的优化。解决通过老师的指导及其他相关稈序的借鉴,对时间大小的判断进行优化,将秒的十位和各位合为一个整体进行判断,分、时、日、月、年类似。氬嚕躑竄贸恳彈瀘问题三在计时模块中,因为细节问题,找不到导致不能正常计时的原因。解决通过老师的精心指导,找到不能正常计时的原因,将中断次数的判断if(count100)改为if(count=100)即可。问题四福建工稈学院软件学院软件工稈物联网工稈在键盘设计模块中,对空数组的定义无效。解决通过查找相关资料,了解到空数组的定义要放在data中,不能放在code中。将空数组定义为uchara14使其默认放在data中就解决了该问题。怂阐譜鯪迳八、稈序设计8.1
15、.流程图福建工稈学院软件学院软件工稈物联网工稈第 页共26页8.2.源代码#include#defineucharunsignedchar#defineuintunsignedintucharcodeBuffer4=0 xfe,0 xfd,0 xfb,0 xf7;ucharcodetable=0,1,2,3,4,5,6,7,8,9,+,-,!,;嘰觐詿缧铴嗫偽ucharcodew14=0 x83,0 x84,0 x85,0 x86,0 x88,0 x89,0 x8b,0 x8c,0 xc4,0 xc5,0 xc7,0 xc8,0 xca,0 xcb;uchara14;sbitE=P2人7;16
16、02使能引脚sbitRW=P2A6;1602读写引脚sbitRS=P2A5;1602数据/命令选择引脚voidDelay(uintxms);/延时voidTime0_Init();/中断请求voidtimer1_int(void);/中断voidcharge();/判断秒分时日月等是否大于额外值,若大于向上一位加一voidftime();/初始时间voidtimeon();/计时voidadd();/自加voidsub();/自减voidwcmd(uchardel);/1602写指令voidwrite(uchardel);/1602写数据voidL1602_init(void);/1602初始
17、化voidsecond();voidminute();voidhours();voiddays();voidmonth();voidyears();voidother();voidnumber();/秒显示/分显示/时显示/日显示/月显示/年显示/符号显示/键盘输入数字uintcount,t;ucharsec=0;ucharmin=0;ucharhour=0;ucharday=0;ucharmon=0;ucharyearh=0;ucharyearl=0;/中断执行次数,光标位置参数/初始秒/初始分/初始时/初始日/初始月/初始年前两位/初始年后两位/1602命令函数voidwcmd(uchar
18、del)P0=del;RS=0;RW=0;E=1;Delay(1);E=0;Delay(1);/1602写数据函数voidwrite(uchardel)P0=del;RS=1;RW=0;E=1;Delay(1);E=0;Delay(1);/1602初始化voidL1602_init(void)wcmd(0 x38);wcmd(0 x38);wcmd(0 x38);wcmd(0 x0e);wcmd(0 x06);wcmd(0 x01);/显示秒voidsecond()uchari,j;i=sec/10;j=sec%10;wcmd(0 xca);write(tablei);write(tablej
19、);/显示分voidminute()uchari,j;i=min/10;j=min%10;wcmd(0 xc7);write(tablei);write(tablej);/显示时voidhours()uchari,j;i=hour/10;j=hour%10;wcmd(0 xc4);write(tablei);write(tablej);/显示日voiddays()uchari,j;i=day/10;j=day%10;wcmd(0 x8b);write(tablei);write(tablej);/显示月voidmonth()uchari,j;i=mon/10;j=mon%10;wcmd(0 x
20、88);write(tablei);write(tablej);/显示年voidyears()uchari,j,m,n;i=yearh/10;j=yearh%10;m=yearl/10;n=yearl%10;wcmd(0 x83);write(tablei);write(tablej);write(tablem);write(tablen);/符号显示voidother()wcmd(0 xc9);write(:);wcmd(0 xc6);write(:);wcmd(0 x87);write(-);wcmd(0 x8a);write(-);/延时voidDelay(uintxms)uinti,j
21、;for(i=0;ixms;i+)for(j=0;j=100)count=0;charge();ftime();/显示初始时间/时间初值voidftime()second();Delay(5);minute();Delay(5);hours();Delay(5);days();Delay(5);month();Delay(5);years();Delay(5);other();Delay(5);/各个按键返回值uintKeyvalue()uinti,j;uchartemp;uintKey_value;while(1)P1=0 xf0;if(P1!=0 xf0)Delay(100);if(P1!
22、=0 xf0)for(j=0;j4;j+)P1=Bufferj;temp=0 x10;for(i=0;i4;i+)if(!(P1&temp)Key_value=i+j*4;temp=1;returnKey_value;/字符串显示voidL1602_string(ucharhang,ucharlie,uchar*p)uchara,b=0;if(hang=1)a=0 x80;if(hang=2)a=0 xc0;a=a+lie-1;while(1)wcmd(a+);b+;if(*p=0)|(b=16)break;write(*p);Delay(500);p+;/自增voidadd()wcmd(wt
23、);/光标置位if(t=1)/光标在第二个位置时if(yearh99)/判断年前两位是否小于99,是,年前两位加1,并显示yearh+;years();elseif(t=3)/光标在第四个位置时if(yearl99)/判断年后两位是否小于99,是,年后两位加1,并显示yearl+;years();elseif(t=5)/光标在第六个位置时if(mon12)/判断月是否小于12,是,月加1,并显示mon+;month();elseif(t=7)/光标在第八个位置时if(day30)/判断日是否小于30,是,日加1,并显示day+;days();elseif(t=9)/当光标在第十个位置时if(h
24、our12)/判断时是否小于12,是,时加1,并显示hour+;hours();elseif(t=11)/光标在第十二个位置时if(min59)/判断分是否小于59,是,分加1,并显示min+;minute();elseif(t=13)/光标在第十四个位置时if(sec0)yearh-;years();elseif(t=3)/光标在第四个位置时,判断年后两位是否大于0,是,年后两位减1,并显示鶼渍螻偉阅劍鲰腎邏蘞。if(yearl1)yearl-;years();并显示elseif(t=5)/光标在第六个位置时,判断月是否大于1,是,月减1if(mon1)mon-;month();elseif
25、(t=7)/光标在第八个位置时,判断日是否大于1,是,日减1并显示if(day1)day-;days();elseif(t=9)/光标在第十个位置时,判断时是否大于0,是,时减1,并显示if(hour0)hour-;hours();elseif(t=11)/光标在第十二个位置时,判断分是否大于0,是,分减1,并显示if(min0)min-;minute();elseif(t=13)/光标在第十四个位置时,判断秒是否大于0,是,秒减1,并显示if(sec0)sec-;second();/主函数voidmain()ucharkeys;uinti,key;/数组a的参数i=0;t=0;/位置参数L1
26、602_init();/1602初始化L1602_string(1,5,Showtime);/初始界面显示L1602_string(2,5,Welcome!);/初始界面显示while(1)key=Keyvalue();/将键值赋值给keykeys=tablekey;if(keys=)/判断键值是否为,是,执行计时Time0_Init();while(1)timeon();elseif(keys=!)/判断键值是否为!,是,显示初始时间,光标在第一个位置ftime();wcmd(0 x83);elseif(keys=-|keys=+)/判断键值是否为+或-if(keys=+)/键值为+,执行自
27、加函数add();else/键值为-,执行自减函数sub();/判断键值是否为,是,光标不在最左边时,光标左移一位elseif(keys=1)i-;t=t-1;wcmd(wt);elseif(keys=)/判断键值是否为,是,光标不在最右边时,光标右移一位纣忧蔣氳頑莶驅藥悯骛。if(t13)i+;t=t+1;wcmd(wt);else键值为数字键时,将键值放入a数组中,在调用函数,显示当前设置的时间number();i=i%14;ai=key;i+;t+;number();/输入数字voidnumber()yearh=a0*10+a1;yearl=a2*10+a3;mon=a4*10+a5;day=a6*10+a7;hour=a8*10+a9;min=a10*10+a11;sec=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉溪云南玉溪澄江市教育体育系统招聘2025年毕业生9人(第二次)笔试历年参考题库附带答案详解
- 江苏2025年江苏建筑职业技术学院湖西校区招聘人事代理工作人员26人笔试历年参考题库附带答案详解
- 2025年房产及土地使用权受赠合同3篇
- 合肥2024年安徽合肥庐江县社区工作者招聘56人笔试历年参考题库附带答案详解
- 三明2024年福建三明市第二医院(三明市永安总医院)招聘23人笔试历年参考题库附带答案详解
- 北京2024年北京市测绘设计研究院面向应届生招聘笔试历年参考题库附带答案详解
- 三亚2025年海南三亚市天涯区招聘应届海南专项研究生笔试历年参考题库附带答案详解
- 北京2025年北京市延庆区教育委员会招聘教师64笔试历年参考题库附带答案详解
- 2025年四川宜宾市兴文县产业投资集团有限责任公司招聘笔试参考题库附带答案详解
- 2025年新生入学法律协议书(综合保障与创新发展)3篇
- 2023年河南省公务员录用考试《行测》真题及答案解析
- 2024年安徽省公务员录用考试《行测》真题及答案解析
- 山西省太原市重点中学2025届物理高一第一学期期末统考试题含解析
- 充电桩项目运营方案
- 2024年农民职业农业素质技能考试题库(附含答案)
- 高考对联题(对联知识、高考真题及答案、对应练习题)
- 新版《铁道概论》考试复习试题库(含答案)
- 【律师承办案件费用清单】(计时收费)模板
- 高中物理竞赛真题分类汇编 4 光学 (学生版+解析版50题)
- Unit1FestivalsandCelebrations词汇清单高中英语人教版
- 2024年上海市中考语文试题卷(含答案)
评论
0/150
提交评论