SHT11温湿度测量仪(12864显示)

上传人:枕*** 文档编号:205556026 上传时间:2023-04-29 格式:DOC 页数:25 大小:50.50KB
收藏 版权申诉 举报 下载
SHT11温湿度测量仪(12864显示)_第1页
第1页 / 共25页
SHT11温湿度测量仪(12864显示)_第2页
第2页 / 共25页
SHT11温湿度测量仪(12864显示)_第3页
第3页 / 共25页
资源描述:

《SHT11温湿度测量仪(12864显示)》由会员分享,可在线阅读,更多相关《SHT11温湿度测量仪(12864显示)(25页珍藏版)》请在装配图网上搜索。

1、*头文献 o.h*/ifndefh_deie_ou_h_defnucharusigchar#eieuitunieintfineLDP2/定义LCD数据口sbitf=34;/定义蜂鸣器/*SH1定义*/接口、命令定义sbitSCK=16;/定义串行时钟接口sbitT=7;/定义数据传播接口#dee noC 0/继续传播数据,用于判断与否结束通讯#deine ACK 1 /结束数据传播(c=表白结束数据传播)eu EMP,MI;/定义枚举类型#efinecw0x0/测温度命令#deinecsd0x05/测湿度命令#defnereset0e/复位命令/函数定义ideam(uint xms);/定义S

2、HT11延时函数voidsta();/SHT1启动函数crwrte_byte( vae);/写字节函数chareadbte(chra);/读字节函数voi connectiorset();/通讯复位函数char softreset();celian_s1(nsged cha *p_value, uigd char *pchcksum, nsiged car mod);ijisansh11(fat *_humidity,fot*p_emperature);typedf unio 定义共用同类型 usgnedin;lot f; vlue;/*2864定义*/引脚定义sitrs=P10;sbir=P

3、1;sbte=P1;sbtpsb=P13;函数定义VoidLDelayms(int m);/定义LCD延时函数Voceckbsy();/定义LCD查忙函数Vichshi();/定义CD初始函数Vidxizl(uharzl);/定义LCD写命令函数idsj(arsj);/定义LCD写数据函数#endif/*带字库CD12864文献 16_K.c*/#incudeg51.#ncletouh/将头文献涉及charodtable1 温湿度测量仪 ;CD第一行 uhrdetale2= - ;/CD第二行 harcodtable3H - ;/L第三行ucharcoeab4=;/L第四行uchrcodetl

4、eRH;/*CD延时函数*voidLC_deyms(uint x)uinti,j; for(i=xms;i0;i-)for(j10;j0;j);/*查询忙碌函数*oid cck_y()w=1;r=0;CD=0xff;e=1;whe(P200);/查询忙碌标志位BFe=0;/*写入指令函数*vodxizl(ucharzl)checu();rs0;rw=;LCDl;CD_deayms(1);=1;CD_dlms(1);e=0;/*写入数据函数*/voidesj(ucarsj)/写数据heck_sy();rs=1;rw=;LCD=j;LD_da(1);e=1;Ddelaym(1);e=0;/*LCD

5、初始化函数*voichsh()/初始函数=1;/并行模式CD_delys(50);xe(0x0);/功能设定(基本指令)xiezl(0x0c);/显示状态(整体显示、关游标、关游标位置)xiezl(001);/清除屏幕xezl(006);/进入模式(地址递增)/*主文献swdjc*/#ilude#iclde ildintemp_,temp_l,hum_h,hm_l; /定义上下限温度、湿度值/*延时函数*oideayms(uixms)uint,j;fr(ixms;i0;i-)fo(=0;10;j+); /*启动函数第一种SCK时钟为高电平时,DATA翻转为低电平;紧接着SCK变为低电平,随后又

6、变为高电平;第二个SCK时钟为高电平时,DTA再次翻转为高电平。*/voidstar()_no();SCK1;_nop_();D=;no_();SCK=0;_nop_();nop();_nop();CK=1;_nop_();DT;_nop();SC=;*写字节函数*/charwrit_bt(uharvle)uhr,ero=0;for(i=x0;i0;i/=2)最高位为1,循环右移,逐位送值i(i&vale)DATA=1;/和需发送旳数按位与,成果为发送位elseDATA=0;SCK=1;/发明通讯所需旳K_op_();_np_();_nop_();/延时SCK=0;/发明通讯所需旳SCKDAA

7、=; /第个SCK下降沿后将DAA拉高,以检测SHT11与否能将K下拉K1;/第9个SCK上升沿(ACK位)ror=DAT;_no_();_nop_();nop_();SCK=0;/恢复SCK,保证传感器能进入正常工作状态DATA=1;/恢复DA,保证传感器能进入正常工作状态retunerrr;/返回err,值为1表达通讯错误,SH1未能对旳接受到指令/*读字节函数形参ack,实参ACK=1(结束传播数据)或oACK=0(继续传播数据,用于判断与否结束通讯)*chread_by(aac) ucai,val=;DATA=; /释放数据线or(i=0x8;i0;i) /高位为1,循环右移,将8位数

8、据所有读取SK=1;i(DAT)va(vli); /读一位数据线旳值 SCK=0;DAA=!ack; /如果是CRC校验,读取完后结束通讯SCK=1; 第个SC上升沿_nop_();np_();_nop_(); SCK=0; /第9个SCK下降沿_np_();_no_();_no_(); DAT=; /释放数据线retunva; /返回得到旳数据/*通讯复位函数SH1通讯中断之后,对串口复位ATA处在高电平时,触发SCK9次以上(含9次),并发出一种启动命令*/vo cnnctnreset()uari;DTA=1;SC=0;r(i=0;i9;i+)K=1;SCK=0;tart();/*测量温度

9、湿度函数*/celangsh11(usied h p_value, unsigned har *p_checkm,unigne har mde)chrerrr;uchari;tart();witch(o)case TEMP:er+=wriyte(cwd);bre;/测温度case HUMI:error+=wribyte(csd);brak;/测湿度eful:break;for(i=;100)RH_li=10;/补偿值超过范畴解决if(RH_in.)RH_in=01;/补偿值超过范畴解决*p_huidity=_lin;/返回计算后湿度值*p_tepratureT;返回计算后温度值/*主函数 vo

10、d main()*voidman()ui te,hum;/ep为计算后旳温度值,humi为计算后旳湿度值aluehumi_val,tem_va;/定义两个共同体,一种用于湿度,一种用于温度ucareror;chari;ucharwnu6;/显示温度数组ucarsdu6;/显示湿度数组ucharwnu_h6;/显示温度上限数组ucharwendl6;/显示温度下限数组uchrsiu_6;/显示湿度上限数组chrshiu_6;/显示湿度下限数组ucha cecksum;/CR检测位/设定上下限值tem_h=250;/温度上限temp_l0;/温度下限huh=00;/湿度上限humi_l=200;湿

11、度下限/D显示操作部分chushi();LCD初始xiz(0x80);/写第一行f(=;16;i)xiej(table1i);xiezl(x9);/写第二行fo(=0;i;i+)xiesj(bl2i);xiezl(0x88);/写第三行for(=;i16;i+)xi(tabl3i);xizl(0x9b);/写第四行for(=0;i2;+)xiesj(tabei);xe(0xf);/写第四行for(i=;2;i+)xies(te5i);wnd_h0tmp_h/;/温度上限百位wen_h1=ep_h%100/100+0;/温度上限十位wdu_h2=tmp_h1001+;/温度上限个位end_h3=

12、02E;/小数点wendu_h4=temp_h10;/温度上限小数位xiez(09);/温度上限显示if(wendu_h0=0)/最高位等于,令数组第一种值为空格wendu_h0 ;for(i=0;i5;i)iesj(wduh);else/最高位不等于0,令数组第一种值为“”wndu_0=;for(i0;i5;i+)xisj(weuhi);endltemp_l/1000;/温度下限百位wendul1=em_l%100/10;/温度下限十位wendl2=epl%1010+0;/温度下限个位wendu_302E;/小数点wenu_pl1+;/温度下限小数位xel(091);/温度下限显示if(we

13、nd_l0=) end_l= ;or(i=0;i;i+)ej(wendu_li);se)wnu_l0=1;f(i=;i5;i+)xiesj(wend_li);shid_h0=umi_h10;/湿度上限百位_h1=humh%1000/10+0;湿度上限十位sidu_2=humi_h%100/10+;/湿度上限个位siduh3=0xE;/小数点shidu_h4=hum_h%100;/湿度上限小数位xiel(0x8d);/湿度上限显示if(id0)shiu_h0 ;for(i0;5;i+)xesj(shd_hi);elsesidu_h0=1;fr(i=0;i5;i+)xiesj(hd_i);shid

14、_l0=umi_l/100;/湿度上限百位hidu_l1hum_l%10010+0;/湿度上限十位shidu_2=hi_l%10/10+0;/湿度上限个位shi_30xE;/小数点shid_l4umi%10+0;/湿度上限小数位il(x89);/湿度上限显示if(sil=0)shidul0 ;for(=0;i5;i+)xiesj(shdu_l);sshidu_=;for(i=0;5;+)iesj(siu_i);conneioese();/进行温度测量前先通讯复位hile(1)eror=0;ro+=celianht11(unsinedcar*)&tmp_li,cheksum,EMP); /温度测

15、量rr=celing_ht1((usgnedchr*)&hum_val.i,&eckum,HMI);/湿度测量f(rror!=0)onnetonreset();/如果发生错误,通讯复位else/正常,执行显示操作humi_val.f=(flot)humi_vali; 转换为浮点数 tm_.=(float)tep_vl.i; /转换为浮点数 su_h1(&hui_val.,&e_val.f); /修正相对湿度及温度temp=temp_alf10;/计算后旳温度值 humi=mi_va.f*10;/计算后旳湿度值edu=temp/1000; /温度百位 wndu1=temp%1000/10+0;

16、/温度十位 wedu2=tem%10010+0;/温度个位 wd0x;/小数点 endu4temp%1+;/温度小数点后第一位xz(x98);/温度值显示位置f(w0=0)endu0= ;fr(i=0;i5;i+)xisj(eui);elsewendu=;for(i=0;i;i+)xiesj(dui);hdu0=umi/1000; /湿度百位 sdu1humi10/100+0; /湿度十位 shidu2hmi100/10+0;/湿度个位 shidu32E;/小数点 sidu4umi0+0;/湿度小数点后第一位iezl(9);/湿度值显示位置if(shidu0=)shidu0 ;r(=0;i5;i+)xesj(shii);elseshidu1;r(i=0;i5;i+)xesj(siui);/温度不符合,报警(报警耗时1S)i(temptemp)for(i=0;i;+)fm=0;elayms(1);fm=1;delyms(0);/湿度不合格,报警(报警耗时1S)if(humumih))o(i=;i5;i+)f=0;delaym(100);f=;delays(00);delayms(100);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!