51单片机esp8266仿真时能连接,但没有实时数据上传

img


#include<reg52.h>                        
#include<intrins.h>
#include"eeprom52.h"
#include"delay.h"
#define uchar unsigned char          
#define uint unsigned int

#define LCD1602_dat P0            

sbit LCD1602_rs=P2^7;                
sbit LCD1602_rw=P2^4;
sbit LCD1602_e=P2^6;
sbit beep=P3^7;                                
sbit led_1=P2^3;                            
sbit led_2=P2^5;
sbit key_1=P3^3;                            
sbit key_2=P3^4;
sbit key_3=P3^5;
sbit key_4=P3^6;
sbit alarm_1=P1^7;                    
sbit alarm_2=P1^6;

sbit ADC0832_CS=P2^0;                
sbit ADC0832_CLK=P2^2;            
sbit ADC0832_DIO=P2^1;            

uint sum;                                      
uchar RH,RH_H=20,RH_L=10,state,ms,cs;  
bit beep1,zt,s1;                                             


unsigned char sendDataFlag = 0;
bit messageCnt = 0;



void UART_Init();
void uartSendByte(unsigned char date);
void uartSendStr(unsigned char *s,unsigned char length);



 
unsigned int  A_D()                                   
{
    uchar i;
    uchar dat;                     
    ADC0832_CS=1;     
    ADC0832_CLK=0;    
    ADC0832_CS=0;    
    ADC0832_DIO=1;    
    ADC0832_CLK=1;   
    ADC0832_CLK=0;   
    ADC0832_DIO=1;    
    ADC0832_CLK=1;     
    ADC0832_CLK=0;     
    ADC0832_DIO=0;   
    ADC0832_CLK=1;   
    ADC0832_CLK=0;   
    ADC0832_DIO=1;   
    ADC0832_CLK=1;   
    for(i=0;i<8;i++) 
    {
        ADC0832_CLK=1;         
        ADC0832_CLK=0; 
        dat<<=1;            
        dat|=(unsigned char)ADC0832_DIO;       
    }                      
    ADC0832_CS=1;           
    return dat;             
}





void delay(uint T)                     
{
    while(T--);
}




void LCD1602_write(uchar order,dat)                 
{
    LCD1602_e=0;
    LCD1602_rs=order;
    LCD1602_dat=dat;
    LCD1602_rw=0;
    LCD1602_e=1;
    delay(1);
    LCD1602_e=0;                                                                                                     
}




void LCD1602_writebyte(uchar *prointer)                  
{
    while(*prointer!='\0')
    {
        LCD1602_write(1,*prointer);
        prointer++;
    }
}




void LCD1602_cls()                                    
{
    LCD1602_write(0,0x01);     
    delay(1500);
    LCD1602_write(0,0x38);     
    delay(1500);
    LCD1602_write(0,0x0c);     
    LCD1602_write(0,0x06);
    LCD1602_write(0,0xd0);
    delay(1500);
}




void show()
{
    if(state==0)    
    {
        
        LCD1602_write(0,0x80);
        LCD1602_writebyte("Water level:");    
        LCD1602_write(0,0x80+12);
        if(RH>9)LCD1602_write(1,0x30+RH/10%10); 
        else LCD1602_writebyte(" ");
        LCD1602_write(0,0x80+13);
        LCD1602_write(1,0x30+RH%10);   
        LCD1602_write(0,0x80+14);
        LCD1602_writebyte("m");

        LCD1602_write(0,0xC0);    
        LCD1602_writebyte("State:");     
        LCD1602_write(0,0xC0+6);
        if(zt==0)
        {
            LCD1602_writebyte("Manul     ");
        }else
        {
            LCD1602_writebyte(" Auto     ");
        }
            
    }
    else         
    {
        LCD1602_write(0,0x80);
        LCD1602_writebyte("Water_H:");   
        LCD1602_write(0,0x80+8);
        if(state==1&&s1==1)          
        {
            LCD1602_writebyte("  ");
        }else
        {    LCD1602_write(0,0x80+8);
            if(RH_H>9)LCD1602_write(1,0x30+RH_H/10%10);
            else LCD1602_writebyte(" ");
            LCD1602_write(0,0x80+9);
            LCD1602_write(1,0x30+RH_H%10);        
        }
        LCD1602_write(0,0x80+10);
        LCD1602_writebyte("m    ");

        LCD1602_write(0,0xC0);
        LCD1602_writebyte("Water_L:");  
        if(state==2&&s1==1)         
        {
            LCD1602_write(0,0xC0+8);
            LCD1602_writebyte("  "); 
        }else
        {
            LCD1602_write(0,0xC0+8);
            if(RH_L>9)LCD1602_write(1,0x30+RH_L/10%10);
            else LCD1602_writebyte(" ");
            LCD1602_write(0,0xC0+9);
            LCD1602_write(1,0x30+RH_L%10);
        }
        LCD1602_write(0,0xC0+10);
        LCD1602_writebyte("m    ");    
    }
}





void key()
{
    if(!key_1) 
    {
        delay(888);  
        if(!key_1)    
        {
            while(!key_1) show();  
            state=(state+1)%3;      
        }
    }

    if(!key_2)   
    {
        delay(888);   
        if(!key_2)   
        {
            while(!key_2)show();  
            if(state==1)          
            {
                if(RH_H<100)RH_H++;           
                SectorErase(0x2000);     
                byte_write(0x2000,RH_H);     
            }
            else if(state==2)
            {
                if(RH_L<RH_H-1)RH_L++;      
                SectorErase(0x2200);     
                byte_write(0x2200,RH_L);     
            }
            else
            {
                zt=!zt;                 
                alarm_1=1;
                alarm_2=1;   
            }    
        }
    }

    if(!key_3)    
    {
        delay(888);    
        if(!key_3)    
        {        
            while(!key_3)show();  
            if(state==1)          
            {
                if(RH_H>RH_L+1)RH_H--;
                SectorErase(0x2000);     
                byte_write(0x2000,RH_H);
            }else if(state==2)
            {
                if(RH_L>0)RH_L--;
                SectorErase(0x2200);     
                byte_write(0x2200,RH_L);
            }else
            {
                if(zt==0)
                {
                    alarm_1=!alarm_1;       
                }
            }
        }
    }
    if(!key_4) 
    {
        delay(888);  
        if(!key_4)    
        {
            while(!key_4) show();
               if(zt==0)
                {
                    alarm_2=!alarm_2;       
                }
        }
    }                        
}










void UART_1_init()
{               
    TMOD=0x01;   
    TH0=0x3c;       
    TL0=0xb0;
    EA=1;
    ET0=1;
    TR0=1;       
}



void UART_1() interrupt 1  
{
    TH0=0x3c;             
    TL0=0xb0;
    ms++;            
    if(ms%5==0)    
    {
        s1=!s1;        
    }
    if(ms%10==0)      
    {
        if(beep1==1)  
        {
            beep=!beep;
        }
        else
        {
            beep=1;
        }    
    }
    if(ms>19)
    {
        ms=0;
    }
}

void proc()
{

    if(zt==1)      
    {
        if(RH>=RH_H)       
        {
            alarm_1=1;
            alarm_2=0; 
            led_1=0;            
        }
        else         
        {
            alarm_1=1;
            alarm_2=1;
            led_1=1;      
        }

        if(RH<=RH_L)      
        {
            alarm_2=1;
            alarm_1=0;   
            led_2=0;   
        }else        
        {
            alarm_1=1;
            led_2=1;      
        }

        if(RH>=RH_H||RH<=RH_L)  
        {
            beep1=1;           
        }else         
        {
            beep1=0;       
        }
    }
    else
    {
        if(zt==0)
        {
        if(RH>=RH_H)       
        {
            led_1=0;    
        }
        else         
        {
            led_1=1;      
        }

        if(RH<=RH_L)      
        {
            led_2=0;       
        }else        
        {
            led_2=1;      
        }

        if(RH>=RH_H||RH<=RH_L)  
        {
            beep1=1;           
        }else         
        {
            beep1=0;       
        }
        }
    }
  
}


 void UART_Init()
{
    #ifdef __REG52_H__
        SCON = 0x50;
        TH2 = 0xFF;
        TL2 = 0xFD;
        RCAP2H = 0xFF;  //(65536-(FOSC/32/BAUD))   BAUD = 115200 FOSC = 11059200
        RCAP2L = 0xFD;

        /*****************/
        TCLK = 1;
        RCLK = 1;
        C_T2 = 0;
        EXEN2 = 0;

        /*****************/
        TR2 = 1;
        ES   = 1; //打开串口中断
        EA   = 1; //打开总中断
    #endif
    
    #ifdef __STC12C5A_H__
        PCON &= 0x7F;        //波特率不倍速
        SCON = 0x50;        //8位数据,可变波特率
        AUXR |= 0x04;        //独立波特率发生器时钟为Fosc,即1T
        BRT = 0xFD;        //设定独立波特率发生器重装值
        AUXR |= 0x01;        //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;        //启动独立波特率发生器
        EA = 1;     //打开总中断
        ES = 1;     //打开串口中断
    #endif
     
}

void uartSendByte(unsigned char date)//串口发送单字节数据
{
    unsigned char time_out;
    time_out=0x00;
    SBUF = date;              //将数据放入SBUF中
    while((!TI)&&(time_out<100))  //检测是否发送出去
    {time_out++;DelayUs10x(2);}    //未发送出去 进行短暂延时
    TI = 0;                        //清除ti标志
}

void uartSendStr(unsigned char *s,unsigned char length)       //发送定长度字符串
{
    unsigned char NUM;
    NUM=0x00;
    while(NUM<length)    //发送长度对比
    {
        uartSendByte(*s);  //放松单字节数据
        s++;          //指针++
        NUM++;          //下一个++
       }
}



void UART_SER (void) interrupt 4     //串行中断服务程序
{
    if(RI)                        //判断是接收中断产生
    {
        RI=0;                      //标志位清零
    
    }
    if(TI)  //如果是发送标志位,清零
    TI=0;
} 

void wifi ()
{
    UART_1_init();
    UART_Init();

    DelayS(1);
    uartSendStr("AT+CIPMUX=1\r\n", 13); //打开多连接
    DelayS(1);
    uartSendStr("AT+CIPSERVER=1,8080\r\n", 21); //建立服务 端口号为8080

}


void math()
{
    float Ad_dat=0;
    RH_H=byte_read(0x2000);       
    RH_L=byte_read(0x2200);
    if((RH_H>99)||(RH_L>99)||(RH_L>=RH_H))   {RH_H=20;  RH_L=10;} 
    while(1)
    {
        if(cs<10)             
        {
            cs++;
            sum+=A_D();        
        }
        else                      
        {
            cs=0;                  
            Ad_dat=(uchar)(sum/10);     
            if(Ad_dat>2)
            {
                Ad_dat=(float)((Ad_dat-2)/2.6);  
                RH=(uchar)(Ad_dat);    
            }
            else
            RH=0;        
            sum=0;

        show();
        key();
        proc();
}    
}

}




void main()
{
    alarm_1=1;
    wifi();            
    LCD1602_cls();       
    math();
        DelayS(1);
        while(1)
        {
        if (sendDataFlag == 1) //发送数据标志
        {
            if (messageCnt == 0) //区分at命令还是数据内容
            {
                messageCnt = 1;
                uartSendStr("AT+CIPSEND=0,8\r\n", 16); //发送32位数据
            }
            else
            {
                if (RH>RH_H) //高低都有水
                {

                    uartSendStr("*High*  ", 8); //发送内容
                }
                else if (RH<RH_L) //高低都没有水
                {
                
                    uartSendStr("*Low*  ", 8); //发送内容
                }
                else if (RH>RH_L&&RH<RH_H) //正常水位
                {
                
                    uartSendStr("*Normal*", 8); //发送内容
                }
                else
                {
                
                    uartSendStr("*Error* ", 8); //发送内容
                }
                uartSendStr("\r\n", 2);
                messageCnt = 0; //发送数据
            }
            sendDataFlag = 0; //清除发送数据标志
        }
        }

}