基于51单片机SHT11温湿度传感器检测程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于51单片机SHT11温湿度传感器检测程序(含电路图)下面是原理图:下面是SHT11与MCU连接的典型电路:下面是源代码:#includereg52.h#includeintrins.h/********************************************************宏定义********************************************************/#defineuintunsignedint#defineucharunsignedchar#definenoACK0#defineACK1#defineSTATUS_REG_W0x06#defineSTATUS_REG_R0x07#defineMEASURE_TEMP0x03#defineMEASURE_HUMI0x05#defineRESET0x1eenum{TEMP,HUMI};typedefunion//定义共用同类型{unsignedinti;floatf;}value;/********************************************************位定义********************************************************/sbitlcdrs=P2^0;sbitlcdrw=P2^1;sbitlcden=P2^2;sbitSCK=P1^0;sbitDATA=P1^1;/********************************************************变量定义********************************************************/uchartable2[]=SHT11温湿度检测;uchartable3[]=温度为:℃;uchartable4[]=湿度为:;uchartable5[]=.;ucharwendu[6];ucharshidu[6];/********************************************************1ms延时函数********************************************************/voiddelay(intz){intx,y;for(x=z;x0;x--)for(y=125;y0;y--);}/********************************************************50us延时函数********************************************************/voiddelay_50us(uintt){uintj;for(;t0;t--)for(j=19;j0;j--);}/********************************************************50ms延时函数********************************************************/voiddelay_50ms(uintt){uintj;for(;t0;t--)for(j=6245;j0;j--);}/********************************************************12864液晶写指令********************************************************/voidwrite_12864com(ucharcom){lcdrs=0;delay_50us(1);P0=com;lcden=1;delay_50us(10);lcden=0;delay_50us(2);}/********************************************************12864液晶写数据********************************************************/voidwrite_dat(uchardat){lcdrs=1;lcdrw=0;delay_50us(1);P0=dat;lcden=1;delay_50us(10);lcden=0;delay_50us(2);}/********************************************************12864液晶初始化********************************************************/voidinit12864lcd(void){delay_50ms(2);write_12864com(0x30);delay_50us(4);write_12864com(0x30);delay_50us(4);write_12864com(0x0f);delay_50us(4);write_12864com(0x01);delay_50us(240);write_12864com(0x06);delay_50us(10);write_12864com(0x0c);delay_50us(10);}/********************************************************12864液晶显示函数********************************************************/voiddisplay1(void){uchari;write_12864com(0x80);for(i=0;i18;i++){write_dat(table2[i]);delay_50us(1);}}/********************************************************12864液晶显示函数********************************************************/voiddisplay2(void){uchari;write_12864com(0x90);for(i=0;i18;i++){write_dat(table3[i]);delay_50us(1);}}/********************************************************12864液晶显示函数********************************************************/voiddisplay3(void){uchari;write_12864com(0x88);for(i=0;i8;i++){write_dat(table4[i]);delay_50us(1);}}/********************************************************12864液晶显示函数********************************************************/voiddisplaywendu(void){uchari;write_12864com(0x94);for(i=0;i3;i++){write_dat(wendu[i]);delay_50us(1);}for(i=0;i1;i++){write_dat(table5[i]);delay_50us(1);}for(i=4;i5;i++){write_dat(wendu[i]);delay_50us(1);}}/********************************************************12864液晶显示函数********************************************************/voiddisplayshidu(void){uchari;write_12864com(0x8C);for(i=0;i3;i++){write_dat(shidu[i]);delay_50us(1);}for(i=0;i1;i++){write_dat(table5[i]);delay_50us(1);}for(i=4;i5;i++){write_dat(shidu[i]);delay_50us(1);}}/********************************************************SHT11写字节程序********************************************************/chars_write_byte(unsignedcharvalue){unsignedchari,error=0;for(i=0x80;i0;i=1)//高位为1,循环右移{if(i&value)DATA=1;//和要发送的数相与,结果为发送的位elseDATA=0;SCK=1;_nop_();_nop_();_nop_();//延时3usSCK=0;}DATA=1;//释放数据线SCK=1;error=DATA;//检查应答信号,确认通讯正常_nop_();_nop_();_nop_();SCK=0;DATA=1;returnerror;//error=1通讯错误}/********************************************************SHT11读字节程序********************************************************/chars_read_byte(unsignedcharack){unsignedchari,val=0;DATA=1;//释放数据线for(i=0x80;i0;i=1)//高位为1,循环右移{SCK=1;if(DATA)val=(val|i);//读一位数据线的值SCK=0;}DATA=!ack;//如果是校验,读取完后结束通讯;SCK=1;_nop_();_nop_();_nop_();//延时3usSCK=0;_nop_();_nop_();_nop_();DATA=1;//释放数据线returnval;}/********************************************************SHT11启动传输********************************************************/voids_transstart(void){DATA=1;SCK=0;//准备_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;}/********************************************************SHT11连接复位********************************************************/voids_connectionreset(void){unsignedchari;DATA=1;SCK=0;//准备for(i=0;i9;i++)//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位{SCK=1;SCK=0;}s_transstart();//启动传输}/*************************************************

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功