ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:791.52KB ,
资源ID:8500429      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8500429.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的万年历.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的万年历.docx

1、基于51单片机的万年历微机与单片机技术实践课程设计报告一、课程设计教学目的及基本要求 1了解并掌握单片机的原理、结构、指令、运行模式、功能模块及应用开发方法。 2提高综合运用所学的理论知识独立分析和解决问题的能力。 3掌握汇编语言的设计和调试。 4. 掌握 C 语言的设计和调试。 二、课程设计内容及安排 1掌握各种进制数的特点及其转换方法。 2掌握PIC/51 单片机的硬件结构的特点,详细了解 PIC/51 单片机的各种资源。 3了解单片机的指令系统、指令格式及其意义。 4理解中断的基本概念,了解单片机的中断响应。 5掌握存储器的分类,熟练掌握存储器的扩展。 6了解单片机的接口技术及其串行通讯

2、方式。 7编写课程设计报告,掌握汇编语言的设计和调试方法。 三、课程设计要求题目2 LCD 显示的电子钟 设计任务: 以 PIC16F877/89C51 单片机控制的时钟, 在 LCD显示器上显示当前的时间。 设计要求: 1、 使用文字型 LCD显示器显示当前时间。 2、 显示格式为“时时:分分:秒秒” 。 3、 用3 个功能键操作来设置当前时间。功能键 K1K34功能如下。 (1)K1进入设置现在的时间。 (2)K2设置小时。 (3)K3设置分钟。 (4)K4确认完成设置。 4、 程序执行后工作指示灯 LED 闪动,表示程序开始执行,LCD 显示“00:00:00” ,然后开始计时。 扩充功

3、能: 1、 增加闹铃功能,时间到则产生音乐声。 2、 增加闹铃功能,时间到则启动继电器控制家电。 3、 增加万年历显示“年月日” 。 4、 结合温度传感器显示当前的温度。 5、 结合湿度传感器显示当前的湿度。 一、设计简介电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、星期、时、分、秒,还具有时间校准等功能。该电路采用AT89C52单片机作为核心,功耗小,能在3V的低压工作,电压可选用35V电压供电。本设计是基于51系列的单片机进行的电子万年历设计,

4、可以显示年月日时分秒及星期信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在同学和网络的帮助下才完成了程序的编写。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD1602显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合

5、,显示器使用1片LCD1602。软件方面主要包括日历程序、时间调整程序,显示程序等。本设计直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。程序采用C语言编写,所有程序编写完成后,在Keil uVision3软件中进行调试,确定没有问题后,用STC_ISP_V4.80下载到单片机内进行检验。最后在老师同学网络的帮助以及自己的努力下完成了此次电子万年历的设计。二、系统的硬件设计与实现洞洞板/万能板成品图片左下角有地址-有录像2.1电路设计框图 2.2 系统硬件概述本电路是由AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;本设计直接采用

6、单片机定时计数器提供秒信号,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。显示部份由LCD1602完成。2.3 主要单元电路的设计2.3.1单片机主控制模块的设计 AT89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,X1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,X2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚

7、为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如下图所示2.3.2键盘电路模块的设计 键盘模块由四个独立键盘组成,每个按键的一钟脚接地,另一种脚接一个单片机I/O口。如下图所示。2.3.3 显示模块的设计 显示模块通过一块16脚的LCD1602组成。其中1、3脚接地,4、5、6分别接一个I/O口用于控制液晶的显示,7-14接P2的8个I/O口用于数据传输。15、16脚用于控制液晶的背光,可不接。如下图所示。液晶1602的简介及驱动原理1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳

8、工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产

9、生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。10823 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表10-14所示

10、:序号指令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读出的数据内容表10-14:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电

11、平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高

12、电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表10-15:基本操作

13、时序表读写操作时序如图10-55和10-56所示:图10-55 读操作时序图10-56 写操作时序10824 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。10825 1602LCD的一般初始化(复位)过程延时15mS 写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式

14、设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置三、系统的软件设计3.1 程序流程框图 否 否 否 是 是 是否 否 否 是 是 是四、总结 在整个设计过程中,遇到了很多问题,但在自己的努力和同学的帮助下得到了解决,较好的完成了作品,勉强达到了预期的目的。并且在这一过程中也学到了许多之前没学过的知识。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,对电路的设计、布局要先有一个好的构思,然后再焊才可以使电路板美观并且可以减少飞线的使用,并且最好焊接一部分测试一部分。通过这次设计,特别是通过程序的编写,更深入地了解了

15、单片机的内部结构和外围器件的应用。 参考文献:1.郭天祥十天叫你学会单片机2.C51入门教程3.8051系列单片机C语言编程完全手册附录一:系统电路图附录二:系统程序清单#include#include sbit LCD_RS = P15; sbit LCD_RW = P14;sbit LCD_EN = P13;sbit s1=P23;sbit s2=P22;sbit s3=P20;unsigned char tt,s1num;char miao,fen,shi,yue=1,ri=1,week,nian;unsigned char a= 2000-01-01 MON;char b= 00:00

16、:00;void delay(int ms) int i; while(ms-) for(i = 0; i0;x-) for( y=110;y0;y-);bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P3 & 0x80); LCD_EN = 0; return result; void write_com(unsigned char com) while(lcd_busy(); LCD_RS = 0; LCD_RW

17、 = 0; LCD_EN = 0; _nop_(); _nop_(); P3 = com; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; void write_date (unsigned char date) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P3 = date; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_();

18、 _nop_(); _nop_(); _nop_(); LCD_EN = 0; void write_sfm(unsigned char add,unsigned char date) unsigned char shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); void write_nyr(unsigned char add,unsigned char date) unsigned char gw,sw; gw=date%10; sw=da

19、te/10; write_com(0x80+add); write_date(0x30+sw); write_date(0x30+gw);void write_week(unsigned week) write_com(0x80+0x0d); switch(week) case 0:write_date(M); write_date(O); write_date(N); break; case 1:write_date(T); write_date(U); write_date(E); break; case 2:write_date(W); write_date(E); write_date

20、(D); break; case 3:write_date(T); write_date(H); write_date(U); break; case 4:write_date(F); write_date(R); write_date(I); break; case 5:write_date(S); write_date(A); write_date(T); break; case 6:write_date(S); write_date(U); write_date(N); break; void init() unsigned int i; write_com(0x38); delay(5

21、); write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); write_com(0x80); for( i=0;i16 ;i+) write_date( ai); delay1(5); write_com(0x80+0x40); for(i=0;i12) yue=1; write_nyr(7,yue); write_com(0x80+7); if(s1num=1) nian+; if(nian99) nian=0; write_nyr(4,nian); write_com(0x80+4); if(s3=0) delay(5); if(s3=0) while(!s3); if(s1num=7) miao-; if(miao=-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); if(s1num=6) fen-; if(fen=-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); if(s1num=5)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1