用c语言编写基于sht10传感器的仓库温湿度监测系统的程序,单片机远程仓库湿度监测系统仿真max487+sht11源程序+电路原理图...
//****************************************************
//SHT11温度+湿度传感器,测量结果用LCD1602显示
//操作的关键部分是1.对照SHT11的时序图操作
// 2.数值的转换
// 3.对SHT11的误差进行线性补偿
//****************************************************
#include
#include
#include
sbit SCK=P2^4;
sbit DATA=P2^5;
sbit LCD_RS=P2^0;
sbit LCD_EN=P2^2;
unsigned char RH_H,RH_L; //接收的湿度的高位数据和低位数据
unsigned int i,j;
unsigned char dispbuf[4];
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_GETRH(unsigned char GETRH)
{
LCD_RS=0;
P0=GETRH;
delay(1);
LCD_EN=1;
delay(1);
LCD_EN=0;
}
void write_DATA(unsigned char *date)
{
unsigned char n;
for(n=0;n<0x40;n++)
{
if(date[n]=='*')break; //检测,如果字符输入"*",就终止
LCD_RS=1;
P0=date[n];
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
}
void init()
{
LCD_EN=0;
write_GETRH(0x38);
write_GETRH(0x0c);
write_GETRH(0x06);
write_GETRH(0x01);
}
//在SCK上发送n个脉冲信号
void nSCKPulse(unsigned int n)
{
for(i=n;i>0;i--)
{
SCK=0;
SCK=1;
}
}
//启动SHT11
void STARTSHT11()
{
SCK=1;
DATA=0;
SCK=0;
SCK=1;
DATA=1;
SCK=0;
}
//获得湿度数据
void GETRH(unsigned char GETRH) //测量湿度
{
unsigned char bei=0x80;
DATA=1;
SCK=0; //下面可以开始
for(i=8;i>0;i--)
{
if(GETRH&bei)
{
DATA=1;
SCK=1;
SCK=0;
}
else
{
DATA=0;
SCK=1;
SCK=0;
}
bei=bei/2;
}
}
//对SHT11进行读操作
void READSHT11()
{
unsigned char temp;
RH_H=0;
RH_L=0;
for(i=0;i<4;i++) //4个脉冲没数据
{
SCK=1;
SCK=0;
}
for(i=4;i>0;i--) //接收RH高4位数据
{
SCK=1;
temp=0x01;
if(DATA==1)
{
temp=(temp<
RH_H=RH_H+temp;
}
SCK=0;
}
DATA=0; //拉低
SCK=1;
SCK=0;
DATA=1; //释放
for(i=8;i>0;i--) //接收RH低4位数据
{
SCK=1;
temp=0x01;
if(DATA==1)
{
temp=(temp<
RH_L=RH_L+temp;
}
SCK=0;
}
P1=RH_H;
P3=RH_L;
DATA=0; //拉低
SCK=1;
SCK=0;
DATA=1; //释放(不做CRC校验,就此结束)
}
//阶乘函数
long FACTORIAL(int n)
{
long nn=1;
for(;n>0;n--)
{
nn=10*nn;
}
return(nn);
}
//SHT11的补偿算法
void COMPENSATIONSHT()
{
unsigned long ii;
char m;
ii=((((RH_H*256+RH_L)-221)*318878)/100000);
if(ii>5000)
{
ii=ii+((10000-ii)*620/5000);
}
else
{
ii=ii+ii*620/5000;
}
// printf("%f\n",ii);
for(m=4;m>=0;m--)
{
if(m==1)
{
write_DATA(".*");
}
LCD_RS=1;
P0=(int)(ii/FACTORIAL(m))+0x30;
if(m==4&P0==0x30)
{
P0=0x20;
}
if(m==4&P0==0x31)
{
write_DATA("100.00*");
break;
}
if(m==3&P0==0x30)
{
P0=0x20;
}
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
ii=ii-((int)(ii/FACTORIAL(m)))*FACTORIAL(m);
}
write_DATA("%*");
}
void InitUart(void)
{
SCON = 0x50; //工作方式1
TMOD = 0x21;
PCON = 0x00;
TH1 = 0xfd; //使用T1作为波特率发生器
TL1 = 0xfd;
TI = 1;
TR1 = 1; //启动T1 //启动T1
}
void main()
{
init();
InitUart();
write_GETRH(0x80+0x03); //放第一行字符的位置
write_DATA("Humidity*");
write_GETRH(0x80+0x42); //放第二行字符的位置
write_DATA("%RH*");
while(1)
{
nSCKPulse(10); //复位
STARTSHT11(); //启动
GETRH(0x05); //测湿度命令
SCK=1;
while(DATA); //ack为低成功,继续
SCK=0; //一直都为低
DATA=1;
while(DATA); //等待300毫秒
READSHT11();
write_GETRH(0x80+0x47); //放第二行字符的位置
COMPENSATIONSHT(); //数值转换+显示
putchar(0x02);
}
}
用c语言编写基于sht10传感器的仓库温湿度监测系统的程序,单片机远程仓库湿度监测系统仿真max487+sht11源程序+电路原理图...相关推荐
- 三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰
三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰,简洁明了. 通过结构体和函数块的使用,可以使您在程序编写水平得到很大提高. ST语言是PLC后续的主流语言,是日后编程 ...
- 基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)
基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明) **0 引言** 随着我国经济的快速发展,人们的生活水平不断提高,饲养宠物已经成为成为一种潮流.目前,市场 ...
- [附源码]计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统01yr8(程序+lw+远程部署)
[附源码]计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统01yr8(程序+lw+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: P ...
- [附源码]计算机毕业设计Python+uniapp基于微信小程序图书借阅系统04688(程序+lw+远程部署)
[附源码]计算机毕业设计Python+uniapp基于微信小程序图书借阅系统04688(程序+lw+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: Py ...
- 基于c的语言开发,基于CC++等高级编程语言开发电子系统的设计自动化系统.doc
基于CC等高级编程语言开发电子系统的设计自动化系统 基于CC++等高级编程语言开发电子系统的设计自动化系统 摘 要:当前电子系统设计自动化技术已广泛地应用于各个领域,随着科技的发展,对电子系统设计自动 ...
- 基于IAP和USB技术的嵌入式系统应用程序升级
对于内含IAP功能的嵌入式微控制器提出基于IAP和USB技术的系统应用程序升级的新方法.U盘被用作程序代码的存储设备,将微控制器的存储器Flash和SRAM进行有效的区间分配,经外部扩展接口USB,微 ...
- Unix C语言编写基于IO多路复用的小型并发服务器
背景介绍 如果服务器要同时处理网络上的套接字连接请求和本地的标准输入命令请求,那么如果我们使用accept来接受连接请求,则无法处理标准输入请求;类似地,如果在read中等待一个输入请求,则无法处理网 ...
- c语言tcp硬时事通讯程序代码,使用C语言编写基于TCP协议的Socket通讯程序实例分享...
tcp客户端示例 #include #include #include #include #include #include #include #include #include #include # ...
- 通讯录管理系统课设使用c编写基于链表增查删改分组文本操作随程序实时同步
通讯录管理系统已经有好多人写过了 但是基于文本操作大多数只有从文件中输出和输入并不是即时的 解决方法是将链表里的数据输出以结构体的方式到文本 读入应该以一样的方式 增加个人信息函数定义 void Ad ...
最新文章
- nginx转发及后端服务器获取真实client的IP
- salt 基本组建之 grains,pillars(整理中)
- 从JavaScript数组获取随机值
- html百度地图中心点不正确,百度地图嵌入弹出层,无法准确正确显示marker标记到中心位置的问题...
- JQuery方式执行ajax请求
- Java进阶:多线程Lock管理多个Condition的实践
- java回调如何理解_如何理解java中的回调
- 2021年11月编程语言排行榜出炉
- 学习笔记(46):Python实战编程-protocol
- 关于for循环中的变量int i 如果跳出了这个for循环后,i的值是继续保留还是被释放掉了
- pandas—总结(2) 数据读写 (更新中)
- Linux常用的基础组件
- apk签名的重要性和方法
- 编译Android VNC Server(pc远程控制android)
- 互联网架构技术干货视频分享地址发布和情况说明
- 【渗透测试笔记】之【Cobalt Strike小技巧——后台挂起CS服务端】
- 2020高中计算机会考成绩查询,2020年高中会考成绩查询入口
- NAND Flash硬件原理
- 关于Ubuntu22.04无法定位软件包
- 铝电解电容器在电路设计时的使用注意事项
热门文章
- 数据钻取,详细数据一览无遗!
- [译] 区块链如何帮助重塑医疗保健行业
- Whale帷幄 - 企业数字化解决方案服务商 数字化方案提供商
- 计算机基础运算器实验,基本运算器实验
- (原创)解决远程桌面连接远程应用时,出现 '应用程序错误: '0x7c931780'指令引用的 '0x89abcdef' 内存。该内存不能为 'read'...
- gradient设置上下渐变_图解CSS: CSS渐变
- 药品管理系统设计文档
- linux指令速查手册 中文高清pdf版,linux指令速查手册
- Fast unfolding of communities in large networks 中文翻译
- 信息安全等级保护的5个级别分别是什么?最高级别是哪个?