单片机做液晶LCD时钟.docx
《单片机做液晶LCD时钟.docx》由会员分享,可在线阅读,更多相关《单片机做液晶LCD时钟.docx(44页珍藏版)》请在冰豆网上搜索。
单片机做液晶LCD时钟
用单片机做液晶LCD时钟
一、任务
设计制作基于LCD液晶显示屏的,可以调整的时钟系统。
二、要求
(1)采用1602液晶屏显示显示当前日期、时间和实时温度,温度精度为1度。
(2)日期可以显示为:
年月日;时间可以显示为:
时分秒。
(3)日期和时钟可以通过按键进行调节校正。
(1)选用12864液晶屏显示日期和时钟。
(2)温度精度达到0.5度。
(3)当系统断电后,时钟仍然可以保持。
(4)可以设置至少两个闹铃;设置温度上下限,超限可以报警。
三、说明
(1)手工焊接或者自己制作PCB板,不得采购市场上成品(包括PCB和设计实物)
用单片机做液晶LCD时钟
[摘要]
我们设计的LCD时钟温度系统是由中央控制器、温度检测器、时钟系统、报警系统,显示器及键盘部分组成。
控制器采用单片机AT89S52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12864F作为显示器,用蜂鸣器及发光二极管构成声光报警器。
单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器12864F显示,12864F还可以显示汉字;键盘是用来调时和温度查询的。
[关键字]:
单片机LCD液晶DS18B20DS130212864
1引言
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计是数据采集及处理,键盘控制,显示系统及报警系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。
并且引导一种创新的思维,把学到的知识应用到日常生活当中。
在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。
全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
一方案设计及方案论证
1.时钟温度的总体设计思路
按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。
获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。
2.时钟温度系统方案论证
方案1:
通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;
方案2:
用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。
虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。
用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。
综上所述,选择方案2。
选择
对于单片机的选择,如果用8031系列,由于它没有内部RAM,系统又需要大量内存存储数据,因而不可用;51系列单片机的ROM为4K,对于我们设计的系统可能有点小;52系列单片机与51系列的结构一样,而ROM扩大为8K,对我们设计系统提供充足的空间进行功能的扩展。
再有51系列单片机与52系列的单片机价格差不多。
因此,我们选择52系列的单片机。
2.3显示系统的方案比较
方案1:
用数码管或LED显示。
方案2:
用液晶1602显示。
方案3:
用液晶12864显示。
时钟和温度的显示可以用数码管或LED,而且价格便宜。
但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。
有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,显示数据的可读性不好,用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。
另外它们在价格上差距很大,考虑成本我们首选1602。
但是我们有12864.因此我们选择方案三。
2.4报警系统的方案比较
方案1:
用长鸣的蜂鸣器实现闹钟铃声及温度超限报警。
方案2:
用喇叭加语音芯片实现闹钟铃声及温度超限报警。
用喇叭加语音芯片成本很高,但声音还不错,再有喇叭体积庞大。
用蜂鸣器,成本低,电路结构简单,而且体积小。
限于设计所需要的功能,用蜂鸣器是最佳选择。
所以我们采用方案1.
2.5温度系统方案选择
方案1:
用热敏电阻等测温元件测出电压,再转换成对应的温度。
需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。
方案2:
用DS18B20直接测温。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
经比较,我们选择方案2。
温度实现只能通过外部的温度传感器来实现。
经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
精度为°C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
2.6键盘控制方案选择
方案1:
购买集成键盘,采用矩阵形式连接。
方案2:
购买单个复位开关做成键盘。
虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。
单片机的IO口对于我们的设计绰绰有余。
通常我们选用价格便宜单个复位开关做成键盘。
3.时钟温度系统总体设计
初步确定设计系统由单片机主控模块、时钟模块、测温模块、报警模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如图
(1)所示。
二.硬件设计部分
1单片机最小系统电路设计
1.1单片机芯片选择
单片机采用52系列单片机。
由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
其芯片外观及引脚图如下:
1.2单片机管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:
管脚
备选功能
P3.0RXD
(串行输入口)
P3.1TXD
(串行输出口)
P3.2/INT0
(外部中断0)
P3.3/INT1
(外部中断1)
P3.4T0
(记时器0外部输入)
P3.5T1
(记时器1外部输入)
P3.6/WR
(外部数据存储器写选通)
P3.7/RD
(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,那么在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
1.3单片机最小系统
单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。
1)复位电路
复位电路有两种方式:
上电复位和按钮复位,我们主要用按钮复位方式。
如下图所示:
2)晶振电路
晶振电路原理图如3-2:
3-2 晶振模块原理图
选取原那么:
电容选取30pF,晶振为12MHz。
3)电源
AT89S52单片机的供电电源是5V的直流电。
4)EA非/Vpp脚
我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。
2时钟系统电路设计
2.1时钟芯片选择
我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。
它采用主电源和备用电源双电源供电。
它的工作电压X围2.0~5.5V,在2.2V时,小于300nA。
它内部含有31个字节的静态RAM,可提供用户访问。
DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。
内部的寄存器为我们调时,闹钟定时提供了寄存空间。
备用用电源也实现了当系统断电后,时钟仍然可以保持。
而且它是串行接口,与单片机通信所需要的接口少。
不像DS12887等芯片并行通信需要很多IO口。
2.2DS1302管脚及寄存器说明
(1)DS1302的引脚排列
Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
因此,我们vcc1用3V的纽扣电池作为备用电源,vcc2用系统电源作为主电源。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,那么会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
SCLK为时钟输入端。
(2)DS1302的寄存器说明
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
2.3DS1302时钟电路
DS1302时钟电路如下图所示:
DS1302与单片机的连接仅需3条线:
时钟线SCLK、数据线I/O和复位线RST。
时钟线SCLK与P2.4相连,数据线I/O与P2.5相连,复位线RST与P2.6相连。
由于DS1302是靠涓细电流充电来实现串行输入输出的,因此,在SCLK、I/O、RST线上要加上拉电阻,其中,它们的电流应该在500u~1mA之间,若电源为5V,那么R约为5k,因此,我们的电阻R=4.7K。
在单电源与电池供电系统中,vcc1提供低电源并提供低功率的备用电源。
Vcc2提供高电源作为芯片供电的主电源。
因此,这里vcc1用3V纽扣电池,vcc2用5V的系统电源。
晶振为32.768KHz接入X1、X2引脚。
3温度系统电路
温度芯片的选择
温度实现只能通过外部的温度传感器来实现。
经上网查阅资料及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
它能够直接读出被测温度。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;°C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
3.2DS18B20内部结构描述
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8个字节的存储器,结构如图所示。
头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如图所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
3.3DS18b20温度系统电路
DS18B20系统电路如下:
DS18B20有两种接法:
一是单线接法即只接QT。
这种方法应用它内部的寄生电源,因此在QT上要用一个MOSFET把I/O线只接拉到电源上。
二是从vdd脚加上电源。
方法一适合于远距离温度监控,不需要本地电源。
而我们只是设计测温系统,选择方法二就行了,还有MOSFET极容易烧,我们不用它。
Vdd接5V电源,vss接地,QT与P2.7相连。
因为DS18B20的工作电流约为1MA,因此Qt端还要加上拉电阻为其提供电流。
若用5V电源,那么R=5/1MA=5k。
R取4.7K。
4键盘控制系统设计
按键需要4个,分别实现为时间调整、时间的加、时间的减、退出四个功能。
用单片机的4个I/O口接收控制信号,其电路图如下:
、P1.1、P1.2、P1.3相连。
这时当按键按下就输入低电平。
5报警电路系统设计
报警电路由蜂鸣器、三极管、电阻、LED等构成电路图如下:
它们与单片机的接口分别是P2.0,P1.4,P1.5。
6液晶显示系统设计
6.112864F简介
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
6.212864F引脚说明
管脚号
管脚名称
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID)
H/L
R/W=“H”,E=“H”,数据被读到DB7——DB0
R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR
6
E(SCLK)
H/L
使能信号
7
DB0
H/L
三态数据线
8
DB1
H/L
三态数据线
9
DB2
H/L
三态数据线
10
DB3
H/L
三态数据线
11
DB4
H/L
三态数据线
12
DB5
H/L
三态数据线
13
DB6
H/L
三态数据线
14
DB7
H/L
三态数据线
15
PSB
H/L
H:
8位或4位并口方式,L:
串口方式(见注释1)
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效(见注释2)
18
VOUT
-
LCD驱动电压输出端
19
A
VDD
背光源正端(+5V)(见注释3)
20
K
VSS
背光源负端(见注释3)
*注释1:
如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。
*注释2:
模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
6.312864F液晶显示电路
设计中采用LCD12864液晶显示。
它一般串口、并口两种方式显示,而我们一般采用并口显示。
12864的4、5、6、15、17脚分别与单片机的P3.0~P3.4相连。
7~14脚与单片机的P0口相连。
1、20号脚接地,2号脚接电源,19号脚背光灯正端串一个电阻与电源相连,电阻起限流的作用,我们取R=10K。
3号脚是对比度(亮度)调整,这里要用一个滑动变阻器来调整亮度,这里我们取电位器大小为10K。
LCD12864显示电路如下图所示:
7总体硬件系统设计
1.由于时间经费有限,我们不采用PCB印刷板制作硬件电路,我们用通用的电路板焊接而成。
经市场考察和以往的经验,我们选用型号为ADA5的电路板,它大小合适,而且它上面的孔都是三孔相连的,方便我们的设计。
并且这是市场最便宜的。
2.各电气元件的连接,我们采用单排针和杜邦线相连。
这样为我们避免各元件的跨接,对我们对线路的排错提供方便。
3.上述六个模块可以按原理图整齐的焊接在电路板。
最后效果,板子正面连线错横复杂,板子反面横整齐。
三.软件设计部分
本系统的软件系统主要分为主程序、液晶程序、时钟程序、温度程序、键盘控制程序、液晶显示程序。
3.1主程序
系统主程序首先对系统进行初始化,包括设置定时器、液晶、DS1302、DS18B20和端口的初始化;由于单片机没有命令指令,所以可以设计系统程序不断地循环执行液晶显示时间程序即show_time()程序。
如果单片机接收命令指令,就执行相应的程序及闹钟是否到,温度上下限是否到的判断,执行相应的报警及铃声程序。
简单流程图如下:
3.2液晶程序
LCD12864的程序主要是对内部控制指令进行指定如液晶初始化,显示空白,读,写,判断液晶是否忙及指定字符的位置等函数构成。
了解LCD12864的内部结构及控制指令和网上大部分程序模块大致相同。
3.3Ds1302时钟数据处理程序
DS1302数据处理要对始终内部的数据进行处理获得液晶显示的字符和键盘系统对DS1302内部数据进行处理。
它主要包括ds1302的初始化,读一个字节,写一个字节,读写,数据处理等函数组成。
我们对DS1302读写数据命令、DS1302RAM读写命令和寄存器标志内容的的了解,实现闹钟,调时程序很容易。
在程序尽量用位移,位或,位与来实现乘除法,这样可节约单片机处理的时间。
最后将时分秒年月日分解为字符送给液晶显示。
部分流程图如图3.2.
3.4DS18B20温度数据处理程序
DS18B20数据处理对芯片内部数据处理获得液晶的显示字符。
它主要包括DS18B20的初始化,读写一个字节,读取DS18B20中的数据和对数据的转换液晶显示的字符。
对DS18B20的精度进行不同定义可得到不同精度。
部分流程如图3.1。
3.5键盘控制程序
键盘的控制是本系统的核心,也是本系统的最复杂的部分。
通过按键设置,改变芯片内数据达到调时的效果,设置闹钟,设置温度上下限等功能。
我们设置4个按键分别是设置(set),上(up),下(down),退出(out)。
我们首先按set就进入功能选择界面,通过上下键选择功能,再按set进入功能设置界面,按set改变设置项目及退出,按上下键改变所设置的值。
按out键退出到时钟显示界面。
3.6液晶显示程序
液晶显示程序是对单片机内数据视化,让用户更直观方便观察结果及对功能的设置。
在程序中加入闪烁,使显示更加直观。
图3.2
3.8其他程序
其他程序包括延时程序,闹铃程序,警报程序,闪烁程序。
其中闹铃程序,警报程序用延时函数来实现。
闪烁程序用定时器的中断来完成的。
3.9程序中的注意点
1.按键处理防抖动应加延时函数。
2.程序用调用函数,最好在头文件申明函数,主函数一般最后写。
3.为了使程序更加容易写,我们要分模块来完成程序。
四.软硬件调试部分
1)软件调试
软件调试