AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx

上传人:b****3 文档编号:7159474 上传时间:2023-05-08 格式:DOCX 页数:15 大小:18.36KB
下载 相关 举报
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第1页
第1页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第2页
第2页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第3页
第3页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第4页
第4页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第5页
第5页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第6页
第6页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第7页
第7页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第8页
第8页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第9页
第9页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第10页
第10页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第11页
第11页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第12页
第12页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第13页
第13页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第14页
第14页 / 共15页
AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx

《AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。

AT89C52与SHT10和1602液晶测温湿度的程序Word文档下载推荐.docx

//向LCD写入命令或数据************************************************************

#defineLCD_COMMAND0//Command

#defineLCD_DATA1//Data

#defineLCD_CLEAR_SCREEN0x01//清屏

#defineLCD_HOMING0x02//光标返回原点

//设置显示模式************************************************************

#defineLCD_SHOW0x04//显示开

#defineLCD_HIDE0x00//显示关

#defineLCD_CURSOR0x02//显示光标

#defineLCD_NO_CURSOR0x00//无光标

#defineLCD_FLASH0x01//光标闪动

#defineLCD_NO_FLASH0x00//光标不闪动

//设置输入模式************************************************************

#defineLCD_AC_UP0x02

#defineLCD_AC_DOWN0x00//default

#defineLCD_MOVE0x01//画面可平移

#defineLCD_NO_MOVE0x00//default

unsignedcharLCD_Wait(void);

voidLCD_Write(bitstyle,unsignedcharinput);

/***********1602液晶显示部分子程序****************/

voiddelay(uintz)

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voidLCD_Write(bitstyle,unsignedcharinput)

LcdRs=style;

P0=input;

delay(5);

LcdEn=1;

LcdEn=0;

voidLCD_SetDisplay(unsignedcharDisplayMode)

LCD_Write(LCD_COMMAND,0x08|DisplayMode);

voidLCD_SetInput(unsignedcharInputMode)

LCD_Write(LCD_COMMAND,0x04|InputMode);

//初始化LCD************************************************************

voidLCD_Initial()

LCD_Write(LCD_COMMAND,0x38);

//8位数据端口,2行显示,5*7点阵

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);

//开启显示,无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);

//清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);

//AC递增,画面不动

//液晶字符输入的位置************************

voidGotoXY(unsignedcharx,unsignedchary)

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

//将字符输出到液晶显示

voidPrint(unsignedchar*str)

while(*str!

='

\0'

{

LCD_Write(LCD_DATA,*str);

str++;

}

voidzhuanhuan(floata)//浮点数转换成字符串函数

{

memset(str,0,sizeof(str));

sprintf(str,"

%f"

a);

voidwelcome()

LCD_Initial();

GotoXY(0,0);

Print("

Welcome!

"

);

GotoXY(0,1);

Codeofsht10"

delay(200);

/*--------------------------------------

;

模块名称:

delay_n10us();

功能:

延时函数,延时约n个10us

较精确的延时函数,"

_nop_()"

延时1us@12M晶振

-------------------------------------*/

voiddelay_n10us(uintn)//延时n个10us@12M晶振

uinti;

for(i=n;

i>

i--)

_nop_();

_nop_();

_nop_();

}

}

//*********************第一部分LCD1602设置END****************************************

//*********************第二部分DHT90设置START****************************************

sbitSCK=P1^0;

//定义通讯时钟端口

sbitDATA=P1^1;

//定义通讯数据端口

typedefunion

{unsignedinti;

//定义了两个共用体

floatf;

}value;

enum{TEMP,HUMI};

//TEMP=0,HUMI=1

#definenoACK0//用于判断是否结束通讯

#defineACK1//结束数据传输

//adrcommandr/w

#defineSTATUS_REG_W0x06//00000110

#defineSTATUS_REG_R0x07//00000111

#defineMEASURE_TEMP0x03//00000011

#defineMEASURE_HUMI0x05//00000101

#defineRESET0x1e//00011110

/****************定义函数****************/

voids_transstart(void);

//启动传输函数

voids_connectionreset(void);

//连接复位函数

chars_write_byte(unsignedcharvalue);

//DHT90写函数

chars_read_byte(unsignedcharack);

//DHT90读函数

chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode);

//测量温湿度函数

voidcalc_dht90(float*p_humidity,float*p_temperature);

//温湿度补偿

s_transstart();

启动传输函数

-------------------------------------*/

voids_transstart(void)

//generatesatransmissionstart

//_____________

//DATA:

|_______|

//______

//SCK:

___||___||______

DATA=1;

SCK=0;

//Initialstate

_nop_();

SCK=1;

DATA=0;

s_connectionreset();

连接复位函数

voids_connectionreset(void)

//communicationreset:

DATA-line=1andatleast9SCKcyclesfollowedbytransstart

//_____________________________________________________________

//_______________

__||__||__||__||__||__||__||__||__||______||___||______

unsignedchari;

for(i=0;

i<

9;

i++)//9SCKcycles

{

}

s_transstart();

//transmissionstart

s_write_byte();

SHT10写函数

chars_write_byte(unsignedcharvalue)

//----------------------------------------------------------------------------------

//writesabyteontheSensibusandcheckstheacknowledge

unsignedchari,error=0;

for(i=0x80;

i/=2)//shiftbitformasking

if(i&

value)DATA=1;

//maskingvaluewithi,writetoSENSI-BUS

elseDATA=0;

//clkforSENSI-BUS

//pulswithapprox.3us

//releaseDATA-line

//clk#9forack

error=DATA;

//checkack(DATAwillbepulleddownbyDHT90),DATA在第9个上升沿将被DHT90自动下拉为低电平。

returnerror;

//error=1incaseofnoacknowledge//返回:

0成功,1失败

s_read_byte();

SHT10读函数

chars_read_byte(unsignedcharack)

//readsabyteformtheSensibusandgivesanacknowledgeincaseof"

ack=1"

unsignedchari,val=0;

{SCK=1;

if(DATA)val=(val|i);

//readbit

//pulswithapprox.3us

if(ack==1)DATA=0;

//incaseof"

ack==1"

pulldownDATA-Line

elseDATA=1;

//如果是校验(ack==0),读取完后结束通讯

returnval;

s_measure();

测量温湿度函数

chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)

//makesameasurement(humidity/temperature)withchecksum

unsignederror=0;

unsignedinti;

switch(mode){//sendcommandtosensor

caseTEMP:

error+=s_write_byte(MEASURE_TEMP);

break;

caseHUMI:

error+=s_write_byte(MEASURE_HUMI);

default:

for(i=0;

65535;

i++)if(DATA==0)break;

//waituntilsensorhasfinishedthemeasurement

if(DATA)error+=1;

//ortimeout(~2sec.)isreached

*(p_value)=s_read_byte(ACK);

//readthefirstbyte(MSB)

*(p_value+1)=s_read_byte(ACK);

//readthesecondbyte(LSB)

*p_checksum=s_read_byte(noACK);

//readchecksum

calc_dht90();

温湿度补偿函数

voidcalc_dht90(float*p_humidity,float*p_temperature)

//calculatestemperature[C]andhumidity[%RH]

//input:

humi[Ticks](12bit)

//temp[Ticks](14bit)

//output:

humi[%RH]

//temp[C]

{constfloatC1=-4.0;

//for12Bit

constfloatC2=+0.0405;

constfloatC3=-0.0000028;

constfloatT1=+0.01;

//for14Bit@5V

constfloatT2=+0.00008;

//for14Bit@5V

floatrh=*p_humidity;

//rh:

Humidity[Ticks]12Bit

floatt=*p_temperature;

//t:

Temperature[Ticks]14Bit

floatrh_lin;

//rh_lin:

Humiditylinear

floatrh_true;

//rh_true:

Temperaturecompensatedhumidity

floatt_C;

//t_C:

Temperature[C]

t_C=t*0.01-40;

//calc.temperaturefromticksto[C]

rh_lin=C3*rh*rh+C2*rh+C1;

//calc.humidityfromticksto[%RH]

rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;

//calc.temperaturecompensatedhumidity[%RH]

if(rh_true>

100)rh_true=100;

//cutifthevalueisoutsideof

if(rh_true<

0.1)rh_true=0.1;

//thephysicalpossiblerange

*p_temperature=t_C;

//returntemperature[C]

*p_humidity=rh_true;

//returnhumidity[%RH]

//*********主函数*****************

voidmain(void)

valuehumi_val,temp_val;

unsignedcharerror,checksum;

LcdRw=0;

s_connectionreset();

welcome();

//显示欢迎画面

delay(2000);

LCD_Initial();

while

(1)

//shezhi();

error=0;

error+=s_measure((unsignedchar*)&

humi_val.i,&

checksum,HUMI);

//measurehumidity

temp_val.i,&

checksum,TEMP);

//measuretemperature

if(error!

=0)

s_connectionreset();

//incaseofanerror:

connectionreset

else

{

humi_val.f=(float)humi_val.i;

//convertsintegertofloat

temp_val.f=(float)temp_val.i;

calc_dht90(&

humi_val.f,&

temp_val.f);

//计算湿度与温度

GotoXY(0,0);

//

Print("

Tep:

"

GotoXY(0,1);

Hum:

zhuanhuan(temp_val.f);

//转换温度为uchar方便液晶显示

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2