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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机电子时钟设计报告.docx

1、单片机电子时钟设计报告电子时钟实验报告全部代码在文档末尾: 51 单片机, LCD1602 液晶显示屏平台下编程实现,可直接编 译运行 目录:实验目的,实验要求 三,实验基本原理 四,实验设计分析 五,实验要求实现A.电路设计 .1. 整体设计2. 分块设计输入部分 输出部分 晶振与复位电路B.程序设计 .程序主要模块五.实验总结及感想实验目的20 世纪末, 电子技术获得了飞速的发展, 在其推动下, 现代电子产品几乎渗透 了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同 时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。现代生活的人们越来越重视起了时间观念

2、,可以说是时间和金钱划上了等号。麻烦,所以电子钟是以其小巧,价格低廉,走时精度高,使用方便,功能多,便于 集成化而受广大消费的喜爱,得到了广泛的使用。1.学习8051定时器时间计时处理、按键扫描及 LCD液晶显示的设计方法。2.设计任务及要求 利用实验平台上LCD1602液晶显示屏,设计带有闹铃功能 的数字时钟 二,实验要求A. 基本要求:1.在LCD1602液晶显示屏上显示当前日期,时间。2. 利用按键可对时间及闹玲进行设置, 并可显示设置闹玲的时间。 闹玲时间到蜂鸣器发出声响,一分钟后闹铃停止。B. 扩展部分:1. 日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并 调

3、整)实现年月日时分秒的调整,星期准确的随着日期改变而改变进行显示。2. 定时功能(设定一段时间长度,定时到后,闹铃提示)C.可扩展部分: 1. 闹铃重响功能(闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响 时间的间隔可调)2可进行备忘录提示,按照年月日,可在设定的某年某月进行闹铃提示。三,实验基本原理利用单片机定时器完成计时功能,定时器 0 计时中断程序每隔中断一次并当作 一个计数,设定定时 1 秒的中断计数初值为 20,每中断一次中断计数初值加 1,当减到20时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是 否 1h 到了 , 是否一天到了,是否一个月到了,是

4、否一年到了。将时间在LCD液晶屏上显示,降低了程序的编写难度。 LCD的固定显示特性是我们省去了数码管的动态扫描显示。四,实验设计分析针对要实现的功能,采用AT89S5单片机进行设计,AT89S52单片机是一款低功MCS-51 指令耗,高性能CMOS位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash 只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准 系统及80C51引脚结构。这样,既能做到经济合理又能实现预期的功能。在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解, 又能便于添加各项功能。程序可分为闹钟的声音程序、时间显示程序、日期显

5、示程 序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的 错误。首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、 存储单元的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第 二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。 第三部分是软件部分:先学习理解C语言的编程 方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。第四部分是 软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。第五部分是

6、软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查 软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬件实现部分:连接电 路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。最后进行功 能扩展,在已经正确的设计基础上,添加额外的功能! 五,实验要求实现A. 电路设计1.整体设计此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块: 显示电路用lcd1602显示,年份,月份,星期,小时、分钟和秒(日) ,使电路更加 简单。单片机采用AT89S5係列,这种单片机应用简单,适合电子钟设计。电路的总体设计框架如下:分样例:P0口。对于P0口,由在本实验

7、中主要用用P3 口输入按键信号,还用到了特殊的 于其存在高阻状态,为了实现幵关功能,给其添加上拉电阻,具体如下图所示:输出部分 本电路的输出信号LCD勺写入命令和写入数据,闹铃脉冲信号。闹铃由端输出,模块如下: 日期时间由LCD1602俞出,模块如下:晶振与复位电路本实验单片机时钟用内部时钟,模块如下:复位电路为手动复位构成,模块如下:B. 程序设计程序总体设计 本实验用汇编程序完成 .程序总的流程图如下:程序主要模块 中断服务程序:/*一秒定时中断函数 */void timer0() interrupt 1 using 1ET0=0;验总结及感想分耕耘,一分收获。只有亲自用实践来验证这句话,

8、在能得其要领。经过这次单片机课程设计,我从一个单片机实践的门外汉,已经越升为略知一二的新手。虽然还有很多有关单片机的应用有待学习,但万变不离其宗,只要深入了解单片的 原理,全部知识点,各个细节,一切设计皆有可能。在实验的开始几天,基本上没有收获,不知何从下手,不知所措。为了看得更远,不妨站在前人的肩膀上,我在整体思路模糊的情况下,在网上大量招资粮,各 种与电子时钟相关的文章,我阅读了不少。随着涉猎的点滴积累,我对电子时钟的 设计方案已经慢慢酝酿而成。有了方向和不少知识储备后,在接下来的几天,几乎 每天都有突破, 虽然有时只是一句程序的修改或诞生, 但那种收获的感觉很暖人心。实验中遇到了不少问题

9、,接下来总结一下,共同探讨。1, PO 口幵关问题。PO口比较特殊,它存在高阻态,要使其输入不是高电平就是低电平,就要接上拉电阻,给其高电平输入。的过程就是一个解决问题的过程,每天都解决一些问题,我的实验也就解决了,当 然结果不重要,功利化的追求结果,会使人浮躁,还是享受那份疑难迎刃而解的快 感吧! 全部完整代码: 此代码未经本人优化,可以根据自己的需求优化代码。盗版不究,可直接引用。/*/基于STC89S52单片机以及液晶1602显示的万年历项目/*/#include#include #define uchar unsigned char #define uint unsigned int/

10、*液晶 1602 相关参数 */#define data_port P0/ 液晶屏指令、数据通信接口指令寄存器, rs=1 时选择数据寄存器)入, rw=1 时选择读出)sbit e n=P 1八2;/液晶屏使能接口 (en=0 时通信接口中断, en=1 时通信接口接通)液晶屏第一行要显示的字符串液晶屏第二行要显示的字符串uchar code line1_str= Welcome! ;/ uchar code line2_str= made by: MCU ;/*按键设置的相关参数 */ 蜂鸣器sbit timer二卩1八5;sbit sou nd二卩3八4;/ 进入闹铃设置状态键uchar

11、 sflag=0,ssflag=0;/ 闹铃设置标志位;闹铃工作标志位sbit set_key二卩3八7;/进入设置sbit up_key=卩3八6;/加号键sbit can cle_key=P 3八5;/完成设置键uchar set=0;/ 是否进行了设置uchar flag=0;/ 设置选择标志uchar year=0x00;/ 年 寄存器uchar month=0x01;/ 月 寄存器uchar day=0x01;/ 日 寄存器uchar week=0x06;/ 星期 寄存器uchar hour;/ 时 寄存器uchar minite;/ 分 寄存器uchar second;/ 秒 寄存

12、器uchar jiamiao=0;/加秒参数uchar fen1,fen2;/数据交换)分定时寄存器uchar shi1,shi2;/数据交换)时定时寄存器依次存储 : 年, 月,uchar dis_val7=0x00,0x01,0x01,0x06,0x00,0x00,0x00;/日,星期,时,分,秒/*子函数部分*/void lcd_int();/初始化 1602 液晶void welcome();/欢迎界面/ 向液晶屏输入命令void in_command(uchar com);void in_data(uchar dat);/向液晶屏输入数据void delay(uint ms);/延时

13、函数void key();/按键设置函数uchar calculate_week();/ 星期计算函数void week_disp(uchar x);/LCD1602 显示星期值子函数声明void lcd_disp_string(uchar str);/ 液晶屏显示一串字符子函数声明void brush_lcd();/刷新液晶屏显示内容子函数声明void run();/万年历正常运行函数/*/void main()TMOD=0x01;/OOOO 0001 使用定时器 TO的模式1 (16位模式)THO=(65536-5OOOO)/256; / 设定每次中断间隔 5OmsTLO=(65536-5

14、OOOO)%256;jiamiao=1;lcd_int();welcome();delay(1OOO);while(1)key();if(jiamiao=2O)/ 刷新 秒second+;dis_val6=(second/10)4)|(second%10);jiamiao=0;run();if(flag=0)if(dis_val0=0x00&dis_val1=0x01&dis_val2=0x01)/2000 年 1月 1日为星期六dis_val3=0x06;brush_lcd();/ 刷新液晶屏显示内容if(hour=shi2 & minite=fen2 &ssflag=1)timer=0;e

15、lsetimer=1;/* 延时子函数 */void delay(uint ms)uchar i;while(ms-)for(i=0;i=1)days_number=days_number+(year*365); / 从 00 年到 year-1 年的总天数elsedays_number=0;for(i=1;imonth;i+)switch(i)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days_number+=31;/ 大月 31 天break;case 4:case 6:case 9:case 11:days_number+=30

16、;/ 小月 30 天case 2: if(year%4=0) / 闰年 2 月 29 天days_number+=29;else/ 平年 2 月 28 天days_number+=28;break;return(7);elsereturn(days_number+5)%7);/*LCD1602 显示星期值子函数 */ void week_disp(uchar x)switch(x)case 1: lcd_disp_string(MON);/显示星期一 / 显示星期二 break;case 2: lcd_disp_string(TUE);break;break;/ 显示星期五 break;cas

17、e 5: lcd_disp_string(FRI);break;/ 显示星期日 break;case 7: lcd_disp_string(SUN);/*按键设置函数 */void key()if(set_key=0)/ 检测 设置 键是否按下delay(5);/ 延时消抖if(set_key=0)ET0=0;/ 打开定时器 T0 中断允许位TR0=0;/ 启动定时器 T0if(flag6)flag+;else时分秒flag=0;switch(flag)case 0:if(set=1)set=0;/ 检测时间是否更改/ 时间更改标志复位dis_val0=(year/10)4)|(year%10

18、);dis_val1=(month/10)4)|(month%10); /dis_val2=(day/10)4)|(day%10);dis_val3=week;/ 刷新 年刷新月/ 刷新 日刷新星期dis_val4=(hour/10)4)|(hour%10);dis_val5=(minite/10)4)|(minite%10);dis_val6=(second/10)4)*10)+(dis_val0&0x0f);/预设调节变量初始值为当前时刻month=(dis_val14)*10)+(dis_val1&0x0f);day=(dis_val24)*10)+(dis_val2&0x0f);hou

19、r=(dis_val44)*10)+(dis_val4&0x0f);minite=(dis_val54)*10)+(dis_val5&0x0f);second=(dis_val64)*10)+(dis_val6&0x0f);break;位闪烁case 2: in_command(0x86);/ 设定显示 ( 光标 ) 位置 月低break;case 3: in_command(0x89);/ 设定显示 ( 光标 ) 位置 日低位闪烁break;case 4: in_command(0xc5);/ 设定显示 ( 光标 ) 位置 时 低位闪烁break;case 5: in_command(0xc

20、8);/ 设定显示 (光标) 位置 分低位闪烁break;case 6: in_command(0xcb); /设定显示 ( 光标 ) 位置 秒 低位闪烁break;while(set_key=0);if(up_key=0 & flag!=0)/ 检测 设置时间 启动时 , 上升 键是否按下delay(5);/ 延时消抖if(up_key=0)switch(flag)case 1: if(sflag=1)break; if(year28) 日 高位位闪烁day=28;in_command(0x88);/ 设定显示 ( 光标 ) 位置in_data(num_tabday/10); / 修正 日i

21、n_data(num_tabday%10);week=calculate_week();in_command(0x8c);week_disp(week);in_command(0x82);in_data(num_tabyear/10);/ 计算星期值/ 设定显示 ( 光标)位置 星期/LCD1602 显示星期值/in_data(num_tabyear%10);in_command(0x83);/break;设定显示 (光标) 位置 年高/ 显示正在调节的 年设定显示 (光标) 位置 年低高位日case 2: if(sflag=1)break; if(month30)day=30;in_comm

22、and(0x88);/ 设定显示 ( 光标 ) 位置 in_data(num_tabday/10); / 修正 日in_data(num_tabday%10);if(month=2) 日 高位in_data(num_tabday/10); / 修正 日in_data(num_tabday%10);if(day28)day=28;in_command(0x88); / 设 定 显 示 ( 光 标 ) 位 置 日 高位if(day29)day=29;in_command(0x88); / 设 定 显 示 ( 光 标 ) 位 置in_data(num_tabday%10);week=calculate_week();/ 计算星期值/ 显示正在调节的 月in_data(num_tabmonth/10);in_data(num_tabmonth%10);闪烁break;case 3: if(sflag=1)break; if(month=4 | month=6 | month=9 | month=11)if(day30) day+; else day=1;else if(month=2)if(year%4!=0)/ 平年if(day

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

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