SHT11 数字式温湿度传感器的单片机程序(温度和湿度的分开写的,实质是一样的) 1、单独测温度的程序,在 TX-1C 板子上用数码管显示温度值 #include #include #include #define uchar unsigned char #define uint unsigned int sbit led1=P1^7; sbit led2=P1^6; sbit DATA=P1^1; sbit SCK=P1^0; #define noACK 0 #define ACK 1 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code table_dian[]={ 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef,0xf7,0xfc,0xb9,0xd1,0xf9,0xf1}; uchar error=0; void delayms(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } //启动时序 void transstart() { SCK=1;_nop_(); DATA=0;_nop_(); SCK=0;_nop_();_nop_();_nop_(); SCK=1;_nop_(); DATA=1;_nop_(); SCK=0; } //写入命令子函数 uchar write_byte(uchar value) { uchar i; for(i=0x80;i>0;i=i/2) { if(i&value) DATA=1; else DATA=0; SCK=1; _nop_();_nop_();_nop_(); SCK=0; } DATA=1; SCK=1; error=DATA; SCK=0; return error; } //从传感器读数据 uchar read_byte(bit ack) { uchar i,val=0; DATA=1; for(i=0x80;i>0;i=i/2) { SCK=1; if(DATA) val=val|i; SCK=0; } DATA=!ack; SCK=1; _nop_();_nop_();_nop_(); SCK=0; DATA=1; return val; } void connectionreset() { uchar i; DATA=1; SCK=0; for(i=0;i<9;i++) { SCK=1; SCK=0; } transstart(); } //测量函数,温度和湿度 uint measure() { uchar value_1,value_2; uint tempvalue; transstart(); error+=write_byte(MEASURE_TEMP); if(error!=0) connectionreset(); else { while(DATA==1) _nop_(); if(DATA==0) { value_1=read_byte(ACK); value_2=read_byte(noACK); tempvalue=value_2+value_1*256; //转换成 16 位的 ...