时间温度设计说明书副本.docx
- 文档编号:9132654
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:41
- 大小:320.99KB
时间温度设计说明书副本.docx
《时间温度设计说明书副本.docx》由会员分享,可在线阅读,更多相关《时间温度设计说明书副本.docx(41页珍藏版)》请在冰豆网上搜索。
时间温度设计说明书副本
作品名称:
时间温湿度传感器显示器
设计说明书
制作人:
TBL
学号:
1219053109
指导老师:
欧亚军
前言
冬天已经来临,每天的温度也开始有所变化,类似长沙这种大城市,温度的巨变实在让人有点不知所措,拥有一个温度显示提醒器是有一定必要的,南方的冬天是比较干燥的,随着人们的生活水平的不断提高,人们对室内的温湿度有了一定的要求,如果能做一个简易的小型的电子产品来提示人们室内的温度和湿度的曲线变化,这样就能方便我们日常的生活起居,于是,我开始设计了这个简易的时间温湿度传感显示仪,他不仅能显示年月日,还能告知我们室内温度以及湿度的变化,方便我们更好的生活。
制作前的准备
元器件的认知以及原理的简介
1.温湿度传感器
温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。
湿敏元件是最简单的湿度传感器。
湿敏元件主要有电阻式、电容式两大类。
基本原理
湿敏元件是最简单的湿度传感器。
湿敏元件主要有电阻式、电容式两大类。
湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。
湿敏电容一般是用高分子薄膜电容制成的,常用的高分子材料有聚苯乙烯、聚酰亚胺、酪酸醋酸纤维等。
当环境湿度发生改变时,湿敏电容的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对湿度成正比。
DHT11数字温湿度传感器
相关资料以及程序编写事例请点击
是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。
产品为4针单排引脚封装,连接方便。
DHT11数字温湿度传感器
接线图
引脚说明
pin
名称
注释
1
VDD
供电3-5.5VDC
2
DATA
串行数据,单总线
3
NC
空脚,请悬空
4
GND
接地,电源负极
C51单片机的介绍
·8位CPU·4kbytes程序存储器(ROM)(52为8K)
·128bytes的数据存储器(RAM)(52有256bytes的RAM)
·32条I/O口线·111条指令,大部分为单字节指令
·21个专用寄存器
·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能·双列直插40PinDIP封装
·单一+5V电源供电
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出
T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最佳振荡频率为6M—12M。
1602LCD的介绍
一、关于LCD1602:
详细理解请点击
在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点。
1.管脚:
1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:
RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
2.操作时序:
RS
R/W
操作说明
0
0
写入指令码D0~D7
0
1
读取输出的D0~D7状态字
1
0
写入数据D0~D7
1
1
从D0~D7读取数据
注:
关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.
读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;
所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)
3.指令集:
LCD_1602初始化指令小结:
0x38 设置16*2显示,5*7点阵,8位数据接口
0x01 清屏
0x0F 开显示,显示光标,光标闪烁
0x08 只开显示
0x0e 开显示,显示光标,光标不闪烁
0x0c 开显示,不显示光标
0x06 地址加1,当写入数据的时候光标右移
0x02 地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变
0x18 光标和显示一起向左移动
4.显示地址:
LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:
时序图1602手册中有,这里不引用了。
时序图很重要,编程就是根据时序图设置寄存器,让LCD工作。
二、LCD1602程序编写流程:
LCD1602在了解完以上信息后便可以编写,这里我们把程序分为以下几步:
1.定义LCD1602管脚,包括RS,R/W,E。
这里定义是指这些管脚分别接在单片机哪些I/O口上。
现举例如下:
sbitEN=P3^4;
sbitRS=P3^5;
sbitRW=P3^6;
2.显示初始化,在这一步进行初始化及设置显示模式等操作,包括以下步骤:
设置显示方式
延时
清理显示缓存
设置显示模式
通常推荐的初始化过程如下:
延时15ms
写指令38H
延时5ms
写指令38H
延时5ms
写指令38H
延时5ms
注:
以上写38H指令可以看情况省略1~2步
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令38H
写指令08H关闭显示
写指令01H显示清屏
写指令06H光标移动设置
写指令0cH显示开及光标设置
3.设置显示地址(写显示字符的位置)。
4.写显示字符的数据。
温湿度显示系统原理图
软件设计部分简介
#include
#include
#include"1602.h"
#include"ds1302.h"
unsignedcharstr1[6];
unsignedcharstr2[6];
unsignedcharcodedis1[]={"TRHRH:
"};
unsignedcharcodedis2[]={"TRHT:
"};
sbitTRH=P2^1;//温湿度传感器DHT11数据接入
ucharTH_data,TL_data,RH_data,RL_data,CK_data;
ucharTH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
ucharcom_data,untemp,temp;
ucharrespond,q=2;
/*********************************************************************************/
/*********************************************************************************/
//毫秒级延时子程序
/*********************************************************************************/
voiddelay_ms(unsignedcharms)
{
unsignedchari;
while(ms--)
{
for(i=0;i<150;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*********************************************************************************/
/*********************************************************************************/
//5us级延时程序
/*********************************************************************************/
voiddelay_us()
{
uchari;
i--;
i--;
i--;
i--;
i--;
i--;
}
/****************************************************************************/
//收发信号检测,数据读取
/****************************************************************************/
charreceive()
{
uchari;
com_data=0;
for(i=0;i<=7;i++)
{
respond=2;
while((!
TRH)&&respond++);
delay_us();
delay_us();
delay_us();
if(TRH)
{
temp=1;
respond=2;
while((TRH)&&respond++);
}
else
temp=0;
com_data<<=1;
com_data|=temp;
}
return(com_data);
}
/****************************************************************************/
/****************************************************************************/
//湿度读取子程序
//温度高8位==TL_data
//温度低8位==TH_data
//湿度高8位==RH_data
//湿度低8位==RH_data
//校验8位==CK_data
//调用的程序有delay();,Delay_5us();,RECEIVE();
/***************************************************************************/
voidread_TRH()
{
//主机拉低18ms
TRH=0;
delay_ms(18);
TRH=1;
//DATA总线由上拉电阻拉高主机延时20us
delay_us();
delay_us();
delay_us();
delay_us();
//delay_us();
//delay_us();delay_us();delay_us();delay_us();
//主机设为输入判断从机响应信号
TRH=1;
//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!
TRH)
{
respond=2;//判断DHT11发出80us的低电平响应信号是否结束
while((!
TRH)&&respond++);
respond=2;//判断从机是否发出80us的高电平,如发出则进入数据接收状态
while(TRH&&respond++);//数据接收状态
RH_temp=receive();
RL_temp=receive();
TH_temp=receive();
TL_temp=receive();
CK_temp=receive();
TRH=1;//数据校验
untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
if(untemp==CK_temp)
{
RH_data=RH_temp;
RL_data=RL_temp;
TH_data=TH_temp;
TL_data=TL_temp;
CK_data=CK_temp;
}
}
//湿度整数部分
str1[0]=(0X30+RH_data/10);
str1[1]=(0X30+RH_data%10);
str1[2]='.';//小数点
//湿度小数部分
str1[3]=(0X30+RL_data/10);
str1[4]='%';//"H"
str1[5]='';//"%"
//温度整数部分
str2[0]=(0X30+TH_data/10);
str2[1]=(0X30+TH_data%10);
str2[2]='.';//小数点
//温度小数部分
str2[3]=(0X30+TL_data/10);
str2[4]=0X27;//"'"
str2[5]='C';//0X43;//"C"
}
//voidshijian()
//{
//unsignedchari,n=0x40,m;
//m=0x00;
//for(i=0;i<17;i++)
//{
//lcd_dis_pos(m);
//lcd_wdata(dis3[i]);
//m++;
//}
//m=0x40;
//for(i=0;i<17;i++)
//{
//lcd_dis_pos(m);
//lcd_wdata(dis4[i]);
//m++;
//}
//}
voidwenshidu()
{
unsignedchari,n=0x40,m;
read_TRH();//写字符
for(i=0;i<=7;i++)
{
lcd_dis_pos(i);//显示字符
lcd_wdata(dis1[i]);
lcd_dis_pos(n+i);//显示字符
lcd_wdata(dis2[i]);
}//写湿度数据
m=0x08;
for(i=0;i<6;i++)
{
lcd_dis_pos(m);
lcd_wdata(str1[i]);
m++;
}
//写温度数据
m=0x48;
for(i=0;i<6;i++)
{
lcd_dis_pos(m);
lcd_wdata(str2[i]);
m++;
}
delay_ms(100);//延时
}
voidkeyscan()
{
if(key1==0)
{
delay_ms(5);
if(key1==0)
{
q++;
lcd_wcmd(0x01);//清除LCD
lcd_wcmd(0x08);
delay_ms(5);
}
while(!
key1);
}
}
/****************************************************************************/
//主函数
//TH,TL,RH,RL分别代表温湿度的整数和小数部分
/****************************************************************************/
voidmain()
{
lcd_init();
delay_us();
while
(1)
{
keyscan();
if(q%2==0)
{
shijian();
}
if(q%2==1)
{
wenshidu();
}
}
}
ifndef__1602_H__
#define__1602_H__
typedefunsignedcharuchar;
typedefunsignedintunint;
sbitLCD_RS=P2^7;
sbitLCD_RW=P2^6;
sbitLCD_EN=P2^5;
/*********************************************************************************/
//毫秒级延时子程序
/*********************************************************************************/
voiddelay_m(unsignedcharms)
{
unsignedchari;
while(ms--)
{
for(i=0;i<150;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*********************************************************************************/
voiddelayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/********************************************************************************/
/********************************************************************************/
//测试LCD忙碌状态
//lcd_busy()为1时,忙,等待。
lcd_busy()为0时,闲,可写指令与数据。
/********************************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
/*******************************************************************************/
/*******************************************************************************/
//写入指令数据到LCD
/*******************************************************************************/
voidlcd_wcmd(unsignedcharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*****************************************************************************/
/*****************************************************************************/
//写显示数据到LCD
//RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。
/*****************************************************************************/
voidlcd_wdata(unsignedchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/****************************************************************************/
/****************************************************************************/
//LCD初始化设定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间温度设计说明书 副本 时间 温度 设计 说明书