LCD时钟温度计设计.docx
《LCD时钟温度计设计.docx》由会员分享,可在线阅读,更多相关《LCD时钟温度计设计.docx(32页珍藏版)》请在冰豆网上搜索。
LCD时钟温度计设计
四川师范大学成都学院本科毕业设计
LCD时钟温度计
学生姓名
所在系
专业名称
班级
学号
指导教师
XXX大学教务处
年月
LCD时钟温度计的设计
学生:
指导教师:
摘要
LCD时钟温度计是由中央控制器、温度检测器、时钟系统、存储器、显示器及键盘部分组成。
控制器采用单片机AT89C51,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12232F作为显示器,用AT24C16作为存储器件。
单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理,存储器通过单片机对某些时间点的数据进行存储;单片机再把时间数据和温度数据送液晶显示器12232F显示,12232F还可以显示汉字;键盘是用来调时和温度查询的。
关键字:
单片机汇编语言查表LCD液晶DS18B20AT24C16
LCDclockthermometerdesign
Abstract:
WedesignedthetemperatureoftheLCDclocksystemisprovidedbythecentralcontroller,temperaturedetectors,clocksystem,memory,displayandkeyboardparts.Single-chipcomputercontrollerW78E516B,temperaturedetectionpartoftheuseofDS18B20temperaturesensor,clocksystemclockchipwithDS1302,withLCDLCD12232Fasadisplay,usingAT24C16asamemory.Single-chipthroughtheclockchipDS1302timeaccesstodata,data-processingtimeaftertheshow;temperaturesensorDS18B20collectingtemperaturesignalsenttothetreatmenttothesingle-chip,memorythroughthesingle-chipforcertaintimepointsofdatastorage;Singlechipthenthetimetosenddataandtemperaturedata12232FLCDdisplay,12232FcanalsodisplayChinesecharacters;keyboardisusedtotunethequerytimeandtemperature.
Keywords:
Single-chipLCDlook-uptableDS18B20AT24C16LCDassemblylanguage
一、前言
开发时钟温度计就必须要了解单片机和LCD夜晶显示器的原理和功能等,下面一节我们将简单介绍一下单片机和液晶显示器。
在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,培养动手能力和解决实际问题的经验让我亲自接触专用时钟芯片DS1302,并会用DS1302芯片开发时钟模块,应用到其他系统中去。
熟悉WAVE软件调试程序和仿真.
通过实验提高对单片机的认识;
通过实验提高焊接、布局、电路检查能力;
通过实验提高软件调试能力;
进一步熟悉和掌握单片机的结构及工作原理。
通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
通过完成一个包括电路设计和程序开发的完整过程,使我了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
1、基本要求
(1)具有年、月、日、星期、时、分、秒等功能;
(2)有温度计功能;
(3)可显示温度计。
二、总体方案设计
(一)方案设计与论证
按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的存储和查询及显示。
初步确定设计系统由单片机主控模块、时钟模块、测温模块、存储模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如图1所示。
1.单片机芯片的选择方案和论证
方案一:
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
方案二:
如果用8031系列,由于它没有内部RAM,系统又需要大量内存存储数据,因而不可用;51系列单片机的ROM为4K,对于我们设计的系统可能有点小。
方案三:
用W78E516B,有8K字节在系统可编程Flash存储器W78E516B是一种低功耗、高性能CMOS8位微控制器。
W78E516B是Winbond生产的与Intel的8052指令集兼容的8位微控制器,内部含有两部分可在线更新的FlashEPROM,64K的主FlashEPROM和4K的辅FlashEPROM,用于在系统编程。
主Flash里的程序可被辅Flash里的加载程序更新,辅Flash里的程序也可被主Flash里的加载程序更新。
2.时钟芯片的选择方案和论证
方案一:
直接用单片机的定时器编程以实现时钟,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
方案二:
用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。
比较两种方案,用软件实现时钟固然可以,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,用专用时钟芯片可以实现准确记时。
选二方案。
3.显示模块选择方案和论证
方案一:
时钟和温度的显示可以用数码管,但是数码管的只能显示简单的数字,我们设计的系统有很多东西需要显示,所以不采用一方案。
方案二:
用显示功能更好的液晶显示器,它能显示更多的数据,用可以显示汉字的液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。
(二)电路设计最终方案决定
综上各方案所述,对此次作品的方案选定:
控制器采用单片机AT89C51,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12232F作为显示器,用AT24C16作为存储器件。
三、单元模块设计
(一)各单元模块功能介绍及电路设计
根据方案的选择,系统由AT89C51、时钟芯片DS1302、AT24C16存储电路、液晶显示电路、键扫描电路组成。
其各功能模块如下:
⒈复位电路
上电复位采用电平方式开关复位。
如图2所示。
上电复位用RC电路,电容用20
F,电阻用10K
。
⒉晶振电路
单片机的晶振频率采用12MHZ,加两个30pF电容。
图3所示。
图2复位电路图3晶振电路
⒊液晶显示电路设计
显示电路采用12232F液晶显示器。
12232F是一种内置8192个16*16点汉字库和128个16*8点ASCII字符集图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×32全点阵液晶显示器组成。
可完成图形显示,也可以显示7.5*2个(16*16点阵)汉字.与外部CPU接口采用串行方式控制。
主要技术参数和性能:
①电源:
VDD:
+3.0~+5.5V。
(电源低于4.0伏LED背光需另外供电);
②显示内容:
122(列)×32(行)点;
③全屏幕点阵;
④2MROM(CGROM)总共提供8192个汉字(16×16点阵);
⑤16KROM(HCGROM)总共提供128个字符(16×8点阵);
⑥2MHZ频率;
⑦工作温度:
0℃~+60℃,存储温度:
-20℃~+70℃。
⒋温度传感器设计
由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。
而DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,电路图如图4所示。
图4温度传感器图
DS18B20的性能特点如下:
⑴独特的单线接口仅需要一个端口引脚进行通信;
⑵多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
⑶无须外部器件;
⑷可通过数据线供电,电压范围为3.0~5.5V;
⑸零待机功耗;
⑹温度以9或12位数字量读书;
⑺用户可定义的非易失性温度报警设置;
⑻报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
⑼负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8个字节的存储器,结构如表2所示。
头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如表1所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
表1配置寄存器表
表2高速暂存RAM结构表
5.存储电路
存储电路采用ATMEL公司生产的AT24C16(图5所示),具有16KB的存储空间。
其管脚接法是1、2、3、4接地,5、6分别接单片机的端口,7、8接5V电源。
图5AT24C16引脚图图6时钟模块图
6.时钟模块的设计
我们采用DS1302作为主要计时芯片,主要为了提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电源进行充电,可以保证后备电源基本不耗电。
电路图如图6所示。
7.键盘接口的设计
由于按键只有4个,分别实现为时间调整、时间的加减、查询温度。
用查询法完成读键功能。
(二)电路原理及说明
1.时钟芯片DS1302介绍及其工作原理:
现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。
这些电路的接口简单、价格低廉、使用方便,被广泛地采用。
本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
采用普通32.768kHz晶振。
DS1302是DALLAS公司推出的涓细流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1.RES复位;2.I/O数据线;3.SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
SCLK始终是输入端。
如图7所示。
图7DS1302引脚图
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。
DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。
位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。
“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
2.DS1302的控制字节
DS1302的控制字如表3所示。
控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出
表3DS1302的控制字格式表
3.数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7,如下图8所示。
图8DS1302读/写时序图
4.DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表4。
表4DS1302的日历、时间寄存器表
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
四、软件设计
(一)主程序
系统主程序首先对系统进行初始化,包括设置定时器、中断和端口;然后显示开机画面。
由于单片机没有停止指令,所以可以设计系统程序不断地循环执行上述显示效果。
见图9。
图9系统流程图
(二)时间显示程序
我们采用了时钟芯片DS1302,所以只需从DS1302各寄存器中读出小时、分钟、秒,再处理即可。
在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读取数据,过处理后,送给显示缓冲单元如图10。
图10时间显示程序图
(三)时间调整程序设计
调整时间用3个调整按钮,1个做为移位控制用,另外两个做为加减用,分别定义控制按钮、加按钮、减按钮。
在调整时间过程中,要调整的那位与别的位应该有区别,所以增加了闪烁功能,即调整的那位一直在闪烁直到调整下一位。
闪烁原理就是让要调整的那一位,每隔一定时间熄灭一次,比如说50MS。
利用定时器计时,当达到50MS溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束,此时送正常显示值给该位,再进入下一位调整闪烁程序,时间调整程序程序流程图如图11。
图11时间调整程序程序流程图
(四)读取温度子程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次,流程图如图12。
图12DS18B20温度计主程序流程图
读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图13。
图13读出温度子程序流程图
(五)温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750毫秒,在本程序设计中采用1秒显示程序延时法等待转换的完成。
(六)计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图14。
图14计算温度子程序流程图
(七)显示数据刷新子程序
显示数据刷新子程序主要时对显示缓冲器中的显示数据进行刷新操作,当最高显示位为零时将符号显示位移入下一位。
程序流程图如图15。
(八)温度数据的计算处理方法
从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。
因为DS18B20的转换精度为9-12位可选的,为了提高精度采用12位。
在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。
下表就是二进制和十进制的近似对应关系表。
表5小数部分二进制和十进制的近似对应关系表
小数部分二进制值
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
十进制值
0
0
1
1
2
3
3
4
5
5
6
6
7
8
8
9
(九)温度值存储子程序
根据要求,系统要存储某几个时间点的温度,在时钟到达这几个时间点时,通过软件判断,把此时的温度数据读到单片机内存,再通过24C16的读写程序把温度数据存储到24C16对应地址单元,这样温度数据就储存起来了。
程序流程图见附录二。
(十)查询子程序
根据实际要求将某一天某一个时间的具体温度值可进行查看,以及当天温度的最高、最低温度(可查询10天)。
通过按钮确定要显示第几天的温度值,把温度值读到单片机内存,发命令给24C16的读写程序,查找对应的地址单元,把地址单元内容读取出来。
程序流程图见附录二查询子程序流程图。
五、测试方法
(一)测试仪器
万用表、温度计、51系列仿真器
(二)硬件调试
时钟温度计的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。
1.硬件调试时,可先检查印制板及焊接的质量是否符合要求,有无虚焊点及线路间有无短路、断路。
然后用万用表测试或通电检测,检查无误后,可通电检查LCD液晶显示器亮度情况,一般情况下取背光电压为4~5.5V即可得到满意的效果。
2.DS1302与单片机相连的只有3根线,很容易检查,主要检查DS1302管脚与晶振、电源是否连接好。
3.DS18B20在测温程序设计中,向DS18B20发温度命令转换后,程序要等待DS18B20的返回信号,一旦线路不好或断线,将陷入死循环,所以线路一定要检查清楚。
(三)软件调试
LCD时钟温度计是多功能的数字型,可以看当前日期,时间,还有温度的仪器。
电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中主要遇到的问题如下:
⒈烧入程序后,LED数码管显示闪动,而且亮度不均匀。
解决:
首先对调用的延时进行逐渐修改,可以解决显示闪动问题。
其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在反回时屏蔽掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。
⒉加入温度的程序后,进行修改时间、日期时相应的数码管位没有按要求闪动。
解决:
由于DS18B20是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,当把万年历的程序相接入时,会对延时有很大的影响。
所以在调用温度子程序时,先关闭定时器1中断允许,在温度子程序反回时再打开定时器1中断允许。
最终解决了此问题。
软件调试是在MedWin编译器下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试。
子程序调试包括:
DS1302的计时和读写程序、显示程序;
AT24C16读写程序;
DS18B20读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序。
本系统需用微机的“超级终端”进行控制。
调试单片机系统前,先将微机的超级终端的波特率设为19200,通信口设在COM1,数据位设在8,奇偶校验位设为无,停止位设为1,流量控制设为无。
然后进行烧入单片机。
(四)测试结果分析
1.由于采用了DS1302作为计时器使用,其计时精度相对来说比较高。
用制作的成品与万年历计时比较,基本没有误差。
2.由于DS18B20的误差指标在0.1oC以内,在一般场合完全适用。
3.根据实验要求记录并显示某些时间的温度值及一天当中的最高、最低温度。
经测试,AT24C16能存储十天内的所有要求的数据。
(五)测试结论
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固,对自己的动手能力有了极大的帮助。
六、总结与体会
在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。
较好的完成了作品。
达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。
相互学习、相互讨论、研究。
完了最初的设想。
在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。
反而达到事半功倍的效果。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手