DHT90与LCD1602的温湿度显示.pdf
- 文档编号:14656894
- 上传时间:2023-06-25
- 格式:PDF
- 页数:9
- 大小:88.35KB
DHT90与LCD1602的温湿度显示.pdf
《DHT90与LCD1602的温湿度显示.pdf》由会员分享,可在线阅读,更多相关《DHT90与LCD1602的温湿度显示.pdf(9页珍藏版)》请在冰点文库上搜索。
C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53/*;功能说明:
DHT90与LCD1602的温湿度显示;文件名称:
dht90-07.c;微处理器:
AT89S52;编译环境:
KeiluVisionV2.38a;作者:
HuangYanxiang;版权:
(c)HuangYanxiang;创建日期:
2008.08.15;版本:
V1.2;修改日期:
2008.08.26;修改说明:
添加了一个LCD_disp_str()函数,修改了延时函数的注释。
(感谢ouravr的网友wyb4993的提醒)/*定义接口*P0-DB0DB7(LCD1602)P2.0-RS(LCD1602)P2.1-RW(LCD1602)P2.2-E(LCD1602)P2.6-SCK(DHT90)P2.7-DATA(DHT90)/*/#include#include#include/Keillibrary#include/Keillibrary/*/*第一部分LCD1602设置START*#defineLCD_DBP0sbitLCD_RS=P20;/P20是p2.0的意思sbitLCD_RW=P21;/P21是p2.1的意思sbitLCD_E=P22;/P22是p2.2的意思/*/*定义函数*/#defineucharunsignedchar#defineuintunsignedintvoidLCD_init(void);/初始化函数voidLCD_write_command(ucharcommand);/写指令函数voidLCD_write_data(uchardat);/写数据函数voidLCD_disp_char(ucharx,uchary,uchardat);/在某个屏幕位置上显示一个字符,X(0-15),y(1-2)voidLCD_disp_str(ucharx,uchary,uchar*str);/LCD1602显示字符串函数voiddelay_n10us(uintn);/延时函数/*;模块名称:
LCD_init();功能:
初始化LCD1602;占用资源:
-;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-1-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53/*/voidLCD_init(void)delay_n10us(10);LCD_write_command(0x38);/设置8位格式,2行,5x7delay_n10us(10);LCD_write_command(0x0c);/整体显示,关光标,不闪烁delay_n10us(10);LCD_write_command(0x06);/设定输入方式,增量不移位delay_n10us(10);LCD_write_command(0x01);/清除屏幕显示delay_n10us(100);/延时清屏,延时函数,延时约n个10us/*;模块名称:
LCD_write_command();功能:
LCD1602写指令函数;占用资源:
P2.0-RS(LCD_RS),P2.1-RW(LCD_RW),P2.2-E(LCD_E).;参数说明:
dat为写命令参数;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voidLCD_write_command(uchardat)delay_n10us(10);LCD_RS=0;/指令LCD_RW=0;/写入LCD_E=1;/允许LCD_DB=dat;delay_n10us(10);/实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
LCD_E=0;delay_n10us(10);/实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
/*;模块名称:
LCD_write_data();功能:
LCD1602写数据函数;占用资源:
P2.0-RS(LCD_RS),P2.1-RW(LCD_RW),P2.2-E(LCD_E).;参数说明:
dat为写数据参数;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voidLCD_write_data(uchardat)delay_n10us(10);LCD_RS=1;/数据LCD_RW=0;/写入LCD_E=1;/允许LCD_DB=dat;delay_n10us(10);-2-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53LCD_E=0;delay_n10us(10);/*;模块名称:
LCD_disp_char();功能:
LCD1602显示一个字符函数,在某个屏幕位置上显示一个字符,X(0-15),y(1-2)。
;占用资源:
-;参数说明:
X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),dat为所要显示字符对应的地址参数。
;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voidLCD_disp_char(ucharx,uchary,uchardat)ucharaddress;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/*;模块名称:
LCD_disp_str();功能:
LCD1602显示字符串函数,在某个屏幕起始位置X(0-15),y(1-2)上显示一个字符串。
;占用资源:
-;参数说明:
X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),str为所要显示字符串对应的指针参数。
;创建日期:
2008.08.16;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voidLCD_disp_str(ucharx,uchary,uchar*str)ucharaddress;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);while(*str!
=0)LCD_write_data(*str);str+;/*;模块名称:
delay_n10us();功能:
延时函数,延时约n个10us-3-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53;占用资源:
-;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.1(函数版本FunctionVersion);修改日期:
2008.08.26;修改说明:
修改为较精确的延时函数,_nop_()延时1us12M晶振/*/voiddelay_n10us(uintn)/延时n个10us12M晶振uinti;for(i=n;i0;i-)_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*/*第一部分LCD1602设置END*/*第二部分DHT90设置START*sbitSCK=P26;/定义通讯时钟端口sbitDATA=P27;/定义通讯数据端口typedefunionunsignedinti;/定义了两个共用体floatf;value;enumTEMP,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();功能:
启动传输函数;占用资源:
-4-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voids_transstart(void)/generatesatransmissionstart/__/DATA:
|_|/__/SCK:
_|_|_DATA=1;SCK=0;/Initialstate_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;/*;模块名称:
s_connectionreset();功能:
连接复位函数;占用资源:
-;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/voids_connectionreset(void)/communicationreset:
DATA-line=1andatleast9SCKcyclesfollowedbytransstart/__/DATA:
|_|/___________/SCK:
_|_|_|_|_|_|_|_|_|_|_|_unsignedchari;DATA=1;SCK=0;/Initialstatefor(i=0;i0;i/=2)/shiftbitformaskingif(i&value)DATA=1;/maskingvaluewithi,writetoSENSI-BUSelseDATA=0;SCK=1;/clkforSENSI-BUS_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;DATA=1;/releaseDATA-lineSCK=1;/clk#9forackerror=DATA;/checkack(DATAwillbepulleddownbyDHT90),DATA在第9个上升沿将被DHT90自动下拉为低电平。
_nop_();_nop_();_nop_();SCK=0;DATA=1;/releaseDATA-linereturnerror;/error=1incaseofnoacknowledge/返回:
0成功,1失败/*;模块名称:
s_read_byte();功能:
DHT90读函数;占用资源:
-;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/chars_read_byte(unsignedcharack)/readsabyteformtheSensibusandgivesanacknowledgeincaseofack=1unsignedchari,val=0;DATA=1;/releaseDATA-linefor(i=0x80;i0;i/=2)/shiftbitformasking-6-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53SCK=1;/clkforSENSI-BUSif(DATA)val=(val|i);/readbit_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;if(ack=1)DATA=0;/incaseofack=1pulldownDATA-LineelseDATA=1;/如果是校验(ack=0),读取完后结束通讯_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=1;/clk#9forack_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;_nop_();_nop_();_nop_();/pulswithapprox.3usDATA=1;/releaseDATA-linereturnval;/*;模块名称:
s_measure();功能:
测量温湿度函数;占用资源:
-;参数说明:
-;创建日期:
2008.08.15;版本:
FV1.0(函数版本FunctionVersion);修改日期:
-;修改说明:
-/*/chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)/makesameasurement(humidity/temperature)withchecksumunsignederror=0;unsignedinti;s_transstart();/transmissionstartswitch(mode)/sendcommandtosensorcaseTEMP:
error+=s_write_byte(MEASURE_TEMP);break;caseHUMI:
error+=s_write_byte(MEASURE_HUMI);break;default:
break;for(i=0;i100)rh_true=100;/cutifthevalueisoutsideofif(rh_true0.1)rh_true=0.1;/thephysicalpossiblerange*p_temperature=t_C;/returntemperatureC*p_humidity=rh_true;/returnhumidity%RH/*/*第二部分DHT90设置END*/*主函数*voidmain(void)valuehumi_val,temp_val;unsignedcharerror,checksum;unsignedintwendu,shidu;LCD_init();s_connectionreset();LCD_disp_str(0,1,TE);LCD_disp_str(0,2,RH);/*初始化温度显示区*LCD_disp_str(2,1,TTT.TC);/*初始化湿度显示区*LCD_disp_str(2,2,RRR.R%);-8-C:
DocumentsandSettingsAdministrator桌面桌面完整完整DHT90与与LCD1602的温湿度显示源程序的温湿度显示源程序DHT90与与LCD1602的温湿度显示的温湿度显示.c2012年年5月月21日日12:
53delay_n10us(20000);/延时0.2swhile
(1)error=0;error+=s_measure(unsignedchar*)&humi_val.i,&checksum,HUMI);/measurehumidityerror+=s_measure(unsignedchar*)&temp_val.i,&checksum,TEMP);/measuretemperatureif(error!
=0)s_connectionreset();/incaseofanerror:
connectionresetelsehumi_val.f=(float)humi_val.i;/convertsintegertofloattemp_val.f=(float)temp_val.i;/convertsintegertofloatcalc_dht90(&humi_val.f,&temp_val.f);/calculatehumidity,temperaturewendu=10*temp_val.f;LCD_disp_char(2,1,wendu/1000+0);/显示温度百位LCD_disp_char(3,1,(wendu%1000)/100+0);/显示温度十位LCD_disp_char(4,1,(wendu%100)/10+0);/显示温度个位LCD_disp_char(6,1,(wendu%10)+0);/显示温度小数点后第一位shidu=10*humi_val.f;LCD_disp_char(2,2,shidu/1000+0);/显示湿度百位LCD_disp_char(3,2,(shidu%1000)/100+0);/显示湿度十位LCD_disp_char(4,2,(shidu%100)/10+0);/显示湿度个位LCD_disp_char(6,2,(shidu%10)+0);/显示湿度小数点后第一位/-waitapprox.0.8stoavoidheatingupSHTxx-delay_n10us(80000);/延时约0.8s/*/-9-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DHT90 LCD1602 温湿度 显示