基于LCD1602电子时钟课程设计报告.docx
- 文档编号:10056690
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:74
- 大小:553.21KB
基于LCD1602电子时钟课程设计报告.docx
《基于LCD1602电子时钟课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于LCD1602电子时钟课程设计报告.docx(74页珍藏版)》请在冰豆网上搜索。
基于LCD1602电子时钟课程设计报告
信息与电子工程学院
课程设计报告
课程
单片机技术应用
设计题目
基于LCD1602电子时钟
专业
班级
成员
姓名
学号
分工
成绩
指导老师
答辩日期
一、课程设计概述2
1.1课程设计背景2
1.2课程设计容2
1.3课程设计技术指标2
二、方案的选择及确定2
2.1单片机芯片的选择2
2.2显示模块的选择3
2.3实时时间计算模块的选择3
2.4实时环境温度采集模块选择3
2.5电路设计最终方案决定4
三、系统硬件设计4
3.1主控模块4
3.2LCD显示模块设计5
3.3时间计算模块设计5
3.4实时环境温度检测模块6
3.5报警模块6
3.6设置模块7
3.7电源接口部分7
四、系统软件设计7
4.1主函数7
4.2设置模块8
4.31602液晶屏9
4.4软件原理图10
五、系统调试过程10
5.1软件调试10
5.2硬件调试11
六、结论11
七、遇到的问题及解决方法和总结11
7.1硬件方面11
7.2软件方面12
7.3总结12
八、参考文献12
九、附录13
一、课程设计概述
1.1课程设计背景
随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。
而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。
因为它有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。
而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。
1.2课程设计容
利用单片机、时钟芯片DS1302、温度传感器DS18B20、1602液晶屏等实现日期、时间、温度的显示,即是一个电子时钟。
具体的功能如下:
(1)通过DS1302能够准确的计时,时间可调并在液晶屏上显示出来。
(2)通过DS18B20能够实时、准确的检测当前环境温度。
(3)利用程序控制单片机实现闹钟功能。
1.3课程设计技术指标
(1)LCD液晶每行刷新显示。
(2)实时时钟可提供年、月、日、时、分和秒,每月的天数可以自动调整,且具有闰年补偿功能。
(3)时间是24小时制;年限2000年~2099年。
(4)测量温度围为0℃~+60℃,误差为±0.5°C。
二、方案的选择及确定
2.1单片机芯片的选择
方案
(1):
采用AT89S51芯片作为硬件核心
该芯片采用FlashROM,部具有4KBROM存储空间,而且与MCS-51系列单片机完全兼容,但是需要通过下载板来下载,比较不方便。
方案
(2):
采用传统的STC89C52RC芯片作为硬件核心
该芯片具有8KB在线系统可编程Flash存储器。
STC89C52RC使用经典的MCS-51核,但做了很多的改进使得芯片具有传统51单片机不具备的功能,并且可直接使用串口下载。
因AT89S51需要通过下载板下载,而STC89C52RC可直接使用串口下载,所以选择采用方案
(2)STC89C52RC作为主控制系统.
2.2显示模块的选择
方案
(1):
8段数码管显示
8段数码管是利用发光二极管的特性组合而成数字显示器件,通过控制相应的二极管的状态显示相应的数字。
采用数码管显示,数码管亮度高、体积小、重量轻,但其显示信息简单、有限,操作比较液晶显示来说略显繁琐。
方案
(2):
1602液晶屏显示
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块采用液晶显示。
液晶显示功耗低,轻便防震。
由于设计显示信息比较多,占用的系统资源少,操作方便。
因本设计显示的字符较多,1602LCD可以显示32个字符,而8段数码管显示的字符较少,且操作比液晶显示略显繁琐,所以采用方案
(2)1602液晶屏组成本设计的显示模块。
2.3实时时间计算模块的选择
方案
(1):
采用STC89C52RC芯片
STC89C52RC单片机部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用12MHZ实现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能,要实现“电子时钟”的功能需要较复杂的程序,时间计算逻辑较困难,所以使用不便。
方案
(2):
采用DS1302芯片
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片。
该芯片采用3线串行接口方式,可提供年月日、星期、时分秒等时间信息,并可根据月份和闰年的情况自动调整月份的结束日期。
部带有31个字节RAM,用于存放临时性数据,同时具有可编程涓细电流充电能力。
因STC89C52RC芯片时间计算逻辑较困难,而DS1302可根据月份和闰年的情况自动调整月份的结束日期且具有编程涓细电流充电能力,所以采用方案
(2)实现实时计时功能。
2.4实时环境温度采集模块选择
方案
(1):
采用热敏电阻
热敏电阻是开发早、种类多、发展较成熟的敏感元器件.热敏电阻由半导体瓷材料组成,利用的原理是温度引起电阻变化。
通过一定的电路可以将周围环境的温度变化转化成电压的变化,通过AD转化器件将信号传输给单片机进行分析,所以热敏电阻需要的外部器件较多。
方案
(2):
采用DS18B20
DS18B20是美国DALLAS公司生产的数字温度传感器,采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
在使用中可以不接任何外围元件,或者在单总线上接一个4.7K的上拉电阻,支持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测温,供电方式灵活DS18B20可以通过部寄生电路从数据线上获取电源,因此非常适合本系统使用。
因热敏电阻需要的外部器件较多,而DS18B20在使用中可以不接任何外围元件,或者在单总线上接一个4.7K的上拉电阻,所以采用方案
(2)构成本设计的实时温度采集模块。
2.5电路设计最终方案决定
综上各方案所述,本系统以STC89C52RC单片机为控制核心,通过与DS1302和DS18B20通信获取实时时间和实时环境温度,并将得到的数据通过1602液晶显示出来,同时通过对应的按键调整相应的值,并且通过蜂鸣器实现报警功能。
因此本设计的总体方案组成框图如图2-1所示:
图2-1总体方案组成框图
三、系统硬件设计
3.1主控模块
本次课程设计主要用到STC89C52RC单片机,硬件原理图(见附录图一)。
端口分配表如3-1所示:
表3-1端口分配表
引脚序号
引脚名称
作用及功能
1
P1.0
DS1302时钟输入
2
P1.1
时钟串行数据输入、输出端
3
P1.2
时钟芯片复位端
5~8
P1.4~P1.7
按键设置
9
RST
芯片复位端口
13
P3.3
实现18B20温度的输入
16
P3.6
接蜂鸣器,实现闹钟功能
18、19
XTAL1、XTAL2
外部晶振端口
26
P2.5
实现1602数据和指令选择控制端
27
P2.6
1602读写控制端
28
P2.7
1602数据读写操作控制位
30、31
ALE、EA
地址锁存端口,烧写程序的端口
32~39
P0
输出数据,控制1602液晶屏的显示
3.2LCD显示模块设计
1602液晶功耗较小可直接与单片机接口相接,电源直接与电源电路相接为+5V,对比度可调。
本设计使用单片机的P0口和P2口与1602进行通信。
另外1602有2行显示,每行显示的字符数为16个,可以用于显示字母、数字、符号等,并具有简单且功能较强的指令集,可以实现字符显示、移动、闪烁等功能。
1602液晶与单片机接口电路如图3-1所示:
3.3时间计算模块设计
DS1302通过三根I/O线实现与单片机的通信,依靠2、3脚外接的晶振与其部的电容配合来产生时钟脉冲的。
当外接晶振电路振荡时,DS1302计时正确;当外接晶振电路停振时,DS1302计时停止。
因此32.768kHz晶振是造成DS1302工作不稳定的主要因素。
因其功耗很小,当1脚的主电源超过8脚接的备用电源加0.2V时,由主电源对芯片供电;否则,有备用电源对芯片供电,所以即使电源掉电后通过3V的电池仍能维持芯片精确走时。
DS1302与单片机接口电路如图3-2所示:
图3-2DS1302与单片机接口
3.4实时环境温度检测模块
DS18B20通过单总线实现与单片机的通信,系统中的数据交换,控制都由这根线完成。
在使用中DS18B20没有用到任何外围元件,可工作在-15℃~+100℃。
DS18B20与单片机接口电路如图3-3所示:
图3-3DS18B20与单片机接口
3.5报警模块
在本设计中蜂鸣器直接接在单片机P3.6上。
报警模块采用单片机输出1.25KHZ的频率从而使蜂鸣器发出声音。
方波图如图3-4所示:
图3-4方波图
3.6设置模块
设置模块采用四个按键K1-K4与单片机P1.4、P1.5、P1.6、P1.7接口相接,其中K1为设置模块的选择位,K2是增加键,K3是减少键,K4为退出按键。
独立按键与单片机接口电路如图3-5所示:
图3-5独立按键与单片机接口
3.7电源接口部分
采用USB接口从电脑接到电源接口中,拨动开关可控制电路的接通和关闭,并用一个发光二极管作电源指示。
电源接口如图3-6所示:
图3-6电源接口
四、系统软件设计
软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的良好。
本系统采用具有编写灵活、移植方便、便于模块化设计的C语言编写,并通过Proteus软件进行仿真,完成各种实质性功能的设计。
4.1主函数
主函数是程序功能总结显示的函数,其主要显示的是时间主要部分和当前实时时间,当按下按键2时1602显示当前温度状态,并延时5s,后返回当前时间显示状态;当闹钟功能打开,实时时间又和闹钟时间相等就会发出嘀嘀的响声并且在液晶屏上有相应的提示,此时按按键4退出;当进入设置状态完成后退出就回到当前时间显示状态。
主函数程序框图如图4-1所示:
图4-1主函数程序框图
4.2设置模块
设置模块分时间设置、闹钟设置、最高温度报警设置。
要先按下按键1才能进入设置模块,然后按下按键1进入设置时间模块;按键2进入最高温度报警模块;按键3进入设置闹钟模块,最后按下按键4退出当前状态。
设置步骤流程图如图4-2所示:
开始
图4-2设置步骤流程图
4.31602液晶屏
1602液晶屏是此设计的主要输出部分,有2行显示,每行16个字符,根据写入的位置而显示,当显示欢迎界面时是流动的,整个屏幕向右移动。
1602LCD流程图如图4-3所示:
图4-31602LCD流程图
4.4软件原理图
软件原理图如附录图二所示:
这个设计中,STC89C52RC主要功能是储存程序、根据程序的容对各个端口进行判断并作出相应的处理;DS1302主要功能是控制年,月,日,时,分,秒的显示效果;LCD1602主要功能是将所要显示的显示出来;DS18B20主要功能是控制温度的显示效果。
通电后,进入欢迎界面,前后延时2.8s,,后显示当前实时时间,若按下按键1就进入调节状态,此时在按下按键1为设置时间状态,按下按键2为设置最大温度报警状态,按按键3为设置闹钟状态,按下按键4为退出调节状态;若按下按键2则是显示当前温度,5s后自动跳回显示当前实时时间。
五、系统调试过程
系统调试共分为两大部分:
一个是软件调试,另一个是硬件调试。
其中软件仿真通过Protues实现;硬件部分现在Protel99SE上设计出硬件电路图,画出PCB图,然后再制造出实物。
调试方法采用先分别调试各单元模块,调通后再进行整体调试的方法,以提高调试效率。
5.1软件调试
先根据仿真检测当中的元件是否符合电路的设计,在KeilC51写入程序并且修改至编译正确,在将写好的程序入入到Protues软件单片机芯片上,进行仿真。
仿真结果如下所示:
图a:
显示实时时间图b:
显示当前温度
图c:
当达到设置的最高温度图d:
当达到设置的闹钟时间
图e:
当进入调节状态图f:
当调节时间
图g:
当调节最高温度图h:
当调节闹钟
5.2硬件调试
根据仿真后的电路图进行做板,先用万用表检测各元器件是否正确,再焊接电路,完成后检查无误就将程序用单片机板下载到芯片上,后把芯片拔下插入实物板上,即可工作。
上电后,拨动电源开关就进入欢迎界面,2.8s后进入当前实时时间状态,按下按键1进入调节状态,此时按下按键1为设置时间状态,按下按键2为设置最大温度报警状态,按按键3为设置闹钟状态,按下按键4为退出调节状态;在调节状态时按键2为对应增加键,按键3为对应减键,K4为退出按键;按下按键2后用手捏住DS18B20芯片,在液晶屏上显示的温度有明显的变化,所以判断芯片是良好的。
六、结论
这次课程设计达到了预期的90%,有显示实时时间和实时温度,但是温度的显示不完全正确,在负数时有三个温度值显示错误,时间的设置逻辑比较啰嗦,没有做到简单化。
例外还加了欢迎界面、闹钟功能、最高温度报警功能。
下面从软件和硬件两个方面具体说明。
硬件的制作要涉及到protel软件的运用,在画原理图的时候如果连错了就直接导致硬件的出错,所以画图的时候要特别注意。
到导入PCB时也是要特别注意的,布板不当也是直接影响实物的制作。
对于电子时钟的制作,我们基于小系板来实现,外接显示部分的1602LCD液晶屏、温度传感部分DS18B20、提供实时时间部分DS1302、蜂鸣器、电源接口部分等。
总之,一步步制作下来我们完成的还是比较可观的。
软件的编写上我们出现了较大的困难,电子时钟的程序有些复杂,一开始对于我们来说毫无头绪。
后来下了很大的功夫且在老师及同学的指导下慢慢的进入了状态。
虽然过程出现很多困难,但结果还是实现了电子时钟的功能,不过在显示温度负数时有三个数值显示错误,分别是-16℃,-32℃,-48℃;另外设置模块的逻辑没有做到简单化,在设置模块时只能退出本级的设置,而不能直接退出到当前实时时间显示状态。
七、遇到的问题及解决方法和总结
7.1硬件方面
画的PCB板焊盘不够大,又没有相应大小的砖针,而且在融板过程中出现了差错,最后导致PCB板不完美.
解决方案:
最终决定自己用万能板焊接。
7.2软件方面
由于对C语言程序的认知不深入,在修改程序时,出现了以下几点问题。
(1)欢迎界面的时间太长。
解决方案;修改欢迎界面的延时时间。
(2)温度显示错乱,并且在显示时高位自动补零。
解决方案:
通过修改温度函数使其高位的零自动隐藏,但是温度在-16,-32,-48度时仍然会出现错误,比实际的温度高16度,其余温度值时显示正确。
(3)秒钟调节时会自动转零。
解决方案:
把自动转零部分的程序改为秒钟调节功能。
(4)进入调节时间状态时字符闪烁以至于看不清楚调节的大小。
解决方案:
把1602的字符闪烁指令改为光标指令。
(5)在报警时无声音。
解决方案:
修改报警模块,利用控制P3.6脚电源的通断,使蜂鸣器发出嘀嘀的响声。
7.3总结
课程设计的完成,为我们的大二下学期学习生活画下了最后一笔。
在做课程设计的日子里得到了大量课外的知识巩固,使得我们的动手能力和专业技能都有了很大的提高。
让我们认识到脚踏实地,认真严谨是学习的态度,不怕困难、坚持不懈、吃苦耐劳的精神是我们在这次设计中最大的收益。
我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。
在这次设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感帮助我们的同学。
八、参考文献
【1】.常敏.王涵《单片机应用程序开发与实践》P219
【2】.江志红.《51单片机技术与应用系统开发案例精选》
【3】.明明、索世文、王守中《51单片机应用开发手册—指令、模块、实例》
【4】.王守中.《51单片机开发入门与典型实例》P149
【5】.锐志单片机开发网
【6】.黎《基于C语音的单片机应用技术与Proteus仿真》P21
九、附录
1、仪器与设备清单
工具、设备和耗材
数量
电脑
1台
KeiluKision4
1套
Proteus7.7软件
1套
单片机实训板
1块
杜邦导线
16条
Protel99SE
1套
万用表
1套
2、元器件清单
元件名称
型号
数量(个)
编号
价格(元/个)
单片机
STC89C52RC
1
A1
4
液晶
LMD16L
1
Y1
18
芯片
DS1302
1
Y2
3
温度芯片
DS18B20
1
Y3
13
晶振
12MHZ,32.768KHZ
2
JZ1,JZ2
1
瓷片电容
22pF
2
C1,C2
电解电容
22u10uf
1
C3
排阻
10k
1
RP1
按钮
6*6*5
5
K1~K5
0.1
电阻
10k,1k
2
R1,r2
可调电阻
1k
1
POT1
电池
1.5V
2
DC
0.5
电源插座
1
DY
2
拨动开关
0.9*0.3*1.1cm
1
KG
0.3
发光二极管
LED
1
LED
0.1
蜂鸣器
TMB12A05
1
LB
0.8
排针
1*40PIN2.54mm
2(排)
CON
0
3、原理图(见图一)
4、PCB图(见图三)
5、实物图(见图四)
6、操作说明书
a、正常显示时按下K1进入调节状态,此时按下K1为设置时间状态;按下K2为设置最大温度报警状态;按K3为设置闹钟状态;按下K4为退出调节状态;在调节状态时K2为对应增加键,K3为对应减键,K4为退出按键。
b、正常显示时按下K2显示当前温度并延时5秒;报警时按K4退出。
图1(硬件原理图)
图2(软件原理图)
图3(PCB)
程序:
#include
#include
unsignedcharcodedisplaywelcome[]={"WelcomeToMyLcdTimer"};//欢迎界面
unsignedcharcodedisplaywish[]={"HappyEveryDay^_^"};//欢迎界面
unsignedcharcodeovertemperature[]={"OVERTEMPERATURE!
"};
unsignedcharcodedigit[]={"0123456789"};//数字代码
unsignedcharmode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,
minutea,seconds,houra=12;
sbitSCLK=P1^0;//DS1302时钟输入
sbitDATE=P1^1;//DS1302数据输入
sbitREST=P1^2;//DS1302复位端口
sbitSET=P1^4;//DS1302设置模式选择位
sbitADD=P1^5;//增加
sbitRED=P1^6;//减小
sbitCANL=P1^7;
sbitbeep=P3^6;//位定义,定义P.6位fmp
voiddelay1ms(inti)//1毫秒延时
{
intj,k;
while(i--)
for(j=76;j>1;j--);
for(k=29;k>1;k--);
}
voiddelaynus(unsignedcharn)//延时若干微秒
{
unsignedchari;
for(i=0;i } /***********蜂鸣器模块************/ voiddely500(void) { unsignedchari; for(i=250;i>0;i--) { _nop_(); } } voidbaojing()//报警 { unsignedintj,h,y; for(h=0;h<3;h++) { for(y=0;y<10;y++) {beep=~beep; for(j=0;j<50;j++); } dely500(); } } /*******DS1302模块*************/ voidWrite1302(unsignedchardate)//向1302写数据 { unsignedchari; SCLK=0; delaynus (2); for(i=0;i<8;i++) { DATE=date&0x01; SCLK=1; delaynus (2); SCLK=0; delaynus (2); date>>=1; } } voidWriteSet1302(unsignedcharcmd,unsignedchardate)//根据相应的命令输入相应的数据 { REST=0; SCLK=0; REST=1; Write1302(cmd); delaynus(5); Write1302(date); SCLK=1; REST=0; } unsignedcharRead1302(void)//读取1302数据 { unsignedchari,date; delaynus (2); for(i=0;i<8;i++) { date>>=1; if(DATE==1) date|=0x80; SCLK=1; delaynus (2); SCLK=0; delaynus (2); } returndate; } unsignedcharReadSet1302(unsignedcharcmd)//根据命令读取1302相应的值 { unsignedchardate; REST=0; SCLK=0; REST=1; Write1302(cmd); delaynus (2); date=Read1302(); SCLK=1; REST=0; returnd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LCD1602 电子 时钟 课程设计 报告