单片机电子时钟(LCD显示)综合实验报告_第1页
单片机电子时钟(LCD显示)综合实验报告_第2页
单片机电子时钟(LCD显示)综合实验报告_第3页
单片机电子时钟(LCD显示)综合实验报告_第4页
单片机电子时钟(LCD显示)综合实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机综合实验报告题 目:电子时钟(LCD)显示、实验内容:以AT89C51单片机为核心的时钟,在LCD显示器上显 示当前的时间:使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。用4个功能键操作来设置当前时间,4个功能键接在 P1.0-P1.3 引脚上。功能键K1K4功能如下。 K1进入设置现在的时间。 K2设置小时。 K3设置分钟。 K4确认完成设置。程序执行后工作指示灯LED闪动,表示程序开始执 行,LCD显示“00:00:00”,然后开始计时。二、实验电路及功能说明1) 单片机主控制模块以AT89C51单片机为核心进行一系列控制。2) 时钟显示模块Word资料用160

2、2为LCD显示模块,把对应的引脚和最小系统 上的引脚相连,连接后用初始化程序对其进行简单的功能测试。测试成功后即可为实验所用,如图:I Current TLne I fl-00!00:01 H 侶念22 5222227CQLU寸D5QDL5aOP03二CM23)时间调整电路用4个功能键操作来设置当前时间,4个功能键接在P1.0P1.3引脚上。功能键KI K4功能如下。K1进入设置现在的时间。K2设置小时。K3设置三、实验程序流程图:主程序:Word资料子程序:Word资料时钟主程序流程中断服务流程图四、实验结果分析Word资料实验结果及分析:单片机的晶振可以根据要求设定。 6MHZ为和现实时间

3、显不相同。实验采用12MHZ晶振采用 方式1定时,选取50ms采用20次中断达到一秒,采用查表 方式控制LCD显示。当烧入程序后开始运行,根据初始值设 定可以观察到显示的时间,这里为了更明显观察显示数据变 华把起始值设为23.59 : 50运行后显示Current Tine23:59:50 , K1为进入现在设置时间,当按下Set New TineK1后显示L 00: 00:10 J ,和实验要求相比较, 实现了按下KI进入现在时间设置,按下K4确认完成时间设 置的功能;不同之处:当进入时间设置时在按下K1设置小 时,再次按下K1是设置分钟。增加功能:进入时间设置并 选择设置位置后K2键位数字

4、增加功能,K3键为数字减小功Word资料 能。根据仿真结果能够确定编程正确,基本实现了所有功能, 而且有所改进。五、心得体会每次做单片机实验都会有不同的等收获,而这次的 实验让我感觉收获更大。这次的实验让我巩固了以往所 学,而且锻炼了自己发现问题解决问题的能力。在编程 过程,发现自己对C语言很生疏,很多技巧和函数运 用都不会,通过参考资料和询问同学终于让我完成了程 序,并实现了程序的功能。这不仅提高了自己动手能力, 也培养了自己的思考能力。这次在编程过程中学到了很多新东西,特别是LCD 的显示,在设定的显示字符后,正确编译后显示各种设 定值,LCD显示16位字符,在最初编程时编译正确但 是LC

5、D上的显示字符有缺失,显示不完整,经过不断 调试发现空格同样占据字符,只有所有字符不超过16 位且位置正确时才能完整正确显示。时间的显示需要每 个显示的位子有定义,而且要给“:”留下特定位子。 同时编程时发现还可以显示其他如曰期。但本实验不需 要且很难完成最终没实现。在仿真过程中发现许多模型不知道名称,最后搜索Word资料 了一份Proteus元件库,里边有很多元件模型的名称。 最后搭建成功了仿真模型,并且运行成功。在这里要感谢老师在以往实验过程中不厌其烦的 帮助自己解决所遇到的问题和传授一些知识和小窍门。 让我对单片机有机会加深了解,体会到了单片机的强 大,学到了很多,感谢。六、程序清单#i

6、nclude #include #define uchar unsigned char#define uint unsigned int#define DelayNOP() _nop_();_nop_();_nop_();_nop_();sbit KI =P1AO;选择调整小时,分钟sbit K2=P1A1;/增加sbit K3 二P”2;减小sbit K4 =P1A3;sbit SPK=P3A0;sbit RS=P2A0;sbit RW =P2A1;sbit E =P2A2;uchar code StrlQ =n Current Time ; /下两个字符串的Word资料串长均为16ucha

7、r code Str2 = Set New Time;uchar HMS_Stringn=n 00:00:00”;带显示的时间串bit Settime=0;是否修改时间bit Change_H_or_M =1;/1表示修改时.0表示修改分uchar Millisecond,Hour 二23,Minute二59, Second =50; /延 时函数void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/LCD忙状态检测bit LCD_Busy_Check()bit result;RS 二 0;RW 二 1;E 二 l;DelayNOP();

8、result 二(bit)(PO & 0x80);E=0;return result; 写LCD命令void LCD_Write_Command(uchar cmd)Word资料 while(LCD_Busy_Check();/判断 LCD 是否忙碌RS = O;RW = 0;E = 0;_nop_();_nop_();P0 二 cmd; DelayNOP();E 二 l;DelayNOP();E 二 0; 设置 LCD 显示位置void LCD_Set_Pos(uchar pos)LCD_Write_Command(pos | 0x80);写LCD数据void LCD_Write_Data(

9、uchar dat)while(LCD_Busy_Check();/判断 LCD 是否忙碌RS = 1;RW = 0;E = 0; P0 = dat; DelayNOP(); E = l;DelayNOP();E = 0;/LCD初始化void LCD_lnitialize()LCD_Write_Command(0x38);DelayMS(l);LCD_Write_Command(0x0c);DelayMS(l);LCD_Write_Command(0x06);DelayMS(l);LCD_Write_Command(0x01);DelayMS(l);Word资料/显示函数,在LCD指定的行上

10、显示字符串void Display_String(uchar*str,uchar LineNo)uchar k;LCD_Set_Pos(LineNo);for(k=0;k:/显示修改标志else HMS_String二不显示修改标志HMS_String4二 h/10 + *0:/时十位 HMS_String5=h/10 + O;HMS_String5二 h%10 + O;/时个位 HMS_String5二h%10 + 0:HMS_String7二 m/10 + O; 分 HMS_String8二 m/10 + O;HMS_String8 = m%10 + O; 分 HMS_String8二 m

11、%10 十0*;Word资料HMS_String10= s/10 十 O; 秒 HMS_Stringll二 s/10 + O;HMS_Stringll= s%10 十0*; 秒 HMS_Stringll二 s%10+ O;Disp lay_Stri ng(H MS_Stri ng,0x40);设置时间void Change_Time()Settime=0;if(Kl二二0)按下kl键即进入修改状态TRO 二 0;Disp lay_String(Str2,0x00);第一行提示修改时间Settime = 1;while (Settime)if(Kl二二0)确定调整小时还是分钟Word资料whil

12、e(Kl 二二 0)Change H or M = IChange H or M;else if(K2 二二 0)增加while(K2 二二 0);if(Change_H_or_M=l)if(十十Hour = 24) Hour 二 0;elseif(十十Minute 二二 60) Minute = 0;else if(K3 二二 0)减少while(K3 二二 0);if(Change_H_or_M = 1)if(-Hou二二 Oxff) Hour 二 23;elseif(-Minute 二二 Oxff) Minute = 59;Word资料else if(K4 二二 0)确定while(K4

13、 二二 0);Display_String(Strl,0x00);第一行还原显示 strlSettime = 0;TRO 二 1;Display_HMS(Hour,Minute,Second);定时器0中断void Time0() interrupt 1THO 二(65536 -50000)/256;TLO 二(65536 -50000)96256; 时if(十十Millisecond 二二 20)Millisecond 二 0;if(十十 Second = 60)外层While在这里结束重新装入50MS定/50*20=lsWord资料Second = 0;Minute = 60)Minute 二 0;if(十十Hour 二二 24)Hour = 0;Minute 二 0;Second 二 0;主函数void main()TMOD 二 0x01;TH0 二(65536-50000)/

温馨提示

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

评论

0/150

提交评论