dht11+1602程序dht11+1602程序
#include
#include
typedef unsigned char uchar;
typedef unsigned int unint;
unsigned char str1[]={""};
unsigned char str2[]={""};
unsigned char code dis1[] = {"TRH RH: "}; unsigned char code dis2[] = {"TRH T: "}; sbit TRH = P0^1;//温湿度传感器DH...
dht11+1602程序
#include
#include
typedef unsigned char uchar;
typedef unsigned int unint;
unsigned char str1[]={""};
unsigned char str2[]={""};
unsigned char code dis1[] = {"TRH RH: "}; unsigned char code dis2[] = {"TRH T: "}; sbit TRH = P0^1;//温湿度传感器DHT11数据接入
sbit LCD_RS = P0^7;
sbit LCD_RW = P0^6;
sbit LCD_EN = P0^5;
uchar TH_data,TL_data,RH_data,RL_data,CK_data; uchar TH_temp,TL_temp,RH_temp,RL_temp,CK_temp; uchar com_data,untemp,temp;
uchar respond;
/*******************************************************************************
**/
void delayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*******************************************************************************
**/
/*******************************************************************************
**/
// 毫秒级延时子程序
/*******************************************************************************
**/
void delay_ms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 150; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************************
**/
/*******************************************************************************
**/
//5us级延时程序
/*******************************************************************************
**/
void delay_us()
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/*******************************************************************************
*/
/*******************************************************************************
*/
// 测试LCD忙碌状态
//lcd_busy()为1时,忙,等待。lcd_busy()为0时,闲,可写指令与数据。
/*******************************************************************************
*/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************************
/
/*******************************************************************************/
// 写入指令数据到LCD
/*******************************************************************************/
void lcd_wcmd(unsigned char cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P2 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*****************************************************************************/
/*****************************************************************************/ //写显示数据到LCD
//RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。
/*****************************************************************************/ void lcd_wdata(unsigned char dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P2 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/****************************************************************************/
/****************************************************************************/ //LCD初始化设定
/****************************************************************************/ void lcd_init()
{
delay_ms(15);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay_ms(5);
lcd_wcmd(0x38);
delay_ms(5);
lcd_wcmd(0x38);
delay_ms(5);
lcd_wcmd(0x0c); //显示开,关光标
delay_ms(5);
lcd_wcmd(0x06); //移动光标
delay_ms(5);
//lcd_wcmd(0x01); //清除LCD的显示内容,如果屏幕过暗,可将这俩句删除
//delay_ms(5);
}
/****************************************************************************/
/****************************************************************************/
//设定LCD显示位置
/****************************************************************************/
void lcd_dis_pos(unsigned char pos) {
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
/****************************************************************************/
/****************************************************************************/
//收发信号检测,数据读取
/****************************************************************************/
char receive()
{
uchar i;
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(); /***************************************************************************/
void read_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] = (char)(0X30+RH_data/10); str1[1] = (char)(0X30+RH_data%10); str1[2] = 0x2e; //小数点
//湿度小数部分
str1[3] = (char)(0X30+RL_data/10); str1[5] = 0X25; //"%"
str1[6] = 0X52; //"R"
str1[7] = 0X48; //"H"
//温度整数部分
str2[0] = (char)(0X30+TH_data/10); str2[1] = (char)(0X30+TH_data%10); str2[2] = 0x2e; //小数点
//温度小数部分
str2[3] = (char)(0X30+TL_data/10); str2[5] = 0X27; //"'"
str2[6] = 0X43; //"C"
}
/****************************************************************************/
//主函数
//TH,TL,RH,RL分别代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
温湿度的整数和小数部分
/****************************************************************************/
void main()
{
unsigned char i,n=0x40,m;
lcd_init();
delay_us();
while(1)
{
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<=7;i++)
{
lcd_dis_pos(m);
lcd_wdata(str1[i]);
m++;
}
//写温度数据
m=0x48;
for(i=0;i<=7;i++)
{
lcd_dis_pos(m);
lcd_wdata(str2[i]);
m++;
}
delay_ms(100) ;//延时
}
}
本文档为【dht11+1602程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。