《SHT11温湿度测量仪(12864显示)[借鉴]》由会员分享,可在线阅读,更多相关《SHT11温湿度测量仪(12864显示)[借鉴](9页珍藏版)》请在金锄头文库上搜索。
1、word可编辑实用文档/*头文件 tou.h*/#ifndef_tou_h_#define_tou_h_#defineucharunsignedchar#defineuintunsignedint#defineLCDP2/定义LCD数据口sbitfm=P34;/定义蜂鸣器/*SHT11定义*/接口、命令定义sbitSCK=P16;/定义串行时钟接口sbitDATA=P17;/定义数据传输接口#define noACK 0/继续传输数据 ,用于判断是否结束通讯#define ACK 1 /结束数据传输(ack=1表明结束数据传输)enum TEMP,HUMI;/定义枚举类型#definecwd0
2、x03/测温度命令#definecsd0x05/测湿度命令#definereset0x1e/复位命令/函数定义voiddelayms(uint xms);/定义SHT11延时函数voidstart();/SHT11启动函数charwrite_byte(uchar value);/写字节函数charread_byte(ucharack);/读字节函数void connectionreset();/通讯复位函数char softreset();celiang_sht11(unsigned char *p_value, unsigned char *p_checksum, unsigned char
3、 mode);voidjisuan_sht11(float *p_humidity,float *p_temperature);typedef union /定义共用同类型 unsigned int i;float f; value;/*12864定义*/引脚定义sbitrs=P10;sbitrw=P11;sbite=P12;sbitpsb=P13;/函数定义VoidLCD_delayms(uint xms);/定义LCD延时函数Voidcheck_busy();/定义LCD查忙函数Voidchushi();/定义LCD初始函数Voidxiezl(ucharzl);/定义LCD写命令函数voi
4、dxiesj(ucharsj);/定义LCD写数据函数#endif/*带字库LCD12864文件 12864_ZK.c*/#include#include/将头文件包含ucharcodetable1= 温湿度测量仪 ;/LCD第一行 ucharcodetable2=T - ;/LCD第二行 ucharcodetable3=H - ;/LCD第三行ucharcodetable4=;/LCD第四行ucharcodetable5=RH;/*LCD延时函数*/voidLCD_delayms(uint xms)uinti,j; for(i=xms;i0;i-)for(j=110;j0;j-);/*查询忙
5、碌函数*/void check_busy()rw=1;rs=0;LCD=0xff;e=1;while(P2&0x80);/查询忙碌标志位BFe=0;/*写入指令函数*/voidxiezl(ucharzl)check_busy();rs=0;rw=0;LCD=zl;LCD_delayms(1);e=1;LCD_delayms(1);e=0;/*写入数据函数*/voidxiesj(ucharsj)/写数据check_busy();rs=1;rw=0;LCD=sj;LCD_delayms(1);e=1;LCD_delayms(1);e=0;/*LCD初始化函数*/voidchushi()/初始函数p
6、sb=1;/并行模式LCD_delayms(50);xiezl(0x30);/功能设定(基本指令)xiezl(0x0c);/显示状态(整体显示、关游标、关游标位置)xiezl(0x01);/清除屏幕xiezl(0x06);/进入模式(地址递增)/*主文件swdj.c*/#include#include #includeuinttemp_h,temp_l,humi_h,humi_l; /定义上下限温度、湿度值/*延时函数*/voiddelayms(uintxms)uinti,j;for(i=xms;i0;i-)for(j=0;j0;i/=2)/最高位为1 ,循环右移 ,逐位送值if(i&value)DATA=1;/和需发送的数按位与 ,结果为发送位elseDATA=0;SCK=1;/创造通讯所需的SCK_nop_();_nop_();_nop_();/延时SCK=0;/创造通讯所需的SCKDATA=1; /第8个SCK下降沿后将DATA拉高 ,以检测SHT11是否能将ACK下拉SCK=1;/第9个SCK上升沿(ACK位)error=DATA