基于单片机的温湿度传感器毕业论文 联系客服

发布时间 : 星期日 文章基于单片机的温湿度传感器毕业论文更新完毕开始阅读3dc2b6b8951ea76e58fafab069dc5022aaea462a

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

摘 要

由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,

所以温湿度一体的传感器就会相应产生。 DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个IO口。操作简单,使用基亚5110二手屏幕显示DHT11传感器 读出来的温度和湿度值。

关键字:AT89S52;5110液晶;DHT11传感器;单总线

Abstract

Because of the temperature and the the actual life of people are closely related, so the temperature and DHT11 and SCM can adopt the simple single bus, only need a I\\O port. Simple operation, using the base of 5110 secondhand screen display DHT11 sensor Read out the temperature and =byte4+byte3+byte2+byte1=73(= =P2^4;

sbit sclk =P2^3; sbit dht11=P2^0;

#define OK 1 #define ERROR 0

#define NUMBER 20 #define SIZE 5

unsigned char flag=1;

unsigned char status; 存放五字节数据的数组

unsigned char value_array[SIZE]; * 可在其他的文件引用温湿度值, 实际是温度的整数的10倍;*

* 如dht11读回的温度是 26,则temp_value = 260, 湿度同理*

unsigned char k=0; unsigned int code =1;} else

{sdin=0;} dt=dt<<1; sclk=0; sclk=1; }

delay_ms(1); dc=1; sce=1; sdin=1; }

LCD_init: 3310LCD初始化 void LCD_init(void) { res=0;

delay_ms(1); res=1; LCD_write_byte(0x21,0);初始化Lcd,功能设定使用扩充指令 LCD_write_byte(0xd0,0);设定液晶偏置电压 LCD_write_byte(0x20,0);使用基本指令 LCD_write_byte(0x0C,0);设定显示模式,正常显示 }

LCD_set_XY: 设置LCD坐标函数 输入参数:X:0-83 Y:0-5

void LCD_set_XY(unsigned char X, unsigned char Y) { LCD_write_byte(0x40 | Y, 0); column LCD_write_byte(0x80 | X, 0); row }

LCD_clear: LCD清屏函数 void LCD_clear(void) { unsigned char t; unsigned char k; LCD_set_XY(0,0); for(t=0;t<6;t++) { for(k=0;k<84;k++) { LCD_write_byte(0x00,1); } } } *

LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类 输入参数:c:显示的字符; * void Display_zimu(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<6;i++) { LCD_write_byte(zimu[c*12+i],1); }

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

}

void Display_ 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发送开始信号