您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > C51-温湿度传感器DHT11驱动-LCD1602显示程序
DHT11.c文件#includereg52.h#includeTime_Delay.h//themainonlyneedstocallgetDHT11(),thenthetemperatureandhuminitywasgetedinF16T,F16RHasfloatsbitbit11=P2^0;unsignedcharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;floatF16T,F16RH;//用于最终读取的温湿度数据//read8bitsonicecharCOM(void){chari,U8temp,U8comdata;for(i=0;i8;i++){while(!bit11);//表示读取的高电位延时大于20多us则读取的是1否则读取的是0Delay_us(35);//通过U8FLAG可判断bit11显示数据的脉长U8temp=0;if(bit11)U8temp=1;while(bit11);U8comdata=1;U8comdata|=U8temp;//0}//rofreturnU8comdata;}//--------------------------------//-----温湿度读取子程序------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位==U8T_data_H------//----温度低8位==U8T_data_L------//----湿度高8位==U8RH_data_H-----//----湿度低8位==U8RH_data_L-----//----校验8位==U8checkdata-----//----调用相关子程序如下----------//----Delay();,Delay_10us();,COM();//--------------------------------voidgetDHT11(void){//主机拉低18msGO1:bit11=0;Delay_ms(20);bit11=1;//总线由上拉电阻拉高主机延时20usDelay_us(60);//主机设为输入判断从机响应信号//bit11=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!bit11)//T!{while(!bit11);//waitDHTgotohighwhile(bit11);//数据接收状态U8RH_data_H=COM();U8RH_data_L=COM();U8T_data_H=COM();U8T_data_L=COM();U8checkdata=COM();bit11=1;//数据校验if((U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata)//ifcheckwrong,readagaingotoGO1;}//fiF16T=U8T_data_H+(float)U8T_data_L/256;//changeintegertofloatF16RH=U8RH_data_H+(float)U8RH_data_L/256;}LCD1602文件#includereg52.h#includestdio.h#includeINTRINS.H#includeLcd_1602.h#includeTime_Delay.h#defineLCD_DATAP0//LCD1602datatransferdefine#defineuintunsignedint#defineucharunsignedchar/*只由主函数调用的有Init_Lcd()LCD_write_str(ucharX,ucharY,uchar*s)LCD_value(unsignedcharx,unsignedchary,floatf)*/sbitLCD_RS=P2^5;//1602controldefinesbitRW=P2^6;sbitLCD_E=P2^7;/***************************************************************************#defineLCD_SCREEN_ON0x0C//显示开#defineLCD_SCREEN_OFF0x08//显示关#defineLCD_CURSOR_ON0x0A//显示光标#defineLCD_CURSOR_OFF0x0c//无光标#defineLCD_C_FLASH_ON0x0f//有光标,光标闪动#defineLCD_C_FLASH_OFF0x0e//有光标,光标不闪动//进入模式设置指令#defineLCD_AC_UP0x06//新数据后光标右移#defineLCD_AC_DOWN0x04//新数据后光标左移#defineLCD_S_MOVE_ON0x05//画面可平移#defineLCD_S_MOVE_OFF0x04//画面不可平移//设定显示屏或光标移动方向指令#defineLCD_C_LEFT0x10//光标左移1格,且AC值减1#defineLCD_C_RIGHT0x11//光标右移1格,且AC值加1#defineLCD_CHAR_LEFT0x18//显示器上字符全部左移一格,但光标不动#defineLCD_CHAR_RIGHT0x1C//显示器上字符全部右移一格,但光标不动***************************************************************************///注有主函数调用的函数都已作说明其他函数一般不由主函数调用/*****************************************************************************名称:Init_Lcd()主函数调用*功能:Lcd初始化*入口参数:无*出口参数:无*范例:在主函数中直接调用****************************************************************************/voidInit_Lcd()//LCD初始化{LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x38,0);Delay_ms(1);LCD_write_char(0x0c,0);Delay_ms(1);LCD_write_char(0x06,0);Delay_ms(1);LCD_write_char(0x0c,0);Delay_ms(1);//}/*****************************************************************************名称:LCD_write_str(ucharX,ucharY,uchar*s)主函数调用*功能:在指定地址写一个字符串eg:Y=0,1,2,3,4,5,6,7,8,9,10...15。X=0,1。*入口参数:X:横坐标Y:纵坐标*s:字符串首地址*出口参数:无*范例:LCD_write_str(1,1,uchar*s)****************************************************************************/voidLCD_write_str(unsignedcharX,unsignedcharY,unsignedchar*s){LCD_write_char(0,'');LCD_set_xy(X,Y);//写地址while(*s)//写显示字符{LCD_write_char(0,*s);s++;}}/*****************************************************************************名称:LCD_set_xy(ucharx,uchary)theopticsignflash?*功能:指定一个地址*入口参数:X:横坐标Y:纵坐标*出口参数:无*范例:LCD_set_xy(5,1)*************CD_set_xy***************************************************************/voidLCD_set_xy(ucharx,uchary)//写地址函数{unsignedcharaddress;if(y==0)address=0x80+x;elseaddress=0xc0+x;LCD_write_char(address,0);}/*****************************************************************************名称:LCD_en_write(void)*功能:液晶使能*入口参数:无*出口参数:无*范例:直接调用*************CD_set_xy***************************************************************/voidLCD_en_write(void)//液晶使能{_nop_();LCD_E=1;//EN=1_nop_();LCD_E=0;//EN=0}//------------------------------------------------/*****************************************************************************名称:LCD_write_char(ucharcd,ucharab)*功能:写指令或数据当写ab时应使cd=0当cd不为0则写cd且ab的赋值无效*入口参数:cd:指令内容ab:数据内容指令常量已在上面定义但一般不用*出口参数:无*范例:LCD_write_char(0,‘f’)*************CD_set_xy***************************************************************/voidLCD_write_char(ucharcd,ucharab)//写数据{Delay_us(20);if(cd==0){LCD_RS=1;//RS=1,写显示内容LCD_byte(ab);}else{LCD_RS=0;//RS=0,写命令LCD_byte(cd);}}/*****************************************************************************名称:LCD_byte(abc);*功能:写一个字符到orcalledonebytetoLCD中*入口参数:*出口参数:无*************CD_set_xy***************************************************************/voidLCD_byte(unsignedcharabc){RW=0;LCD_E=0;LCD_DATA=abc;LCD_en_write();}//在液晶中显示浮点数函数LCD_value(unsignedcharx,unsignedchary,floatf){unsignedcharstr[15];//不能定义为char*str,数组长度一定要大于浮点数的总位数sprintf(str,%.1f,f);//1表示小数位数小数太多自动四舍五入LCD_write_str(x,y,str);return0;}主函数文件#incl
本文标题:C51-温湿度传感器DHT11驱动-LCD1602显示程序
链接地址:https://www.777doc.com/doc-5427115 .html