云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于单片机的温湿度传感器课程设计

基于单片机的温湿度传感器课程设计

  • 62 次阅读
  • 3 次下载
  • 2025/5/31 0:45:24

页 共 21 页 桂林电子科技大学课程设计(论文)报告用纸 第 21 第18页共23

}

void Display_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符 { unsigned char i; LCD_set_XY(row*6, page);// 列,页 for(i=0; i<12;i++) { LCD_write_byte(hanzi[c*24+i],1); }

LCD_set_XY(row*6, page+1);// 列,页 for(i=12; i<24;i++) { LCD_write_byte(hanzi[c*24+i],1); } }

//温湿度传感器部分程序如下:

/*-----------------------------------------------------------*/ //延时函数

void Delay_1ms(unsigned int ms) { unsigned int x, y; for(x = ms; x > 0; x--) { for(y = 124; y > 0; y--); } }

void DHT11_Delay_10us(void) { unsigned char i; i--; i--; i--; i--; i--; i--; }

/* 读一个字节的数据*/

桂林电子科技大学课程设计(论文)报告用纸

第第 22 19 页页 共共 22 23 页

unsigned char DHT11_ReadValue(void)

{ unsigned char count, value = 0, i; status = OK; //设定标志为正常状态 for(i = 8; i > 0; i--) //高位在先 { value <<= 1; count = 0; while(dht11 == 0 && count++ < NUMBER); //每一位数据前会有一个 50us 的低电平时间. 等待50us 低电平结束 if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; //函数执行过程发生错误就退出函数 } DHT11_Delay_10us(); //26-28us的高电平表示该位是 0, 为70us 高电平表该位 1 DHT11_Delay_10us(); DHT11_Delay_10us(); if(dht11 != 0) //延时30us 后检测数据线是否还是高电平 { value++; //进入这里表示该位是 1 while(dht11 != 0 && count++ < NUMBER) //等待剩余(约40us)的高电平结束 { dht11 = 1; } if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; } } }

return (value); }

// 读温度和湿度函数,读一次的数据, 共五字节,读出成功函数返回OK, 错误返回ERROR

unsigned char DHT11_ReadTempAndHumi(void) { unsigned char i = 0, check_value = 0,count = 0; dht11 = 0; //拉低数据线大于 18ms发送开始信号

页 共 23 页 桂林电子科技大学课程设计(论文)报告用纸 第 23 第20页共23

Delay_1ms(20); // 需大于 18 毫秒

dht11 = 1; //释放数据线, 用于检测低电平的应答信号 DHT11_Delay_10us(); //延时20-40us,等待一段时间后检测应答信号, 应答信号是从机拉低数据线80us DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us();

if(dht11 != 0) // 检测应答信号, 应答信号是低电平 { return ERROR; //没应答信号 }

else //有应答信号 { while(dht11 == 0 && count++ < NUMBER); // 等待应答信号结束 if(count >= NUMBER) //检测计数器是否超过了设定的范围 { dht11 = 1; return ERROR; //读数据出错, 退出函数 } count = 0; dht11 = 1; //释放数据线 while(dht11 != 0 && count++ < NUMBER); //应答信号后会有一个 80us 的高电平,等待高电平结束 if(count >= NUMBER) { dht11 = 1; return ERROR; //退出函数 } for(i = 0; i < SIZE; i++) //读出湿. 温度值 { value_array[i] = DHT11_ReadValue(); if(i != SIZE - 1) //读出的最后一个值是校验值不需加上去 { check_value += value_array[i]; //读出的五字节数据中的前四字节数据和等于第五字节数据表示成功 } } //end for if(check_value == value_array[SIZE - 1]) //在没用发生函数调用失败时进行校验 { dht11 = 1; return OK; //正确的读出 dht11输出的数据

桂林电子科技大学课程设计(论文)报告用纸

第 24 21 页 共 24 23 页

}

} }

void Display_5110(unsigned char value,unsigned char h,unsigned char l) { unsigned char s,g; s=value/10; g=value; Display_zimu(h,l,s) ; Display_zimu(h+1,l,g) ;

}

void main() { unsigned char i; res=0; delay_us(100); res=1; LCD_init(); //初始化LCD模块 LCD_clear(); //清屏幕 Display_hanzi(0,2,6) ; //显示 温度: . ℃ Display_hanzi(2,2,8) ; Display_zimu(4,2,10) ; Display_zimu(8,2,11) ; Display_hanzi(10,2,15) ; Display_hanzi(0,4,7) ; //显示 湿度: . % Display_hanzi(2,4,8) ; Display_zimu(4,4,10) ; Display_zimu(8,4,11) ; Display_hanzi(10,4,16) ; Display_zimu(12,4,13) ; Display_zimu(13,4,14) ; while(1) { DHT11_ReadTempAndHumi(); Display_5110( value_array[0], 6, 4); // Display_5110( value_array[1], 9, 4); Display_5110( value_array[2], 6, 2); // Display_5110( value_array[3], 9, 2); Delay_1ms(500);

搜索更多关于: 基于单片机的温湿度传感器课程设计 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

页 共 21 页 桂林电子科技大学课程设计(论文)报告用纸 第 21 第18页共23 } void Display_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符 { unsigned char i; LCD_set_XY(row*6, page);// 列,页 for(i=0; i<12;i++) { LCD_write_byte(hanzi[c*24+i],1); } LCD_set_XY(row*6, page+1);// 列,页 for(i=12; i<24;i++)

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com