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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(单片机 电子时钟(LCD显示).doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

单片机 电子时钟(LCD显示).doc

1、 单片机综合实验报告题 目: 电子时钟(LCD)显示 班 级: 0310405 班 学 号: 031040514 学生姓名: 张 金 龙 指导老师: 高 林 2013 年 6 月 17 日一、 实验内容:以 AT89C51 单 片 机 为 核 心 的 时 钟 , 在 LCD 显 示 器 上 显 示 当 前 的 时 间 : 使 用 字 符 型 LCD 显 示 器 显 示 当 前 时 间 。 显 示 格 式 为 “时 时 : 分 分 : 秒 秒 ”。 用 4 个 功 能 键 操 作 来 设 置 当 前 时 间 , 4 个 功 能 键 接 在 P1.0 P1.3 引 脚 上 。功 能 键 K1 K4

2、 功 能 如 下 。 K1进 入 设 置 现 在 的 时 间 。 K2设 置 小 时 。 K3设 置 分 钟 。 K4确 认 完 成 设 置 。程 序 执 行 后 工 作 指 示 灯 LED闪 动 , 表 示 程 序 开 始 执 行 , LCD显 示“00: 00: 00”, 然 后 开 始 计 时 。二、实验电路及功能说明1) 单片机主控制模块以 AT89C51 单片机为核心进行一系列控制。2) 时钟显示模块用 1602 为 LCD 显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。测试成功后即可为实验所用,如图:3) 时间调整电路用 4 个功能键操作来

3、设置当前时间,4 个功能键接在 P1.0P1.3 引脚上。 功能键 K1K4 功能如下。K1进入设置现在的时间。 K2设置小时。K3设置分钟。K4确认完成设置。如图:三、实验程序流程图:主程序:时 钟 主 程 序 流 程子程序:保护现场设置计数初值 设 置 T0为 方 式 1 设 中 断 次 数 为 2清 计 时 单 元开 中 断 启 动调 用 显 示 子 程 序按 键 程 序 调 用 按 键 显 示 子 程 序时 钟 主 程 序 流 程 1S 到?(40H)=10 ?0 (40H )(40H)+1 (40H)(41H)+1 (41H)(46H)=4?0 (46H)(0 ) (47H )恢复现

4、场返回NN中 断 服 务 流 程 图(41H)=5?0 (41H )(43H)=10 ?0 (43H )(43H)+1 (43H)(44H)+1 (44H)(44H)=5?0 (44H )(46H)+1 (46H)(47H)=2?(46H)+1 (46H )NN(46H)=10?0 (46H)(47 )+1 (47 )NN四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。6MHZ 为和现实时间显示相同。实验采用 12MHZ 晶振采用方式 1 定时,选取 50ms 采用 20 次中断达到一秒,采用查表方式控制 LCD 显示。当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这

5、里为了更明显观察显示数据变化把起始值设为 23: 59: 50 运行后显示 ,K1 为进入现在设置时间,当按下 K1 后显示 , 和实验要求相比较,实现了按下 K1 进入现在时间设置,按下 K4 确认完成时间设置的功能;不同之处: 当进入时间设置时在按下 K1 设置小时,再次按下 K1 是设置分钟。增加功能:进入时间设置并选择设置位置后 K2 键位数字增加功能, K3 键为数字减小功能。根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。五、心得体会每次做单片机实验都会有不同的等收获,而这次的实验让我感觉收获更大。这次的实验让我巩固了以往所学,而且锻炼了自己发现问题解决问题的能力。

6、在编程过程,发现自己对 C 语言很生疏,很多技巧和函数运用都不会,通过参考资料和询问同学终于让我完成了程序,并实现了程序的功能。这不仅提高了自己动手能力,也培养了自己的思考能力。这次在编程过程中学到了很多新东西,特别是 LCD 的显示,在设定的显示字符后,正确编译后显示各种设定值,LCD显示 16 位字符,在最初编程时编译正确但是 LCD 上的显示字符有缺失,显示不完整,经过不断调试发现空格同样占据字符,只有所有字符不超过 16 位且位置正确时才能完整正确显示。时间的显示需要每一个显示的位子有定义,而且要给“:”留下特定位子。同时编程时发现还可以显示其他如日期。但本实验不需要且很难完成最终没实

7、现。在仿真过程中发现许多模型不知道名称,最后搜索了一份 Proteus 元件库,里边有很多元件模型的名称。最后搭建成功了仿真模型,并且运行成功。在这里要感谢老师在以往实验过程中不厌其烦的帮助自己解决所遇到的问题和传授一些知识和小窍门。让我对单片机有机会加深了解,体会到了单片机的强大,学到了很多,感谢。六、程序清单#include #include #define uchar unsigned char#define uint unsigned int #define DelayNOP() _nop_();_nop_();_nop_();_nop_();sbit K1 =P10; /选择调整小时

8、,分钟sbit K2 =P11; /增加sbit K3 =P12; /减小sbit K4 =P13;sbit SPK=P30; sbit RS =P20;sbit RW =P21;sbit E =P22; uchar code Str1 =“ Current Time “; /一下两个字符串的串长均为 16 uchar code Str2 =“ Set New Time“; uchar HMS_String=“ 00:00:00 “;/带显示的时间串bit Settime=0; /是否修改时间bit Change_H_or_M =1;/1 表示修改时.0 表示修改分uchar MilliSec

9、ond,Hour =23,Minute=59, Second =50; /延时函数 void DelayMS(uint x) uchar i; while(x-) for(i=0;i;/显示修改标志else HMS_String3 = ; /不显示修改标志HMS_String4 = h/10 + 0; /时十位 HMS_String5 = h/10 + 0; HMS_String5 = h%10 + 0; /时个位 HMS_String5 = h%10 + 0; HMS_String7 = m/10 + 0; /分 HMS_String8 = m/10 + 0;HMS_String8 = m%

10、10 + 0; /分 HMS_String8 = m%10 + 0;HMS_String10= s/10 + 0; /秒 HMS_String11= s/10 + 0; HMS_String11= s%10 + 0; /秒 HMS_String11= s%10 + 0;Display_String(HMS_String,0x40); /设置时间 void Change_Time() Settime=0; if(K1=0) /按下 k1 键即进入修改状态 TR0 = 0; Display_String(Str2,0x00); /第一行提示修改时间Settime = 1; while (Setti

11、me) if(K1 = 0) /确定调整小时还是分钟 while(K1 = 0) Change_H_or_M = !Change_H_or_M; else if(K2 = 0) /增加 while(K2 = 0); if(Change_H_or_M=1) if(+Hour = 24) Hour = 0; else if(+Minute = 60) Minute = 0; else if(K3 = 0) /减少 while(K3 = 0); if(Change_H_or_M = 1) if(-Hour = 0xff) Hour = 23;else if(-Minute = 0xff) Minut

12、e = 59; else if(K4 = 0) /确定 while(K4 = 0); Display_String(Str1,0x00); /第一行还原显示 str1 Settime = 0; TR0 = 1; Display_HMS(Hour,Minute,Second); /外层 While 在这里结束 /定时器 0 中断 void Time0() interrupt 1 TH0 = (65536 -50000)/256; TL0 = (65536 -50000)%256; /重新装入 50MS 定时if(+MilliSecond = 20) /50*20=1s MilliSecond =

13、 0;if(+Second = 60) Second = 0; if(+Minute = 60) Minute = 0; if(+Hour = 24) Hour = 0;Minute = 0;Second = 0; /主函数 void main() TMOD = 0x01; TH0 = (65536-50000)/256; TL0 = (65536-50000)%256;IE = 0x82;SPK = 0; LCD_Initialize(); Display_String(Str1,0x00); /第一行显示TR0 = 1;P1 = 0xFF; while(1) Display_HMS(Hour,Minute,Second); /第二行显示时分秒DelayMS(500); Change_Time(); /显示过程中允许修改时间

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报