




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于51单片机SHT11温湿度传感器检测程序(含电路图)卜面是原理图:21-43h7一AEk711舌dsfI口wfl.H.H.EE-112皿(0地!?.电EifR.M.卜面是SHT11与MC戊接的典型电路:2接口说明VdduC(master)GNDDATALSCK!_IVdd;2.4-5.5VSHT1x(slave)2典型应用电路net卜面是源代码:viewsourceprint?001.#include<reg52.h>002.#include<intrins.h>003.004*005.宏定义006.*/007.#defineuintunsignedint008.#
2、defineucharunsignedchar009.#definenoACK0010.#defineACK1011.#defineSTATUS_REG_W0x06012.#defineSTATUS_REG_R0x07013.#defineMEASURE_TEMP0x03014.#defineMEASUREHUMI0x05015.#defineRESET0x1e016.017.enumTEMP,HUMI;018.019.typedefunion/定义共用同类型020.021.unsignedinti;022.floatf;023.value;024.025.026./*027.位定义028.*
3、/029.sbitlcdrs=P2A0;030.sbitlcdrw=P2A1;031.sbitlcden=P2A2;032.sbitSCK=PW0;033.sbitDATA=PW1;034.035./*036.变量定义037.*/038.uchartable2="SHT11温湿度检测”039.uchartable3="温度为:C”;040.uchartable4="湿度为:"041.uchartable5="."042.ucharwendu6;043.ucharshidu6;044.045./*046.1ms延时函数047.*/048
4、.voiddelay(intz)049.050.intx,y;051.for(x=z;x>0;x-)052.for(y=125;y>0;y-);053.054.055./*056.50us延时函数057.*/058.voiddelay_50us(uintt)059.060.uintj;061.for(;t>0;t-)062.for(j=19;j>0;j-);063.064.065./*066.50ms延时函数067.*/068.voiddelay_50ms(uintt)069.070.uintj;071.for(;t>0;t-)072.for(j=6245;j&g
5、t;0;j-);073.074.075./*076.12864液晶写指令078.voidwrite_12864com(ucharcom)077.*/079.080.lcdrs=0;081.lcdrw=0;082.delay_50us(1);083.P0=com;084.lcden=1;085.delay_50us(10);086.lcden=0;087.delay_50us(2);088.089.090./*091.12864液晶写数据092.*/093.voidwrite_dat(uchardat)094.095.lcdrs=1;096.lcdrw=0;097.delay_50us(1);0
6、98.P0=dat;099.lcden=1;100. delay_50us(10);101. lcden=0;102. delay_50us(2);103. 104.105./*106.12864液晶初始化107.*/108.voidinit128641cd(void)109.110. delay_50ms(2);111. whte_12864com(0x30);112. delay_50us(4);113. whte_12864com(0x30);114. delay_50us(4);115. write_12864com(0x0f);116. delay_50us(4);117. whte
7、_12864com(0x01);118. delay_50us(240);119. whte_12864com(0x06);120. delay_50us(10);121. whte_12864com(0x0c);122. delay_50us(10);123. 124.125./*126.12864液晶显示函数128.voiddisplay1(void)127.*/129.130. uchari;131. write_12864com(0x80);132. for(i=0;i<18;i+)133. 134. write_dat(table2i);135. delay_50us(1);1
8、36. 137. 138.139./*140.12864液晶显示函数141.*/142.voiddisplay2(void)143.144. uchari;145. write_12864com(0x90);146. for(i=0;i<18;i+)147. 148. write_dat(table3i);149. delay_50us(1);150. 151. 152.153./*154.12864液晶显示函数155.*/156.voiddisplay3(void)157.158. uchari;159. write_12864com(0x88);160. for(i=0;i<8
9、;i+)161. 162. write_dat(table4i);163. delay_50us(1);164. 165. 166.167./*168.12864液晶显示函数170.voiddisplaywendu(void)169.*/171.172. uchari;173. write_12864com(0x94);174. for(i=0;i<3;i+)175. (176. write_dat(wendui);177. delay_50us(1);178. 179. for(i=0;i<1;i+)180. (181. write_dat(table5i);182. delay
10、_50us(1);183. 184. for(i=4;i<5;i+)185. (186. write_dat(wendui);187. delay_50us(1);188. 189. 190.191.192./*193.12864液晶显示函数194.*/195.voiddisplayshidu(void)196.(197. uchari;198. write_12864com(0x8C);199. for(i=0;i<3;i+)200. (201. write_dat(shidui);202. delay_50us(1);203. 204. for(i=0;i<1;i+)20
11、5. (206. write_dat(table5i);207. delay_50us(1);208. 209. for(i=4;i<5;i+)210. (211. write_dat(shidui);212. delay_50us(1);213. 214. 215.216./*217.SHT11写字节程序218.*/219. chars_write_byte(unsignedcharvalue)220. (221. unsignedchari,error=0;222. for(i=0x80;i>0;i>>=1)/高位为1,循环右移223. (224. if(i&
12、;value)DATA=1;和要发送的数相与,结果为发送的位225. elseDATA=0;226. SCK=1;227. _nop_();_nop_();_nop_();/延时3us228. SCK=0;229. 230. DATA=1;释放数据线231. SCK=1;232. error=DATA;/检查应答信号,确认通讯正常233. _nop_();_nop_();_nop_();234. SCK=0;235. DATA=1;236. returnerror;/error=1通讯错误237. 238.239./*240.SHT11读字节程序241.*/242. chars_read_by
13、te(unsignedcharack)243. (244. unsignedchari,val=0;245. DATA=1;释放数据线246. for(i=0x80;i>0;i>>=1)/高位为1,循环右移247. 248. SCK=1;249. if(DATA)val=(val|i);/读一位数据线的值250. SCK=0;251. 252. DATA=!ack;/如果是校验,读取完后结束通讯253. SCK=1;254. _nop_();_nop_();_nop_();/延时3us255. SCK=0;256. _nop_();_nop_();_nop_();257. D
14、ATA=1;释放数据线258. returnval;259. 260.261./*262.SHT11启动传输263.*/264.voids_transstart(void)265.(266. DATA=1;SCK=0;准备267. _nop_();268. SCK=1;269. _nop_();270. DATA=0;271. _nop_();272. SCK=0;273. _nop_();_nop_();_nop_();274. SCK=1;275. _nop_();276. DATA=1;277. _nop_();278. SCK=0;279. 280.281.282./*283.SHT1
15、1连接复位284.*/285. voids_connectionreset(void)286. (287. unsignedchari;288. DATA=1;SCK=0;准备289. for(i=0;i<9;i+)/DATA保持高,SCK寸钟触发9次,发送启动传输,通迅即复位290. (291. SCK=1;292. SCK=0;293. 294. s_transstart();/启动传输295. 296.297./*298.SHT11温湿度检测300.chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsigned
16、charmode)299.*/301.(302. unsignederror=0;303. unsignedinti;305. s_transstart();/启动传输306. switch(mode)/选择发送命令307. 308. caseTEMP:error+=s_write_byte(MEASURE_TEMP);break;/测量温度309. caseHUMI:error+=s_write_byte(MEASURE_HUMI);break;/测量湿度310. default:break;311. 312. for(i=0;i<65535;i+)if(DATA=0)break;/等
17、待测量结束313. if(DATA)error+=1;/如果长时间数据线没有拉低,说明测量错误314. *(p_value)=s_read_byte(ACK);读第一个字节,高字节(MSB)315. *(p_value+1)=s_read_byte(ACK);/读第二个字节,低字节(LSB)316. *p_checksum=s_read_byte(noACK);/readCRC校验码317. returnerror;/error=1通讯错误318. 319./*320.SHT11温湿度值标度变换及温度补偿321.*/322.voidcalc_sth10(float*p_humidity,flo
18、at*p_temperature)323.324.constfloatC1=-4.0;/12位湿度精度修正公式325.constfloatC2=+0.0405;/12位湿度精度修正公式326.constfloatC3=-0.0000028;/12位湿度精度修正公式327.constfloatT1=+0.01;/14位温度精度5V条件修正公式328.constfloatT2=+0.00008;/14位温度精度5V条件修正公式329.330.floatrh=*p_humidity;/rh:12位湿度331.floatt=*p_temperature;/t:14位温度332.floatrh_lin;
19、/rh_lin:湿度linear值333.floatrh_true;/rh_true:湿度ture值334.floatt_C;/t_C:温度C335.336. t_C=t*0.01-40;/补偿温度337. rh_lin=C3*rh*rh+C2*rh+C1;/相对湿度非线性补偿338. rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;/相对湿度对于温度依赖性补偿339. if(rh_true>100)rh_true=100;/湿度最大修正340. if(rh_true<0.1)rh_true=0.1;/湿度最小修正341.342. *p_temperature
20、=t_C;/返回温度结果343. *p_humidity=rh_true;/返回湿度结果344.345./*346.主函数347.*/348.voidmain(void)349.(350. unsignedinttemp,humi;351. valuehumi_val,temp_val;/定义两个共同体,一个用于湿度,一个用于温度352. unsignedcharerror;/用于检验是否出现错误353. unsignedcharchecksum;/CRC354. init128641cd();355. display1();356. display2();357. display3();358. s_connectionreset();359. while(1)360. (361. error=0;/初始化error=0,362. error+=s_measure(unsigned温度测量一363. error+=s_measure(unsigned湿度测量一364. if(error!=0)s_connectionreset();365. else366. (367. humi_val.f=(float)humi_val.i;368. temp_val.f=(float)temp_val.i;369./启动连接复位即没有错误char*)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会对创业扶持政策的反馈试题及答案
- 数学一模拟试题及答案
- 私募股权投资基金2025年行业动态解析与热点投资策略报告
- 德阳医疗面试试题及答案
- 职业英语各类能力评测的新趋势与试题解读试题及答案
- 环境类面试笔试题目及答案
- 电动汽车用户满意度研究试题及答案
- 安全工程师建筑施工现场的管理技巧与试题及答案
- 珠宝培训考试题及答案
- 生物学基础 试题及答案
- 大学化学第03章-材料化学基础
- 面瘫患者的中医护理常规
- 铸就数字坚盾网络安全技术知到课后答案智慧树章节测试答案2025年春青岛工学院
- 中国历史地理智慧树知到期末考试答案章节答案2024年北京大学
- MOOC 跨文化交际通识通论-扬州大学 中国大学慕课答案
- API520-安全阀计算PART1(中文版)
- 八年级期末质量分析-课件
- 10000中国普通人名大全
- 费森4008s常见故障排除
- 积极心态与消极心态
- 特种设备检查记录
评论
0/150
提交评论