0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >LED应用 > 基于STC89C52RC 51单片机实现温湿度传感器实时监控并LCD显示的解决方案

基于STC89C52RC 51单片机实现温湿度传感器实时监控并LCD显示的解决方案

来源: toutiao
2020-08-06
类别:LED应用
eye 90
文章创建人 拍明

原标题:51单片机实现温湿度传感器实时监控并LCD显示的解决方案

  简介:

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

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

  Protues8仿真图:

  

51单片机实现温湿度传感器实时监控并LCD显示的解决方案

  51单片机完整程序(代码很长,但是完整,可以直接复制使用):

  //****************************************************************//

  //

  //

  //

  //

  //

  //****************************************************************//

  #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]='';

  LcdWriteCom(0x00+0x80);

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

  {

  LcdWriteData(a[i]);

  }

  b[9]=sd_sw;

  b[10]=sd_gw;

  b[11]='\%';

  b[12]='';

  LcdWriteCom(0x42+0x80);

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

  {

  LcdWriteData(b[i]);

  }

  //读取模块数据周期不易小于 2S

  Delay(30000);

  }

  }


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案