找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5477|回复: 7
打印 上一主题 下一主题
收起左侧

at89c52程序改为stc12c5a60s2芯片使用,

[复制链接]
跳转到指定楼层
楼主
  1. #include "DHT11.h"
  2. #include <stdio.h>
  3. #include "string.h"
  4. extern unsigned char  F16T,F16RH;                //温湿度数据
  5. sbit LED1=P2^0;
  6. sbit LED2=P2^3;
  7. sbit LED3=P2^6;
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. unsigned char idata Rxbuff[40],Rxnum,SF16T,SF16RH;
  11. unsigned char        Recwifi_data[5],led[2],n,x;
  12. char *strx=0;
  13. char clinetid;//连接ID
  14. unsigned char getflag;//获取标志
  15. void Get_Clinet(void);
  16. void InitUART(void)                         //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。
  17. {
  18.     TMOD = 0x20;
  19.     SCON = 0x50;
  20.     TH1 = 0xFD;
  21.     TL1 = TH1;
  22.     PCON = 0x00;
  23.     EA = 1;
  24.     ES = 1;
  25.     TR1 = 1;
  26. }

  27. /******************************************************************************/
  28. void delayms(unsigned int x)
  29. {
  30.         unsigned int i;
  31.         while(x--)
  32.                 for(i=1250;i>0;i--);
  33. }
  34. /*
  35. * UART 发送一字节
  36. */
  37. void UART_send_byte(char dat)
  38. {
  39.         SBUF = dat;                                        //发送
  40.         while (TI == 0);                        //等待发送完毕
  41.         TI = 0;                                                //清发送完毕中断请求标志位
  42. }

  43. /*
  44. * UART 发送字符串
  45. */
  46. void Send_Str(unsigned char *buf)
  47. {
  48.         while (*buf != '\0')
  49.         {
  50.                 UART_send_byte(*buf++);
  51.         }
  52. }

  53. void ESP8266_SERVER(void)//建立服务器
  54. {
  55.         Send_Str("AT\r\n");
  56.         delayms(500);
  57.         Send_Str("ATE0\r\n");
  58.         delayms(500);
  59.         Send_Str("AT+CWMODE=2\r\n");          //服务器搭建在WIFI模块上
  60.         delayms(500);
  61.            Send_Str("AT+CWSAP=\"wifi\",\"12345678\",5,3\r\n");          //设置显示名称:wifi,密码:12345678
  62.         delayms(500);
  63.         Send_Str("AT+CIPMUX=1\r\n");//启动多连接,建立服务器都需要配置
  64.         delayms(500);       
  65.         Send_Str("AT+CIPSERVER=1,5000\r\n");//建立服务器
  66.         delayms(500);       
  67.         Send_Str("AT+CIPSTO=0\r\n");

  68. }

  69. void Send_DATA(uchar *buffer)
  70. {
  71.     Send_Str("AT+CIPSEND=0,11\r\n");
  72.         delayms(10);
  73.     Send_Str(buffer);//发送数据
  74.         delayms(1000);
  75.         if((Rxbuff[0]=='1')&&(Rxbuff[1]=='1'))//关灯
  76.         {
  77.                 LED1=1;
  78.                 x=1;
  79.         }
  80.         if((Rxbuff[0]=='1')&&(Rxbuff[1]=='0'))//开灯
  81.         {
  82.                 LED1=0;
  83.                 x=0;
  84.         }
  85.         if(x==0)
  86.         {
  87.          if(F16T>=SF16T)
  88.                  LED2=0;
  89.                  else LED2=1;
  90.                  if(F16RH>=SF16RH)
  91.                  LED3=0;
  92.                  else LED3=1;
  93.         }
  94.         else
  95.         {
  96.                 if((Rxbuff[0]=='2')&&(Rxbuff[1]=='1'))        //关灯
  97.                         LED2=1;
  98.                 if((Rxbuff[0]=='2')&&(Rxbuff[1]=='0'))//开灯
  99.                         LED2=0 ;
  100.                 if((Rxbuff[0]=='3')&&(Rxbuff[1]=='1'))        //关灯
  101.                         LED3=1;
  102.                 if((Rxbuff[0]=='3')&&(Rxbuff[1]=='0'))//开灯
  103.                         LED3=0 ;
  104.         }
  105.         if((Rxbuff[0]=='5')&&(Rxbuff[1]=='1'))        //加温度定值
  106.         {
  107.                 SF16T++;
  108.             if(SF16T>50)
  109.         SF16T=50;
  110.                 Rxbuff[1]=9;
  111.         }
  112.         if((Rxbuff[0]=='5')&&(Rxbuff[1]=='0'))//减温度定值
  113.         {
  114.                 SF16T--;
  115.             if(SF16T<1)
  116.         SF16T=1;
  117.                 Rxbuff[1]=9;
  118.         }
  119.         if((Rxbuff[0]=='6')&&(Rxbuff[1]=='1'))        //加湿度定值
  120.         {
  121.                 SF16RH++;
  122.             if(SF16RH>90)
  123.         SF16RH=90;
  124.                 Rxbuff[1]=9;
  125.         }
  126.         if((Rxbuff[0]=='6')&&(Rxbuff[1]=='0'))//减湿度定值
  127.         {
  128.                 SF16RH--;
  129.             if(SF16RH<20)
  130.         SF16RH=20;
  131.                 Rxbuff[1]=9;
  132.         }


  133. }
  134. void main()
  135. {
  136.           unsigned char   Tx_Buf[12];
  137.           unsigned char LEDstatus;//灯的状态
  138.         delayms(500);
  139.         delayms(1000);          //延时一段时间,让WIFI模块稳定
  140.         InitUART();                        //初始化串口
  141.     ESP8266_SERVER();        //初始化ESP8266
  142.         SF16T=25;
  143.         SF16RH=50;
  144.         x=1;
  145.         while(1)       
  146.         {          
  147.                   getDHT11(); //获取温湿度值
  148.                   Tx_Buf[0]=F16T/10%10+0x30;                 //将温湿度数据送往发送数组,送给模块让手机APP显示
  149.                   Tx_Buf[1]=F16T%10+0x30;               
  150.                   Tx_Buf[2]=F16RH/10%10+0x30;
  151.                   Tx_Buf[3]=F16RH%10+0x30;
  152.                   Tx_Buf[4]=SF16T/10%10+0x30;                 //将温湿度数据送往发送数组,送给模块让手机APP显示
  153.                   Tx_Buf[5]=SF16T%10+0x30;               
  154.                   Tx_Buf[6]=SF16RH/10%10+0x30;
  155.                   Tx_Buf[7]=SF16RH%10+0x30;
  156.                 LEDstatus=LED1;
  157.                    Tx_Buf[8]=LEDstatus+0x30;//发送灯的状态
  158.                 LEDstatus=LED2;
  159.                 Tx_Buf[9]=LEDstatus+0x30;
  160.                 LEDstatus=LED3;
  161.                 Tx_Buf[10]=LEDstatus+0x30;
  162.                    Send_DATA(Tx_Buf)        ;//发送数据
  163.         }
  164. }

  165. /*****************串口接收中断函数,接收数据*********************/
  166. void UARTInterrupt(void) interrupt 4
  167. {       
  168.         if(RI)
  169.     {
  170.                 ES=0;
  171.         RI = 0;
  172.               Rxbuff[Rxnum]=SBUF;
  173.                 if(Rxbuff[Rxnum]=='=')
  174.                 {
  175.                         Rxnum=0;
  176.                 }
  177.             else
  178.                 {
  179.                         Rxnum++;
  180.                         if(Rxnum>2)
  181.                         {
  182.                                 Rxnum=2;
  183.                         }
  184.                 }
  185.                 ES=1;
  186.     }          
  187. }
复制代码
这个是DHT11数据发送到手机的,89c52程序在app上可以显示温湿度,但是stc12c5a60s2程序在手机上可以控制但是无法显示温度


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:396487 发表于 2018-10-15 21:08 | 只看该作者
求大家帮我改一下程序,说要改延时程序,但是菜鸟我不知道怎么改
回复

使用道具 举报

板凳
ID:387733 发表于 2018-10-16 08:08 | 只看该作者

用STC下载器里面的软件延时计算器生成延时函数代码,稍作修改即可


void Delayms(unsigned int x)                //@11.0592MHz
{
        unsigned char i, j;
        i = 11;
        j = 190;
        while(x--)
        {
                while (--i)
                    while (--j);
        }
}

回复

使用道具 举报

地板
ID:396487 发表于 2018-10-16 19:36 | 只看该作者
好的,谢谢
回复

使用道具 举报

5#
ID:396487 发表于 2018-10-16 19:47 | 只看该作者
sxhwdz 发表于 2018-10-16 08:08
用STC下载器里面的软件延时计算器生成延时函数代码,稍作修改即可

编译显示错误
DHT11.H(29): error C267: 'Delay_us': requires ANSI-style prototype
DHT11.H(29): warning C206: 'Delay_us': missing function-prototype
回复

使用道具 举报

6#
ID:388197 发表于 2018-10-16 21:47 | 只看该作者
mykt2012 发表于 2018-10-16 19:47
编译显示错误
DHT11.H(29): error C267: 'Delay_us': requires ANSI-style prototype
DHT11.H(29): war ...

Delay_us函数主体写在main下面了,没有在main上面声明?
另外如果里面有_nop_()
记得include <intrins.h>
回复

使用道具 举报

7#
ID:326450 发表于 2018-11-13 17:08 | 只看该作者
恩恩,挺有用的
回复

使用道具 举报

8#
ID:700310 发表于 2020-2-29 20:11 | 只看该作者
这是手机APP远程监控大棚温湿度吗?我要做这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表