版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*头文件 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;/定义枚举类型#definecwd0x03/测温度命令#de
2、finecsd0x05/测湿度命令#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 mode);voidj
3、isuan_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写命令函数voidxiesj(uchar
4、sj);/定义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-);/*查询忙碌函数*/void ch
5、eck_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()/初始函数psb=1;/并行模式LC
6、D_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;/和需发送
7、的数按位与,结果为发送位elseDATA=0;SCK=1;/创造通讯所需的SCK_nop_();_nop_();_nop_();/延时SCK=0;/创造通讯所需的SCKDATA=1; /第8个SCK下降沿后将DATA拉高,以检测SHT11是否能将ACK下拉SCK=1;/第9个SCK上升沿(ACK位)error=DATA;_nop_();_nop_();_nop_();SCK=0;/恢复SCK,确保传感器能进入正常工作状态DATA=1;/恢复DATA,确保传感器能进入正常工作状态returnerror;/返回error,值为1表示通讯错误,SHT11未能正确接收到指令 /*读字节函数形参ack,
8、实参ACK=1(结束传输数据)或noACK=0(继续传输数据,用于判断是否结束通讯)*/charread_byte(ucharack) uchari,val=0;DATA=1; /释放数据线for(i=0x80;i0;i/=2) /高位为1,循环右移,将8位数据全部读取SCK=1;if(DATA)val=(val|i); /读一位数据线的值 SCK=0;DATA=!ack; /如果是CRC校验,读取完后结束通讯SCK=1; /第9个SCK上升沿_nop_();_nop_();_nop_(); SCK=0; /第9个SCK下降沿_nop_();_nop_();_nop_(); DATA=1; /
9、释放数据线returnval; /返回得到的数据 /*通讯复位函数SHT11通讯中断之后,对串口复位DATA处于高电平时,触发SCK9次以上(含9次),并发出一个启动命令*/void connectionreset()uchari;DATA=1;SCK=0;for(i=0;i9;i+)SCK=1;SCK=0;start();/*测量温度湿度函数*/celiang_sht11(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)ucharerror;uchari;start();switch(mode)cas
10、e TEMP:error+=write_byte(cwd);break;/测温度case HUMI:error+=write_byte(csd);break;/测湿度default :break;for(i=0;i100)RH_lin=100;/补偿值超出范围处理if(RH_lin0.1)RH_lin=0.1;/补偿值超出范围处理*p_humidity=RH_lin;/返回计算后湿度值*p_temperature=T;/返回计算后温度值%RH/*主函数 void main()*/voidmain()uint temp,humi;/temp为计算后的温度值,humi为计算后的湿度值valuehu
11、mi_val,temp_val;/定义两个共同体,一个用于湿度,一个用于温度ucharerror;uchari;ucharwendu6;/显示温度数组ucharshidu6;/显示湿度数组ucharwendu_h6;/显示温度上限数组ucharwendu_l6;/显示温度下限数组ucharshidu_h6;/显示湿度上限数组ucharshidu_l6;/显示湿度下限数组uchar checksum;/CRC检测位/设定上下限值temp_h=250;/温度上限temp_l=100;/温度下限humi_h=900;/湿度上限humi_l=200;/湿度下限/LCD显示操作部分chushi();/L
12、CD初始xiezl(0x80);/写第一行for(i=0;i16;i+)xiesj(table1i);xiezl(0x90);/写第二行for(i=0;i16;i+)xiesj(table2i);xiezl(0x88);/写第三行for(i=0;i16;i+)xiesj(table3i);xiezl(0x9b);/写第四行for(i=0;i2;i+)xiesj(table4i);xiezl(0x9f);/写第四行for(i=0;i2;i+)xiesj(table5i);wendu_h0=temp_h/1000;/温度上限百位wendu_h1=temp_h%1000/100+0;/温度上限十位w
13、endu_h2=temp_h%100/10+0;/温度上限个位wendu_h3=0x2E;/小数点wendu_h4=temp_h%10+0;/温度上限小数位xiezl(0x95);/温度上限显示if(wendu_h0=0)/最高位等于0,令数组第一个值为空格wendu_h0= ;for(i=0;i5;i+)xiesj(wendu_hi);else/最高位不等于0,令数组第一个值为“1”wendu_h0=1;for(i=0;i5;i+)xiesj(wendu_hi);wendu_l0=temp_l/1000;/温度下限百位wendu_l1=temp_l%1000/100+0;/温度下限十位wen
14、du_l2=temp_l%100/10+0;/温度下限个位wendu_l3=0x2E;/小数点wendu_l4=temp_l%10+0;/温度下限小数位xiezl(0x91);/温度下限显示if(wendu_l0=0) wendu_l0= ;for(i=0;i5;i+)xiesj(wendu_li);else)wendu_l0=1;for(i=0;i5;i+)xiesj(wendu_li);shidu_h0=humi_h/1000;/湿度上限百位shidu_h1=humi_h%1000/100+0;/湿度上限十位shidu_h2=humi_h%100/10+0;/湿度上限个位shidu_h3=
15、0x2E;/小数点shidu_h4=humi_h%10+0;/湿度上限小数位xiezl(0x8d);/湿度上限显示if(shidu_h0=0) shidu_h0= ;for(i=0;i5;i+)xiesj(shidu_hi);elseshidu_h0=1;for(i=0;i5;i+)xiesj(shidu_hi);shidu_l0=humi_l/1000;/湿度上限百位shidu_l1=humi_l%1000/100+0;/湿度上限十位shidu_l2=humi_l%100/10+0;/湿度上限个位shidu_l3=0x2E;/小数点shidu_l4=humi_l%10+0;/湿度上限小数位x
16、iezl(0x89);/湿度上限显示if(shidu_l0=0)shidu_l0= ;for(i=0;i5;i+)xiesj(shidu_li);elseshidu_l0=1;for(i=0;i5;i+)xiesj(shidu_li);connectionreset();/进行温度测量前先通讯复位while(1)error=0;error+=celiang_sht11(unsigned char*)&temp_val.i,&checksum,TEMP); /温度测量error+=celiang_sht11(unsigned char*)&humi_val.i,&checksum,HUMI);
17、/湿度测量if(error!=0)connectionreset();/如果发生错误,通讯复位else/正常,执行显示操作humi_val.f=(float)humi_val.i; /转换为浮点数 temp_val.f=(float)temp_val.i; /转换为浮点数 jisuan_sht11(&humi_val.f,&temp_val.f); /修正相对湿度及温度temp=temp_val.f*10;/计算后的温度值 humi=humi_val.f*10;/计算后的湿度值wendu0=temp/1000; /温度百位 wendu1=temp%1000/100+0; /温度十位 wendu
18、2=temp%100/10+0;/温度个位 wendu3=0x2E;/小数点 wendu4=temp%10+0;/温度小数点后第一位xiezl(0x98);/温度值显示位置if(wendu0=0)wendu0= ;for(i=0;i5;i+)xiesj(wendui);elsewendu0=1;for(i=0;i5;i+)xiesj(wendui);shidu0=humi/1000; /湿度百位 shidu1=humi%1000/100+0; /湿度十位 shidu2=humi%100/10+0;/湿度个位 shidu3=0x2E;/小数点 shidu4=humi%10+0;/湿度小数点后第一位x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大型电力项目工期管理实务指南
- 环保工程现场监测记录表范例
- 2025年丰县教师政治真题及答案
- 市场营销方案策划流程
- 门诊护理规范及工作流程制度
- 零售业客户关系管理系统需求文档
- 2025-2030中国环保材料生产行业市场供需分析及投资评估规划分析研究报告
- 2025-2030中国环保产业政策导向市场需求技术革新竞争发展投资规划
- 肇庆市高要区2025年社区网格工作人员考试题库及答案
- 2025-2030中国海洋能开发服务行业市场供需情况投资评估规划分析发展前景
- 高二电磁学考试题及答案
- 2025下半年贵州遵义市市直事业单位选调56人笔试考试参考题库及答案解析
- 2025鄂尔多斯达拉特旗第二批事业单位引进28名高层次、急需紧缺人才考试笔试模拟试题及答案解析
- 甲状腺癌放射性碘抵抗机制研究
- 包治祛痘合同范本
- 门窗的代理合同范本
- 2025年秋国家开放大学《思想道德与法治》终考大作业试卷一附答案【供参考】
- 20252025年(完整版)三级安全教育真题试卷含答案
- 人教版2025-2026学年八年级上册数学期末考试模拟试卷
- 挂名法人代表协议合同
- 《软件工程》机考题库
评论
0/150
提交评论