基于单片机的温度计及万年历设计.docx
- 文档编号:28398494
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:47
- 大小:388.28KB
基于单片机的温度计及万年历设计.docx
《基于单片机的温度计及万年历设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度计及万年历设计.docx(47页珍藏版)》请在冰豆网上搜索。
基于单片机的温度计及万年历设计
基于单片机的温度计及万年历设计
摘要:
本系统是一个基于单片机AT89C52的液晶温度计的设计,用来测量环境温度,测量范围为-55-+125度。
设计系统分为4部分:
单片机控制、温度传感器、液晶显示、以及监测系统,实现了温度测量的功能。
整个设计是以AT89C52为核心,通过温度传感器DS18B20来实现环境温度的采集和A/D转换,构成了一个带温度显示的电子万年历。
单片机把采集到的温度进行相应的转换后,使之能够方便地在液晶上输出。
LCD采用的是LCD12864,它具有功耗低、体积小、显示内容丰富、超薄轻巧,加入了汉字库,可现实八千多个中文汉字的优点,应用越来越广泛。
整个设计的重点在于编程,因为其外围电路相对比较简单,实现容易。
在本论文中附带了软件实现的流程图以及部分子程序以及各种硬件电路图。
关键词:
STC89C52单片机TB1602温度传感器LCD12864液晶显示器
1 引言:
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机STC89C52,测温传感器使用DS18B20,同时把数据显示到液晶显示屏上。
2 方案论证:
2.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2.2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
3结果与讨论
3.1AT89C52介绍
3.1.1单片机主控电路的主要元件是AT89c51,其外型如图
AT89c51是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89c51提供了高性价比的解决方案。
AT89c51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89c51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89c52与AT89c5相比较最大的优点是片内含8kbytes的可反复擦写的只读程序存储器(PEROM).且内部各部件之前性能进一步得到强化。
3.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口也可作为AT89c51的一些特殊功能口,如下表所示:
口管脚备选功能
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口同时为闪烁编程和编程校验接收一些控制信号。
ST:
复位输入。
当振荡器复位器件时,要保持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:
来自反向振荡器的输出
3.2单总线温度传感器DS18B20简介
3.2.1DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统
3.2.2DS18B20外形及引脚说明
外形及引脚如图2所示:
图2管脚排列图
在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:
1(GND):
地
2(DQ):
单线运用的数据输入输出引脚
3(VDD):
可选的电源引脚
3.2.3DS18B20工作过程及时序
DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。
在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。
这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。
温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。
测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。
DS18B20测量温度时使用特有的温度测量技术。
DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。
当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。
芯片内部还有斜率累加器,可对频率的非线性度加以补偿。
测量结果存入温度寄存器中。
一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。
DS18B20工作过程一般遵循以下协议:
初始化——ROM操作命令——存储器操作命令——处理数据
①初始化
单总线上的所有处理均从初始化序列开始。
初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。
存在脉冲让总线控制器知道DS1820在总线上且已准备好操作。
②ROM操作命令
一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。
所有ROM操作命令均为8位长。
这些命令列表如下:
ReadROM(读ROM)[33h]
此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。
此命令只能在总线上仅有一个DS18B20的情况下可以使用。
如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。
MatchROM(符合ROM)[55h]
此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。
只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。
所有与64位ROM序列不符的从片将等待复位脉冲。
此命令在总线上有单个或多个器件的情况下均可使用。
SkipROM(跳过ROM)[CCh]
在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。
如果在总线上存在多于一个的从属器件而且在SkipROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。
SearchROM(搜索ROM)[F0h]
当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。
搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
AlarmSearch(告警搜索)[ECh]
此命令的流程与搜索ROM命令相同。
但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。
告警的条件定义为温度高于TH或低于TL。
只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。
贮存在EEPROM内的触发器值用于告警。
③存储器操作命令
WriteScratchpad(写暂存存储器)[4Eh]
这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。
接下来写入的两个字节将被存到暂存器中的地址位置2和3。
可以在任何时刻发出复位命令来中止写入。
ReadScratchpad(读暂存存储器)[BEh]
这个命令读取暂存器的内容。
读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。
如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
CopyScratchpad(复制暂存存储器)[48h]
这条命令把暂存器的内容拷贝到DS18B20的E2存储器里,即把温度报警触发字节存入非易失性存储器里。
如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个“0”,如果拷贝结束的话,DS18B20则输出“1”。
如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。
ConvertT(温度变换)[44h]
这条命令启动一次温度转换而无需其他数据。
温度转换命令被执行,而后DS18B20保持等待状态。
如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。
如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。
RecallE2(重新调整E2)[B8h]
这条命令把贮存在E2中温度触发器的值重新调至暂存存储器。
这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。
在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:
“0”=忙,“1”=准备就绪。
ReadPowerSupply(读电源)[B4h]
对于在此命令发送至DS18B20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:
“0”=寄生电源供电,“1”=外部电源供电。
④处理数据
DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
图3高速暂存存储器分配图
温度/0C
二进制表示
十六进制表示
符号位(5位)
数据位(11位)
+125
00000
1
1
1
1
1
0
1
0
0
0
0
07D0H
+25.0625
00000
0
0
1
1
0
0
1
0
0
0
1
0191H
+10.125
00000
0
0
0
1
0
1
0
0
0
1
0
00A2H
+0.5
00000
0
0
0
0
0
0
0
1
0
0
0
0008H
0
00000
0
0
0
0
0
0
0
0
0
0
0
0000H
-0.5
11111
1
1
1
1
1
1
1
1
0
0
0
FFF8H
-10.125
11111
1
1
1
0
1
0
1
1
1
1
0
FF5EH
-25.625
11111
1
1
0
0
1
1
0
1
1
1
1
FE6FH
-55
11111
1
0
0
1
0
0
1
0
0
0
0
FC90H
DS18B20温度数据表
上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
温度转换计算方法举例:
例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:
实际温度=07D0H╳0.0625=2000╳0.0625=1250C。
例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:
实际温度=370H╳0.0625=880╳0.0625=550C。
时序:
主机使用时间隙(timeslots)来读写DSl820的数据位和写命令字的位
(1)初始化
时序见图2.25-2主机总线t0时刻发送一复位脉冲(最短为480us的低电平信号)接着在tl时刻释放总线并进入接收状态等待15-60us接着在DSl820检测到总线的上升沿之后DS1820在t2时刻发出存在脉冲(低电平持续60-240us)如图中虚线所示。
(2)写时间隙
当主机总线t0时刻从高拉至低电平时就产生写时间隙见图2图2.25-图2.5-4从to时刻开始15us之内应将所需写的位送到总线上,间对总线DSl820在t0后15-60us采样若低电平写入的位是0见图2.25-3若高电平写入的位是1见图2.25-4连续写2位间的间隙应大于1us。
(3)读时间隙
见图2.25-5主机总线to时刻从高拉至低电平时总线只须保持低电平l7ts之后在t1时刻将总线拉高产生读时间隙读时间隙在t1时刻后t2时刻前有效tz距to为15捍s也就是说并在to后的60fzs一120fzs内释放总线tz时刻前主机必须完成读位读位子程序(读得的位到C中)。
3.3显示电路
3.3.1基本特点
1、液晶显示屏是以若干个58或511点阵块组成的显示字符群。
每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。
2、主控制驱动电路为HD44780(HITACHI)及其他公司全兼容电路,如SED1278(SEIKOEPSON)、KS0066(SAMSUNG)、NJU6408(NERJAPANRADIO)。
3、具有字符发生器ROM可显示192种字符(160个57点阵字符和32个510点阵字符,见附录一)
4、具有64个字节的自定义字符RAM,可自定义8个58点阵字符或四个511点阵字符。
5、具有80个字节的RAM。
6、标准的接口特性,适配M6800系列MPU的操作时序。
7、模块结构紧凑、轻巧、装配容易。
8、单+5V电源供电。
9、低功耗、长寿命、高可靠性
3.3.2HY系列接口特性及时序
(1)写操作(MPU至HD44780)
项目
符号
最小值
最大值
单位
使能周期
tcycE
1000
-
ns
使能脉冲宽度
Pweh
450
-
ns
使能升、降时间
Ter,Tef
-
25
ns
地址建立时间
Tas
140
-
ns
地址保持时间
Tah
10
-
ns
数据建立时间
Tdsw
195
-
ns
数据保持时间
Th
10
-
ns
(2)读操作(MPU至HD44780)
项目
符号
最小值
最大值
单位
使能周期
tcycE
1000
-
ns
使能脉冲宽度
Pweh
450
-
ns
使能升、降时间
Ter,Tef
-
25
ns
地址建立时间
Tas
140
-
ns
地址保持时间
Tah
10
-
ns
数据延迟时间
Tddr
-
320
ns
数据保持时间
Tdhr
10
-
ns
(3)信号真值表
RS
R/W
E
功能
0
0
下降沿
写指令代码
0
1
高电平
读忙标志和AC码
1
0
下降沿
写数据
1
1
高电平
读数据
3.3.2接口引脚功能
引脚号
符号
状态
功能
1
Vss
电源地
2
Vdd
+5V逻辑电源
3
V0
液晶驱动电源
4
RS
输入
寄存器选择1:
数据;0:
指令
5
R/W
输入
读、写操作选择1:
读;0:
写
6
E
输入
使能信号
7
DB0
三态
数据总线(LSB)
8
DB1
三态
数.据总线
9
DB2
三态
数据总线
10
DB3
三态
数据总线
11
DB4
三态
数据总线
12
DB5
三态
数据总线
13
DB6
三态
数据总线
14
DB7
三态
数据总线(MSB)
15
LEDA
输入
背光+5V
16
LEDK
输入
背光地
注:
15、16两管脚用于带背光模块,不带背光的模块这两个管脚悬空不接。
3HY系列电特性
(1)绝对最大值范围
项目
符号
最小值
最大值
备注
电路逻辑电压
Vdd-Vss
0
7.0V
液晶驱动电压
Vdd-V0
0
13.5V
输入电压
VI
Vss
Vdd
工作温度
0
-20
-30
+50
+70
+80
常温型
宽温型
超宽温型
存储温度
-10
-30
-40
+60
+80
+80
常温型
宽温型
超宽温型
(2)电特性
项目
符号
条件
MIN
TYP
MAX
单位
输入高电压
VIH
2.2
-
-
V
输入低电压
VIL
-
-
0.6
V
输出高电压
VOH
IOH=0.2mA
2.4
-
-
V
输出低电压
VOL
IOL=1.2mA
-
-
0.4
V
电源电流
IDD
-
0.5
0.2
mA
3.4.1万年历功能述说
整个电子时钟系统电路可分为六大部分:
中央处理单元(CPU)、驱动部分、工作指示、传送与判忙部分、显示部分、调时校时部分。
本设计采用Atmel公司的AT89C2051单片机,是以C语言程序设计为基础设计的一个用LCD液晶显示年、月、日、时、分、秒并可以实现校时功能的时钟。
CPU对整个系统进行控制,它将定时数据输出到LCD,实现时间的显示,当输入5V电压后,CPU内部程序开始运行,通过单片机及驱动电路的驱动功能,显示部分显示为:
LCD液晶显示的初始状态是2009年10月20日00:
00:
00由此状态开始走时,“秒”位满60,“秒”位清0,“分”加1;“分”位满60,“分”位清0,“时”位加1;“时”位满24
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度计 万年历 设计