摘要:
本温度测量系统以AT89C51单片机为核心控制器,配合DS18B20数字温度传感器、LCD1602、蜂鸣器、LED灯进行温度的测量、显示和预警。本系统可通过按键设置温度上限值,单片机将检测到的温度信号与输入温度的上限值进行比较,由此判断是否报警。设计中还加入了DS1302时钟芯片,使系统能显示当前时间信息,液晶屏显示美观大方,经测试,系统工作稳定,达到预期目标。
一、设计要求
利用51单片机设计一个温度采集显示系统:
(1)能够实时显示当前环境的温度;
(2)显示当前时间信息;
(3)设定温度上限值,超过上限值可以报警;
(4)温度上限值可通过按键调节。
二、元件清单
- AT89C51单片机芯片*1;
- 12MHz晶振*1;
- 32768Hz晶振*1;
- DS18B20温度传感器*1;
- LCD1602液晶屏*1;
- DS1302时钟芯片*1;
- 3.6V电池组*1;
- 10K8排阻1;
- 按键*3;
- 蜂鸣器*1;
- 红色LED*1;
- 22pF瓷片电容*2;
- 10uF钽电容*1;
- 10k电阻*1;
- 1k电阻*1;
三、硬件设计
3.1 控制部分电路设计
3.1.1 主控芯片
主控芯片AT89C51,该芯片提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
引脚 | 功能 |
---|---|
P0 | P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入 |
P1 | P1口是一个内部提供上拉电阻的8位双向I/O口,P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流 |
P2 | 同 P1 口 |
P3 | P3做普通引脚时同P1和P2,也可作为AT89C51的一些特殊功能口,如下表所示。 |
部分特殊引脚 | 功能 |
---|---|
P3.0 | RXD(串行输入口) |
P3.1 | TXD(串行输出口) |
P3.2 | /INT0(外部中断0) |
P3.3 | /INT1(外部中断1) |
P3.4 | T0(计时器0外部输入) |
P3.5 | T1(计时器1外部输入) |
P3.6 | /WR(外部数据存储器写选通) |
P3.7 | /RD(外部数据存储器读选通) |
RST | 复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 |
/EA/VPP | 当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH)。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。 |
XTAL1 | 反向振荡放大器的输入及内部时钟工作电路的输入。 |
XTAL2 | 来自反向振荡器的输出。 |
VCC | 供电电压 |
GND | 接地 |
3.1.2 时钟电路
如图为本系统的时钟电路,89C51单片机的时钟信号有内部振荡和外部振荡方式,在引脚XTAL1和XTAX2外接晶体振荡器,就够成了内部振荡方式。内部振荡方式所得的时钟信号比较稳定。
3.1.3 复位电路
复位操作完成单片机片内电路的初始化,使单片机从一种确定的状态开始运行。当89C51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作,避免程序“跑飞”。
3.2温度采集部分电路设计
DS18B20单总线通信,DQ引脚连接AT89C51单片机P1.7口,加上拉电阻R5=10K,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。
管脚 | 功能 |
---|---|
GND | 接地 |
DQ | 数据读入/读出口 |
VCC | 电源 |
3.3 显示部分电路设计
选用P0口的8位作为LCD1602的8位并行数据读写口,P2.0~P2.2作为LCD1302的控制引脚。AT89C51单片机的P0口内部没有上拉电阻,所以外接10k的排阻作为上拉电阻,将不确定的信号通过一个电阻钳位在高电平。
管脚 | 功能 | 控制信息 |
---|---|---|
第4引脚 | RS为寄存器选择 | 高电平1时选择数据寄存器,低电平0时选择指令寄存器 |
第5引脚 | RW为读写信号线 | 高电平1时进行读操作,低电平0时进行写操作 |
第6引脚 | E(或EN)端为使能端 | 高电平1时读取信息,负跳变时执行指令 |
第7~14引脚 | D0~D7为8位双向数据端 | 可读可写 |
3.4 附加功能部分电路设计
3.4.1 日历部分
选用DS1302时钟芯片实现日历功能,DS1302具有涓细电流充电能力,可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
3.4.2 报警部分
使用蜂鸣器和LED灯构成报警部分,当温度值大于设定的温度上限值时,蜂鸣器间歇性鸣叫,LED灯闪烁。蜂鸣器高电平发声,低电平关闭;LED高电平点亮,低电平关闭。
3.4.3 设置温度上限值部分
使用两个独立按键实现温度上限值的设定功能,P2.3和P2.4引脚默认置为高电平,当S1按键按下时,P2.3引脚被拉为低电平,经“软件延时消抖”后若仍为低电平,则判断为按键按下,温度上限值增加1度;S2按键按下时,同理进行处理判断,温度上限值减少1度。
4.软件设计
4.1 控制部分软件设计
如图4.1所示为控制部分的软件流程图,该部分主要完成初始化、各模块功能函数的调用,实现温度和时间信息的采集、处理、显示、报警功能,完成系统整体逻辑和控制。
4.2 温度部分软件设计
图4.2.1 DS18B20温度值寄存器数据格式
图4.2.2 DS18B20配置寄存器
图4.2.3 DS18B20初始化时序图
图4.2.4 DS18B20读写时序图
4.3 显示部分软件设计
如图4.1所示为LCD1602的读写时序图,其中三个控制引脚分别为:
(1)RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为电平时,则是进行命令字节的传输操作。
(2)RW,读写选择端。当此脚为高电平可对LCD1602进行读数据操作,为低电平时进行写数据操作。
(3)E,使能信号,是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
4.3.1 读状态
输入:RS = L,RW = H,E = H;
输出:D0~D7 = 状态字;
4.3.2 写指令
输入:RS = L,RW = L,D0~D7 = 指令,E = 高脉冲;
输出:无;
4.3.3 读数据
输入:RS = H,RW = H,E = H;
输出:D0~D7 = 数据;
4.3.4 写数据
输入:RS = H,RW = L,D0~D7 = 数据,E = 高脉冲。
输出:无。