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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于单片机的lcd1602电子时钟设计.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于单片机的lcd1602电子时钟设计.docx

1、基于单片机的LCD1602电子时钟设计 一、 设计任务和目的 1.1、设计任务 (1):用单片机设计基于LCD1602的电子时钟,显示时间和日期; (2):误差精度控制在1s/天; (3):具有时间和日期的校准功能; (4):能区分某年是闰年或平年,并对应显示2月份的天数; (5):根据月份的不同显示不同的最大日数; (6):搭建仿真电路图,模拟单片机要实现的功能; (7):焊接单片机开发板; (8):编写程序,下载并调试,实现要求的功能。 1.2、设计目的 (1):熟练掌握KEI

2、L软件的使用方法; (2):熟练掌握PROTEUS软件的使用方法; (3):掌握单片机I/O接口的工作原理; (4):掌握LCD显示器的工作原理及编程方法; (5):掌握独立式键盘的工作原理及编程使用方法; (6):掌握单片机的下载使用方法。 二、 设计思路和方案论证 2.1、设计思路 电路总体上分为控制和显示部分。以单片机最小系统作为核心控制电路,控制LCD显示,具体显示内容及方式由软件来完成;由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、

3、减1键三个按键完成,共需四个按键;计时功能由固定频率的晶振完成(采用11.0592MHz);显示部分主要采用LCD1602作为显示。 2.2、方案论证 (1):时钟芯片的选择和论证 方案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V范围内,功耗也较低,但价格比较贵。 方案二:直接采用单片机定时计数器提供秒信号,使用程序实现秒、分、时、日、月、年计数。采用此方案实现虽然有一定的时间误差,但可减少芯片的使用,节约成本,易于实现,符合现实选用,

4、所以采用此种作为时钟信号发生器。 (2):显示模块选择方案和论证: 方案一:采用点阵式图形LCD12864液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用点阵式图形LCD12864液晶显示屏。 方案二:采用点阵式字符型LCD1602液晶显示屏,LCD1602是专门用于显示字母、数字、符号等的点阵型液晶显示模块,分4位和8位数据传输方式。提供“5×7点阵+光标”和“5×10点阵+光标”的显示模式。价格现对便宜,所以用此种作为显示。 三、 系统的硬件设计与实现 3.1 电路设计框图 AT89C

5、51 主 控 制 模 块 LCD显示模块 复位电路 键盘控制电路 时钟振荡电路 图1:整体设计方框图 3.2 单片机最小系统的设计 以AT89C51为核心组成的单片机的最小系统,主要包括时钟振荡电路,复位电路等。正5V电源直接接到89C51的40脚(VCC),20脚(GND)接地。时钟振荡电路的18脚(XT

6、AL1)和19脚(XTAL2)外接11.0592MHZ的晶振和二个30PF的电容,振荡频率就是晶振的固有频率,经过一定的电路连接实现计时的功能。复位电路采用上电自动复位和手动复位相结合的方式接到89C51的9端(RST)。单片机最小系统原理图如图2所示: 图2:单片机最小系统原理图 3.3 显示电路设计 采用LCD1602液晶显示,LCD1602的D0~D7与单片机的P0口相连,P0口作为I/O口输出时必须外接10KΩ的上拉电阻。分别用P1.0、P1.1、P1.2作为LCD1602的RS、RW、E控制线。显示电路如图3所示:

7、 图3:液晶显示电路 3.4 时间调整电路 该电路设计有三个轻触式按键,分别命名为:模式设定键S1、加调整键S2、减调整键S3。由P2.0口外接S1,P2.1外接S2,P2.2外接S3,P2.3作为公共端。 按一下S1,调整光标开始出现在秒位,再按一下S1光标移动到分,按一下光标移动一个校准位直到年位。S2实现调整加1功能,S3实现调整减1功能。时间调整电路如图4所示: 图4:键盘电路 3.5 复位电路及晶振电路 该电路采用按键复位,有一个22uF的电容、一个按键S4、一个10K的电阻和一个220Ω的电阻构成。在产品工作期间出现错误或死机现象可

8、采用手动复位,即按下S4,此时无论电路处于何种状态,电路都会恢复到初始状态的显示。 晶振电路可以给单片机提供所需要的时钟频率,主要由晶振这个元件固定的精确的频率来实现。复位电路及晶振电路如图5所示: 图5 复位电路及晶振电路 四、 系统软件设计 软件系统分四个部分:主函数程序部分,键盘扫描部分,定时器中断部分,LCD初始化部分。各部分程序流程图如下所示: 4.1 主函数程序流程图 开始 定时器的选择、工作模式设定、给定时器赋值 开中断 启动定时器 调用LCD初始化子程序

9、 调用键盘扫描子程序 图6 主函数流程图 4.2 键盘扫描子程序流程图 开始 判断S1是 否按下 NO YES 计算S1按下次数 并执行相应指令

10、 判断S2是 否按下 判断S3是 否按下 NO NO YES YES 计算S3按下次数 并执行相应操作 计算S2按下次数 并执行相应操作 结束 图7 键盘扫描程序流程图

11、 4.3 定时器中断子程序流程图 开始 给定时器再次赋值 判断是 否计满18次 NO 秒加1,判断是否等于60 YES 返回 NO 分加1,秒置0,判断分是否等于60

12、 YES NO YES 时加1,分置0,判断时是否等于24 NO 执行年、月、日、时、 分、秒的显示 日加1,时置0,判断该年是否为闰年 YES 年加1,月置1,判断年是否为100

13、 YES NO YES 判断日是否到月底 NO NO 月加1,日置1,判断月是否等于13 YES NO

14、 YES 4.3 LCD初始化程序流程图 开始 RW和E都置零 设置点阵8位数据接口,两行显示 开显示,不显示光标 地址指针加一 画面不移动 刷新,全部清零 给地址,表示从 第一行开始写 显示第一行数据 给第二行地址 显示第二行数据 返回 图9 LCD初始化流程图 五、 设计结果分析 5.1 硬件分析 该设计

15、电路系统较大,电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多。另外,买来的元器件要先进行检测,如果有坏的器件要进行更换,还有就是要注意元器件的正确放置与安装以及布线的合理,便于成品电路的检测与维护。 为了减少复杂度,可用Proteus软件进行仿真,按照电路原理图在Proteus中选择元器件并连接,把生产的HEX文件烧入到单片机内部进行仿真,若出现错误及时更改。 在本设计中遇到了很多的问题。回想这些问题,其实只要认真思考许多都是可以避免的,以下为主要的问题: (1):在Proteus仿真中提示出错,没有仿真结果。 在Proteus中仿真中,提示出现了R1

16、R2)错误,经过仔细排查,发现有两个电阻命名,是R1,两个电阻命名是R2。修改后就没有出现错误。 (2):在Proteus仿真中,LCD不显示 在硬件设计上需要用P0口来对LCD进行指令的读写和数据的输入,由于没有在P0口接上拉电阻,LCD屏就一直不显示。最终将在查阅课本时想起P0做输出口使用时外部必须接10KΩ的上拉电阻,接上后LCD就正常显示了。 5.2 软件分析 该设计的功能虽然比较简单,但程序也较为复杂,所以在编写程序和调试时出现了许多问题。最后经过多次的模块子程序的修改,一步一步的完成,最终在KEIL调试成功,解决了软件问题。在软件的调试过程中主要遇到的问题如下:

17、 (1):烧入程序后,秒、分、时、年能正常工作,但是日、月出错 当秒等于60时显示为00,范围是0~59;当分等于60时显示00,范围是0~59;当时等于24时显示00,范围是0~23;年等于100是显示00,范围是00~99;日和月的显示都不包括0,当由于软件出错,显示时出现了,经过改写最终全能正常显示。 (2:):不能正常区分闰年和平年,每月都是31天 闰年和平年的2月份分别是29天和28天,1、3、5、7、8、10、12月份显示范围是0~31,4、6、9、11月份显示范围是0~30。刚开始不能区分,最后经过修改能区分显示。 六、 设计体会 通过这次单片机课程设计,

18、发现了自身所学知识存在许多的不足和问题,同时也学到了不少东西,提高了动手实践的能力。 在整个设计过程中,从设计方案的确定,到具体电路在Proteus中的设计,最后到总体电路的联接构建以及程序的编写烧制,特别是程序的编写,要求对LCD1602的初始化操作、指令和数据的操作都需要很熟悉。在设计过程中碰到实在不能解决的问题,就问老师或是和同学交流,把问题彻底搞清楚并加以掌握。 尽管在这次设计中遇到了许多难题,但也都一一得以解决。比如程序编写中,由于思路不清晰,开始时遇到了许多的问题,经过静下心来思考,和同学们的共同讨论,理清了思路,反而得心应手;在硬件方面虽然没有遇到什么大问题,但从中也学到

19、了许多知识。 通过此次设计,也使我知道了做任何事都要有一颗平常心,不要想着走捷径,一步一个脚印,把每一步都认认真真做好了,才能取得最后的成功,同时也锻炼了我的耐心,做什么事都要有耐心,不要遇到困难就退缩,而是要静下心来去寻找解决的办法否则很难有最后的成功。在此过程中更要注重自主学习,发挥自己的主观能动性。总之,这次课设是我的又一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我有了全方位的提高和进步。 七、proteus仿真图 图(10) 仿真主界面

20、 图(11) 调节分界面 图(12) 调节月界面 图(13) 调节年界面 八、参考文献 [1] 周国运。单片机原理及应用(C语言版)。北京:中国水利水电出版社,2009 [2] 张齐、朱宁西。单片机应用系统设计技术。北京:电子工业出版社,2009 [3] 汪道辉。单片机系统设计与实践。北京:电子工业出版社,2006 [4] 杨子文。单片机原理及应用。西安:西安电子科技大学出版社,2006 九、程序附录:

21、 #include #define uchar unsigned char #define uint unsigned int #define datasend P0 sbit lcden=P1^2; //LCD使能端 sbit lcdrs=P1^0; //LCD 数据/指令(H/L)选择端 sbit lcdrw=P1^1; uchar mytable0[]="Nan yang li gong"; uchar mytable1[]="liu hai yan DIY!!"; uchar code line0[

22、]=" 2010-12-01 "; //初始化显示 uchar code line1[]=" 00:00:00 "; uchar code month0[]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月 uchar code month1[]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年月 uchar count,hour,minute,second,year=1,month=1,date=1; uchar s1num; //s1num:定义功能键按下次数

23、变量 void delay(unsigned int z) //延时子函数 z*1ms { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(unsigned char c) //写命令子函数 { lcdrs=0; //低电平选择为 写指令 lcden=0; datasend=c; //把指令写入P0口 delay(5);

24、lcden=1; //开使能 delay(5); //读取指令 lcden=0; //关闭使能 } void write_data(unsigned char d) //写数据子函数 { lcdrs=1; //高电平选择为 写数据 datasend=d; //把数据写入P0口 delay(5); lcden=1; //开使能 delay(5);

25、 //读取数据 lcden=0; //关闭使能 } void write_hms(uchar add,uchar dat) //时分秒写函数 add:输入位置设置变量 dat:输入时分秒数据 { uchar sw,gw; //定义十位,个位变量 sw=dat/10; gw=dat%10; write_com(0x80+0x40+add); //从第二行(add)位开始写数据 write_data(0x30+sw); //写入十位 write_data(0x30+gw);

26、 //写入个位 } void write_ymd(uchar add,uchar dat) //年月日写函数 add:输入位置设置变量 dat:输入时分秒数据 { uchar sw,gw; //定义十位,个位变量 sw=dat/10; gw=dat%10; write_com(0x80+add); //从第一行(add)位开始写数据 write_data(0x30+sw); //写入十位 write_data(0x30+gw); //写入个位 } void

27、t0() interrupt 1 //定时器0中断子程序 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; } void gethms() //时分秒处理子程序 { second++; if(second==60) { second=0; minute++; if(minute==60) { minute=0; hour++; if(hour==24) { hour=0;

28、 date++; } write_hms(2,hour); //时输出显示 } write_hms(5,minute); //分输出显示 } write_hms(8,second); //秒输出显示 } void getymd() //年月日处理子程序 { if(year%4==0) { if(date==month1[month-1]+1) { date=1; month++; if(mo

29、nth==13) { month=1; year++; if(year==100) { year=1; } write_ymd(4,year); } write_ymd(7,month); } write_ymd(10,date); } else { if(date==month0[month-1]+1) { date=1; month++; if(month==13) { month=1; yea

30、r++; if(year==100) { year=1; } write_ymd(4,year); } write_ymd(7,month); } write_ymd(10,date); } } void key_process() //按键扫描子程序 { if(P2==0xf6) //功能键 delay(25); if(P2==0xf6)

31、 //功能键按下 { while(P2==0xf6); //松手检测 s1num++; //功能键按下计数 TR0=0; //T0定时停止,进入时间调整 switch(s1num) { case 1: write_com(0x80+0x40+0x09); break; //光标闪烁位定为秒个位 case

32、2: write_com(0x80+0x40+0x06); break; //光标闪烁位定为分个位 case 3: write_com(0x80+0x40+0x03); break; //光标闪烁位定为时个位 case 4: write_com(0x80+0x0b); break; //光标闪烁位定为日个位 case 5: write_com(0x80+0x08); break; //光标闪烁位定为月个位 case 6: write_com(0

33、x80+0x05); break; //光标闪烁位定为年个位 } write_com(0x0f); //光标闪烁 if(s1num==7) { s1num=0; //按键计数复位 write_com(0x0c); //光标停止闪烁 TR0=1; //重新启动定时器 } } if(P

34、2==0xee) // 时分秒 +1 模块 { delay(25); if(P2==0xee) { while(P2==0xee); switch(s1num) { case 1: second++; //秒+ if(second==60) second=0; //复位 write_hms(8,second); //秒

35、输出显示 write_com(0x80+0x40+0x09); //光标闪烁位定为秒个位 break; case 2: minute++; if(minute==60) minute=0; //复位 write_hms(5,minute); //分输出显示 write_com(0x80+0x40+0x06); //光标闪烁位定为分个位 break;

36、 case 3: hour++; if(hour==24) hour=0; //复位 write_hms(2,hour); //时输出显示 write_com(0x80+0x40+0x03); //光标闪烁位定为时个位 break; case 4: date++; //日+ if(year%4==0) //

37、平闰年判断 { if(date==month1[month-1]+1) { date=1; } } else { if(date==month0[month-1]+1) { date=1; } } write_ymd(10,date); //日输出显示 write_com(0x80+0x0b);

38、 //光标闪烁位定为日个位 break; case 5: month++; //月+ if(month==13) month=1; if(year%4==0) //判断日和月的配对关系 { if(date>month1[month-1]) date=month1[month-1]; } else { if(date

39、>month0[month-1]) date=month0[month-1]; } write_ymd(10,date); //日输出显示 write_ymd(7,month); //月输出显示 write_com(0x80+0x08); //光标闪烁位定为月个位 break; case 6: year++; //年+ if(year==100

40、) year=1; //复位 write_ymd(4,year); //年输出显示 write_com(0x80+0x05); //光标闪烁位定为年个位 break; } } } if(P2==0xde) //时分秒 -1 模块 { delay(5); if(P2==0xde) { while(P2==0xde); swi

41、tch(s1num) { case 1: second--; //秒- if(second==255) second=59; //复位 write_hms(8,second); //秒输出显示 write_com(0x80+0x40+0x09); //光标闪烁位定为秒个位 break; case 2

42、 minute--; if(minute==255) minute=59; //复位 write_hms(5,minute); //分输出显示 write_com(0x80+0x40+0x06); //光标闪烁位定为分个位 break; case 3: hour--; if(hour==255) hour=23; //复位 write_hms(2,hour); //时

43、输出显示 write_com(0x80+0x40+0x03); //光标闪烁位定为时个位 break; case 4: date--; //日- if(year%4==0) { if(date==0) { date=month1[month-1]; } } else { if(date==0)

44、 { date=month0[month-1]; } } write_ymd(10,date); //日输出显示 write_com(0x80+0x0b); //光标闪烁位定为日个位 break; case 5: month--; //月- if(month==0) month=12; if(year%4==0)

45、 //判断日和月的配对关系 { if(date>month1[month-1]) date=month1[month-1]; } else { if(date>month0[month-1]) date=month0[month-1]; } write_ymd(10,date); //日输出显示 write_ymd(7,month); //月输出显示 w

46、rite_com(0x80+0x08); //光标闪烁位定为月个位 break; case 6: year--; //年- if(year==1) year=99; //复位 write_ymd(4,year); //年输出显示 write_com(0x80+0x05); //光标闪烁位定为年个位 break;

47、 } } } } void initialize( ) //LCD初始化函数 { uchar num; lcden=0; write_com(0x38); //设置16x2显示,5x7点阵显示,8位数据接口 write_com(0x0c); //00001DCB,D(开关显示),C(是否显示光标),B(光标闪烁,光标不显示) write_com(0x06); //000001N0,N(地址指针+-1) write_com(0x01); //清屏指令 每次显示下一屏内容时,必须

48、清屏 write_com(0x80+0x10); //第一行显示 for(num=0;num<16;num++) //显示16个字符 { write_data(mytable0[num]); delay(10); } write_com(0x80+0x50); //第二行,从第一格开始显示 for(num=0;num<16;num++) //显示16个字符 { write_data(mytable1[num]); delay(10); } for(num=0;n

49、um<16;num++) { write_com(0x1c); //0001(S/C)(R/L)**; S/C:高电平移动字符,低电平移动光标; R/L:高电平左移,低电平右移 delay(300); } delay(1000); write_com(0x01); //清屏指令 每次显示下一屏内容时,必须清屏 write_com(0x80); for(num=0;num<13;num++) //初始化第一行显示 { write_data(line0[num

50、]); delay(50); } write_com(0x80+0x40); //第二行,顶格显示 for(num=0;num<10;num++) //初始化第二行显示 { write_data(line1[num]); delay(50); } TMOD=0x01; //定时器0中断初值设置 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void main

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服