基于单片机的温湿度实时监控的程序设计

发布时间:2023-07-11  

51单片机STC89C52RC是本方案的选用芯片,以其8位处理和极低的价格来看,是很适合进行本次实验。LCD显示屏本次选用的型号是1602A。


在实现51单片机实现温湿度传感器实时监控并LCD显示的基础功能后,还可以通过单片机的串口通信和WIFI模块或者Zigbee模块进行物联网连接,使设备连接互联网,再通过TCP连接进行物联网的一整套方案,包括手机APP实时监控数据,也可以是手机APP远程开启风扇来调节温度或者湿度,但这些不在本次方案中细说,本人已经实现上述功能,只是技术不完善,所以不在此公布。


51单片机内部程序:

C

#include#include#include#include#include#include

typedef unsigned char  U8;      /* defined for unsigned 8-bits integer variable   无符号8位整型变量  */

typedef signed  char  S8;      /* defined for signed 8-bits integer variable   有符号8位整型变量  */

typedef unsigned int  U16;      /* defined for unsigned 16-bits integer variable   无符号16位整型变量 */

typedef signed  int  S16;      /* defined for signed 16-bits integer variable   有符号16位整型变量 */

typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable   无符号32位整型变量 */

typedef signed  long  S32;      /* defined for signed 32-bits integer variable   有符号32位整型变量 */

typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

typedef double        F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

//

#define uchar unsigned char

#define uint unsigned int

#define  Data_0_time    4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbit  P2_0  = P2^0 ;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8  U8FLAG,k;

U8  U8count,U8temp;

U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8  U8comdata;

U8  outdata[5];  //定义发送的字节数

U8  indata[5];

U8  count, count_r=0;

U8  str[5]={"RS232"};

U16 U16temp1,U16temp2;

U8 a[]={"Temperature:    "};

U8 b[]={"Humidity:  "};

U8 wd_sw,wd_gw,sd_sw,sd_gw;

void Delay(U16 j)

{

U8 i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

void  Delay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void  COM(void)

{

U8 i;

for(i=0;i<8;i++)

{

U8FLAG=2;

while((!P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1

U8comdata<<=1;

U8comdata|=U8temp;        //0

}//rof

}

//--------------------------------

//-----湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

void RH(void)

{

//主机拉低18ms

P2_0=0;

Delay(180);

P2_0=1;

//总线由上拉电阻拉高 主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入 判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行

if(!P2_0) //T !

{

U8FLAG=2;

//判断从机是否发出 80us 的低电平响应信号是否结束

while((!P2_0)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

while((P2_0)&&U8FLAG++);

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

COM();

U8RH_data_L_temp=U8comdata;

COM();

U8T_data_H_temp=U8comdata;

COM();

U8T_data_L_temp=U8comdata;

COM();

U8checkdata_temp=U8comdata;

P2_0=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

}//fi

}

void main()

{

U8  i,j;

LcdInit();

Delay(1);        //延时100US(12M晶振)

while(1)

{

RH();//调用温湿度读取子程序

str[0]=U8T_data_H;

str[1]=U8T_data_L;

str[2]=U8RH_data_H;

str[3]=U8RH_data_L;

str[4]=U8checkdata;

wd_sw=U8T_data_H/10%10+0x30;

wd_gw=U8T_data_H%10+0x30;

sd_sw=U8RH_data_H/10%10+0x30;

sd_gw=U8RH_data_H%10+0x30;

a[12]=wd_sw;

a[13]=wd_gw;

a[14]=0xdf;

a[15]='C';

a[16]='

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>