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

上传人:b****2 文档编号:2320974 上传时间:2022-10-28 格式:DOCX 页数:28 大小:939.78KB
下载 相关 举报
基于单片机的lcd1602电子时钟设计说明.docx_第1页
第1页 / 共28页
基于单片机的lcd1602电子时钟设计说明.docx_第2页
第2页 / 共28页
基于单片机的lcd1602电子时钟设计说明.docx_第3页
第3页 / 共28页
基于单片机的lcd1602电子时钟设计说明.docx_第4页
第4页 / 共28页
基于单片机的lcd1602电子时钟设计说明.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

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

《基于单片机的lcd1602电子时钟设计说明.docx》由会员分享,可在线阅读,更多相关《基于单片机的lcd1602电子时钟设计说明.docx(28页珍藏版)》请在冰豆网上搜索。

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

基于单片机的lcd1602电子时钟设计说明

基于单片机的LCD1602电子时钟设计

一、设计任务和目的

1.1、设计任务

(1):

用单片机设计基于LCD1602的电子时钟,显示时间和日期;

(2):

误差精度控制在1s/天;

(3):

具有时间和日期的校准功能;

(4):

能区分某年是闰年或平年,并对应显示2月份的天数;

(5):

根据月份的不同显示不同的最大日数;

(6):

搭建仿真电路图,模拟单片机要实现的功能;

(7):

焊接单片机开发板;

(8):

编写程序,下载并调试,实现要求的功能。

1.2、设计目的

(1):

熟练掌握KEIL软件的使用方法;

(2):

熟练掌握PROTEUS软件的使用方法;

(3):

掌握单片机I/O接口的工作原理;

(4):

掌握LCD显示器的工作原理及编程方法;

(5):

掌握独立式键盘的工作原理及编程使用方法;

(6):

掌握单片机的下载使用方法。

二、设计思路和方案论证

2.1、设计思路

电路总体上分为控制和显示部分。

以单片机最小系统作为核心控制电路,控制LCD显示,具体显示容及方式由软件来完成;由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、减1键三个按键完成,共需四个按键;计时功能由固定频率的晶振完成(采用11.0592MHz);显示部分主要采用LCD1602作为显示。

2.2、方案论证

(1):

时钟芯片的选择和论证

方案一:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V围,功耗也较低,但价格比较贵。

方案二:

直接采用单片机定时计数器提供秒信号,使用程序实现秒、分、时、日、月、年计数。

采用此方案实现虽然有一定的时间误差,但可减少芯片的使用,节约成本,易于实现,符合现实选用,所以采用此种作为时钟信号发生器。

(2):

显示模块选择方案和论证:

方案一:

采用点阵式图形LCD12864液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用点阵式图形LCD12864液晶显示屏。

方案二:

采用点阵式字符型LCD1602液晶显示屏,LCD1602是专门用于显示字母、数字、符号等的点阵型液晶显示模块,分4位和8位数据传输方式。

提供“5×7点阵+光标”和“5×10点阵+光标”的显示模式。

价格现对便宜,所以用此种作为显示。

三、系统的硬件设计与实现

3.1电路设计框图

 

 

 

图1:

整体设计方框图

3.2单片机最小系统的设计

以AT89C51为核心组成的单片机的最小系统,主要包括时钟振荡电路,复位电路等。

正5V电源直接接到89C51的40脚(VCC),20脚(GND)接地。

时钟振荡电路的18脚(XTAL1)和19脚(XTAL2)外接11.0592MHZ的晶振和二个30PF的电容,振荡频率就是晶振的固有频率,经过一定的电路连接实现计时的功能。

复位电路采用上电自动复位和手动复位相结合的方式接到89C51的9端(RST)。

单片机最小系统原理图如图2所示:

图2:

单片机最小系统原理图

 

3.3显示电路设计

采用LCD1602液晶显示,LCD1602的D0~D7与单片机的P0口相连,P0口作为I/O口输出时必须外接10KΩ的上拉电阻。

分别用P.0、P1.1、P1.2作为LCD1602的RS、RW、E控制线。

显示电路如图3所示:

图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Ω的电阻构成。

在产品工作期间出现错误或死机现象可采用手动复位,即按下S4,此时无论电路处于何种状态,电路都会恢复到初始状态的显示。

晶振电路可以给单片机提供所需要的时钟频率,主要由晶振这个元件固定的精确的频率来实现。

复位电路及晶振电路如图5所示:

图5复位电路及晶振电路

四、系统软件设计

软件系统分四个部分:

主函数程序部分,键盘扫描部分,定时器中断部分,LCD初始化部分。

各部分程序流程图如下所示:

4.1主函数程序流程图

 

 

 

 

 

 

图6主函数流程图

4.2键盘扫描子程序流程图

 

 

NO

YES

 

NONO

 

YESYES

 

 

 

图7键盘扫描程序流程图

 

4.3定时器中断子程序流程图

 

NO

YES

NO

YES

NO

 

YES

NO

 

YES

YES

NO

 

YES

NONO

YES

NO

YES

4.3LCD初始化程序流程图

 

 

 

 

图9LCD初始化流程图

 

五、设计结果分析

5.1硬件分析

该设计电路系统较大,电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多。

另外,买来的元器件要先进行检测,如果有坏的器件要进行更换,还有就是要注意元器件的正确放置与安装以及布线的合理,便于成品电路的检测与维护。

为了减少复杂度,可用Proteus软件进行仿真,按照电路原理图在Proteus中选择元器件并连接,把生产的HEX文件烧入到单片机部进行仿真,若出现错误及时更改。

在本设计中遇到了很多的问题。

回想这些问题,其实只要认真思考许多都是可以避免的,以下为主要的问题:

(1):

在Proteus仿真中提示出错,没有仿真结果。

在Proteus中仿真中,提示出现了R1(R2)错误,经过仔细排查,发现有两个电阻命名,是R1,两个电阻命名是R2。

修改后就没有出现错误。

(2):

在Proteus仿真中,LCD不显示

在硬件设计上需要用P0口来对LCD进行指令的读写和数据的输入,由于没有在P0口接上拉电阻,LCD屏就一直不显示。

最终将在查阅课本时想起P0做输出口使用时外部必须接10KΩ的上拉电阻,接上后LCD就正常显示了。

5.2软件分析

该设计的功能虽然比较简单,但程序也较为复杂,所以在编写程序和调试时出现了许多问题。

最后经过多次的模块子程序的修改,一步一步的完成,最终在KEIL调试成功,解决了软件问题。

在软件的调试过程中主要遇到的问题如下:

(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。

刚开始不能区分,最后经过修改能区分显示。

六、设计体会

通过这次单片机课程设计,发现了自身所学知识存在许多的不足和问题,同时也学到了不少东西,提高了动手实践的能力。

在整个设计过程中,从设计方案的确定,到具体电路在Proteus中的设计,最后到总体电路的联接构建以及程序的编写烧制,特别是程序的编写,要求对LCD1602的初始化操作、指令和数据的操作都需要很熟悉。

在设计过程中碰到实在不能解决的问题,就问老师或是和同学交流,把问题彻底搞清楚并加以掌握。

尽管在这次设计中遇到了许多难题,但也都一一得以解决。

比如程序编写中,由于思路不清晰,开始时遇到了许多的问题,经过静下心来思考,和同学们的共同讨论,理清了思路,反而得心应手;在硬件方面虽然没有遇到什么大问题,但从中也学到了许多知识。

通过此次设计,也使我知道了做任何事都要有一颗平常心,不要想着走捷径,一步一个脚印,把每一步都认认真真做好了,才能取得最后的成功,同时也锻炼了我的耐心,做什么事都要有耐心,不要遇到困难就退缩,而是要静下心来去寻找解决的办法否则很难有最后的成功。

在此过程中更要注重自主学习,发挥自己的主观能动性。

总之,这次课设是我的又一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我有了全方位的提高和进步。

七、proteus仿真图

图(10)仿真主界面

图(11)调节分界面

图(12)调节月界面

图(13)调节年界面

八、参考文献

[1]周国运。

单片机原理及应用(C语言版)。

中国水利水电,2009

[2]齐、朱宁西。

单片机应用系统设计技术。

电子工业,2009

[3]汪道辉。

单片机系统设计与实践。

电子工业,2006

[4]子文。

单片机原理及应用。

电子科技大学,2006

九、程序附录:

#include

#defineucharunsignedchar

#defineuintunsignedint

#definedatasendP0

sbitlcden=P1^2;//LCD使能端

sbitlcdrs=P1^0;//LCD数据/指令(H/L)选择端

sbitlcdrw=P1^1;

ucharmytable0[]="Nanyangligong";

ucharmytable1[]="liuhaiyanDIY!

!

";

ucharcodeline0[]="2010-12-01";//初始化显示

ucharcodeline1[]="00:

00:

00";

ucharcodemonth0[]={31,28,31,30,31,30,31,31,30,31,30,31};//平年月

ucharcodemonth1[]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年月

ucharcount,hour,minute,second,year=1,month=1,date=1;

uchars1num;//s1num:

定义功能键按下次数变量

voiddelay(unsignedintz)//延时子函数z*1ms

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidwrite_(unsignedcharc)//写命令子函数

{

lcdrs=0;//低电平选择为写指令

lcden=0;

datasend=c;//把指令写入P0口

delay(5);

lcden=1;//开使能

delay(5);//读取指令

lcden=0;//关闭使能

}

voidwrite_data(unsignedchard)//写数据子函数

{

lcdrs=1;//高电平选择为写数据

data

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

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

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