久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1566|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

求助 將LCD的數(shù)值通過ESP8266發(fā)送到手機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:652483 發(fā)表于 2021-5-6 21:17 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
LCD串行顯示數(shù)值,APP能連接但是收不到數(shù)據(jù),是不是有什么沖突。

sbit beep = P2^0;
sbit setKey = P3^3;//設(shè)置
sbit addKey = P3^4;//加
sbit subKey = P3^5;//減
sbit paishui = P3^6;//排水---低電平觸發(fā)
sbit jiashui = P3^7;//加水

uint Receive,i;
long s;
long s1;


uchar Recive_table[40];          //用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
uchar code ta[]="0123456789- "; //測試一下
uchar table[]="溫度:00.0 C  濕度:00.0 %";//傳送用定位模板

float dataV[4]= {0};
unsigned char dataTH[8]={110,30, 99, 30, 8,2, 45, 15};
unsigned char lcd[8] = {0};

void alarm();

void delay(unsigned int i){//微秒級延時
    while(i--);
}

void delayms(int a)//毫秒級延時
{
int x,y;
for(x=a;x>0;x--)
    for(y=110;y>0;y--);
}
float pre_ph_v, phv;
void setKeyDeal();
void addKeyDeal();
void subKeyDeal();

void Uart_Init()                //使用定時器1作為波特率發(fā)生器(STC89C52、STC89C51、AT89C51等均可)
{  
    TMOD = 0x21;
    SCON = 0x50;                 //設(shè)置串行方式
    TH1 = 0xFD;                     //波特率9600
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;                        //總中斷打開
    ES = 1;                        //開串口中斷  
    TR1 = 1;                    //啟動定時器1
}

/********************************************************************
名稱:串口發(fā)送函數(shù)  功能:MCU向無線WIFI模塊ESP8266發(fā)送數(shù)據(jù)  
********************************************************************/
void Send_Uart(uchar value)
{  
    ES=0;                          //關(guān)閉串口中斷  
    TI=0;                       //清發(fā)送完畢中斷請求標(biāo)志位   
    SBUF=value;                 //發(fā)送  
    while(TI==0);                 //等待發(fā)送完畢   
    TI=0;                       //清發(fā)送完畢中斷請求標(biāo)志位   
    ES=1;                          //允許串口中斷
    TH0=0;
    TL0=0;  
}  

/********************************************************************
名稱:WIFI模塊設(shè)置函數(shù)  作用: 啟動模塊,以便可以實(shí)現(xiàn)無線接入和控制  
********************************************************************/

void ESP8266_Set(uchar *puf)     // 數(shù)組指針*puf指向字符串?dāng)?shù)組               
{   
    while(*puf!='\0')            //遇到空格跳出循環(huán)  
    {   
        Send_Uart(*puf);          //向WIFI模塊發(fā)送控制指令。   
        delay(5);   
        puf++;   
    }  
    delay(5);  
    Send_Uart('\r');             //回車  
    delay(5);  
    Send_Uart('\n');               //換行  
}


//初始化eeprom
void init_eeprom(){
    unsigned char is_first_init =  byte_read(0x2020);
    if(is_first_init == 1){
        dataTH[0] = byte_read(0x2000);
        dataTH[1] = byte_read(0x2001);
        dataTH[2] = byte_read(0x2002);
        dataTH[3] = byte_read(0x2003);
        dataTH[4] = byte_read(0x2004);
        dataTH[5] = byte_read(0x2005);
        dataTH[6] = byte_read(0x2006);
        dataTH[7] = byte_read(0x2007);
    }else{
            SectorErase(0x2000);
            byte_write(0x2000, dataTH[0]);
            byte_write(0x2001, dataTH[1]);
            byte_write(0x2002, dataTH[2]);
            byte_write(0x2003, dataTH[3]);
            byte_write(0x2004, dataTH[4]);
            byte_write(0x2005, dataTH[5]);
            byte_write(0x2006, dataTH[6]);
            byte_write(0x2007, dataTH[7]);
            byte_write(0x2020, 1);   
    }
}

//更新eeprom存儲的數(shù)據(jù)
void update_eeprom(){
            SectorErase(0x2000);
            byte_write(0x2000, dataTH[0]);
            byte_write(0x2001, dataTH[1]);
            byte_write(0x2002, dataTH[2]);
            byte_write(0x2003, dataTH[3]);
            byte_write(0x2004, dataTH[4]);
            byte_write(0x2005, dataTH[5]);
            byte_write(0x2006, dataTH[6]);
            byte_write(0x2007, dataTH[7]);
            byte_write(0x2020, 1);   
}

void updateLCD(){
    dataV[0] = get_0832_AD_data(0); //PH
    dataV[1] = get_0832_AD_data1(0);  //SW
    dataV[2] = get_0832_AD_data(1);  //ZD
    dataV[3] = Get18B20Temp();//WD
   
    phv = -58.87*(dataV[0]*5.0/255.0) + 216.77;
    if(phv > 141 || phv < 0 ) { phv = pre_ph_v; }
    pre_ph_v = phv;
    lcd[0] = ((int)phv)%1000/100+48;
    lcd[1] = ((int)phv)%100/10 + 48;
    lcd[2] =  '.';
    lcd[3] = ((int)phv)%10 + 48;
    lcd[4] =  '\0';
    PutStr(0,1, lcd);
    dataV[0] = phv;
   
    table[6]=lcd[0];
  table[7]=lcd[1];
  table[9]=lcd[3];  

    dataV[2]  = dataV[2] /2.55;
    if(dataV[2] > 99) dataV[2] = 99;
    lcd[0] = ((int)dataV[2])%100/10 + 48;
    lcd[1] = ((int)dataV[2])%10 + 48;
    lcd[2] =  '\0';
    PutStr(1,1, lcd);
   
    dataV[1]  = 10 - (130-dataV[1]) /19;
    if(dataV[1] > 10) dataV[1] = 10;
    if(dataV[1] < 0) dataV[1] = 0;
    lcd[0] = ((int)dataV[1])%100/10 + 48;
    lcd[1] = ((int)dataV[1])%10 + 48;
    lcd[2] =  '\0';
    PutStr(2,1, lcd);
   
    lcd[0] = ((int)dataV[3])%100/10 + 48;
    lcd[1] = ((int)dataV[3])%10 + 48;
    lcd[2] =  '\0';
    PutStr(3,1, lcd);

}

void updateTH(){
    lcd[0] = ((int)dataTH[0])%1000/100+48;
    lcd[1] = ((int)dataTH[0])%100/10 + 48;
    lcd[2] =  '\0';
    PutStr(0,4, lcd);
   
  lcd[0] = ((int)dataTH[1])%1000/100+48;
    lcd[1] = ((int)dataTH[1])%100/10 + 48;
    lcd[2] =  '\0';
    PutStr(0,7, lcd);
   
    lcd[0] = ((int)dataTH[2])%100/10+48;
    lcd[1] = ((int)dataTH[2])%10 + 48;
    lcd[2] =  '\0';
    PutStr(1,4, lcd);

    lcd[0] = ((int)dataTH[3])%100/10+48;
    lcd[1] = ((int)dataTH[3])%10 + 48;
    lcd[2] =  '\0';
    PutStr(1,7, lcd);

    lcd[0] = ((int)dataTH[4])%100/10+48;
    lcd[1] = ((int)dataTH[4])%10 + 48;
    lcd[2] =  '\0';
    PutStr(2,4, lcd);

    lcd[0] = ((int)dataTH[5])%100/10+48;
    lcd[1] = ((int)dataTH[5])%10 + 48;
    lcd[2] =  '\0';
    PutStr(2,7, lcd);

    lcd[0] = ((int)dataTH[6])%100/10+48;
    lcd[1] = ((int)dataTH[6])%10 + 48;
    lcd[2] =  '\0';
    PutStr(3,4, lcd);

    lcd[0] = ((int)dataTH[7])%100/10+48;
    lcd[1] = ((int)dataTH[7])%10 + 48;
    lcd[2] =  '\0';
    PutStr(3,7, lcd);
}


void timer1(){
    updateLCD();
    updateTH();
    alarm();     
}

void main(){
     Uart_Init();                                            //波特率發(fā)生器
    delayms(10);
    ESP8266_Set("AT+CWMODE=2");                             //設(shè)置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   
    delayms(500);
    ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4");      //AT+CWSAP="wifi_yuan","123456789",11,4  設(shè)置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
    delayms(500);
    ESP8266_Set("AT+CIPMUX=1");                                //開啟多連接模式,允許多個各客戶端接入
  delayms(500);
    ESP8266_Set("AT+CIPSERVER=1,5000");                      //啟動TCP/IP 實(shí)現(xiàn)基于網(wǎng)絡(luò)//控制     ESP8266_Set("AT+CIPSERVER=1,5000");  
    delayms(500);
    ESP8266_Set("AT+CIPSTO=0");                             //永遠(yuǎn)不超時
    delayms(500);     
    ES=1;                     
    DS18B20Init();
    LcmInit();           //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    LcmClearTXT();       //LCD12864清屏        
    init_eeprom();
   
    timer1_start(1000, timer1);
    PutStr(0,0, "PH     H     L  ");  
    PutStr(1,0, "ZD     H     L  ");  
    PutStr(2,0, "SW     H     L  ");  
    PutStr(3,0, "WD     H     L  ");  
   
    while(1){
        setKeyDeal();//按鍵
        addKeyDeal();
        subKeyDeal();
   
        ESP8266_Set(ta);//數(shù)據(jù)發(fā)送出去
     delayms(500);
    }
}
/*********************************************************************  
名稱:串行通訊中斷  作用:發(fā)送或接收結(jié)束后進(jìn)入該函數(shù),對相應(yīng)的標(biāo)志位軟件清0,實(shí)現(xiàn)模塊對數(shù)據(jù)正常的收發(fā)。  
********************************************************************/

void Uart_Interrupt() interrupt 4         
{   
    static uchar i=0;  
    if(RI==1)  
    {   
        RI=0;   
        Receive=SBUF;                                //MCU接收wifi模塊反饋回來的數(shù)據(jù)      
        Recive_table[i]=Receive;   
        if((Recive_table[i]=='\n'))
        {            
            i=0;
        }   
        else i++;                                          //遇到換行 重新裝值  
    }   
    else TI=0;   
}  
void alarm(){//報(bào)警
    if( (int)dataV[0] > dataTH[0] || (int)dataV[0] < dataTH[1] || \
            (int)dataV[2] > dataTH[2] || (int)dataV[2] < dataTH[3] ||  \
            (int)dataV[3] > dataTH[6] || (int)dataV[3] < dataTH[7]  \
    ){
        beep=paishui=jiashui=0;//換水---同時加水排水
    }
    if((int)dataV[1] > dataTH[4]){    beep=paishui =0;}//水位高排水
    else if((int)dataV[1] < dataTH[5]){    beep=jiashui =0;}//水位低加水
    else{
        beep=paishui=jiashui=1;
    }
}


char flagSet = 0;
void setDeal(){
    switch(flagSet){
        case 0: PutStr(3,6, " "); break;
        case 1: PutStr(0,3, "*"); break;
        case 2: PutStr(0,6, "*"); PutStr(0,3, " "); break;
        case 3: PutStr(1,3, "*"); PutStr(0,6, " "); break;
        case 4: PutStr(1,6, "*"); PutStr(1,3, " "); break;
        case 5: PutStr(2,3, "*"); PutStr(1,6, " "); break;
        case 6: PutStr(2,6, "*"); PutStr(2,3, " "); break;
        case 7: PutStr(3,3, "*"); PutStr(2,6, " "); break;
        case 8: PutStr(3,6, "*"); PutStr(3,3, " "); break;
    }
}

void setKeyDeal(){
    setKey = 1;
    if(setKey == 0){
        delay(1000);
        if(setKey == 0){
            flagSet++;
            if(flagSet > 8){ flagSet = 0; }
            setDeal();
            while(setKey == 0);
        }
    }
}

void addKeyDeal(){
    addKey = 1;
    if(addKey == 0 && flagSet > 0){
        delay(1000);
        if(addKey == 0){
            
            switch(flagSet){
                case 1: if(dataTH[0] < 141)        dataTH[0]+=10;  break;
                case 2: if(dataTH[1] < dataTH[0]) dataTH[1]+=10;  break;
                case 3: if(dataTH[2] < 99)        dataTH[2]++;  break;
                case 4: if(dataTH[3] < dataTH[2]) dataTH[3]++;  break;
                case 5: if(dataTH[4] < 10)        dataTH[4]++;  break;
                case 6: if(dataTH[5] < dataTH[4]) dataTH[5]++;  break;
                case 7: if(dataTH[6] < 99)        dataTH[6]++;  break;
                case 8: if(dataTH[7] < dataTH[6]) dataTH[7]++;  break;
            }
            updateTH();
            update_eeprom();
            while(addKey == 0);
        }
    }
}

void subKeyDeal(){
    subKey = 1;
    if(subKey == 0 && flagSet > 0){
        delay(1000);
        if(subKey == 0){
            
            switch(flagSet){
                case 1: if(dataTH[0] > dataTH[1]+10)        dataTH[0]-=10;  break;
                case 2: if(dataTH[1] > 10) dataTH[1]-=10;  break;
                case 3: if(dataTH[2] > dataTH[3])        dataTH[2]--;  break;
                case 4: if(dataTH[3] > 0) dataTH[3]--;  break;
                case 5: if(dataTH[4] > dataTH[5])        dataTH[4]--;  break;
                case 6: if(dataTH[5] > 0) dataTH[5]--;  break;
                case 7: if(dataTH[6] > dataTH[7])        dataTH[6]--;  break;
                case 8: if(dataTH[7] > 0) dataTH[7]--;  break;
            }
            updateTH();
            update_eeprom();
            while(subKey == 0);
        }
    }
}





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文在线一区二区 | 成人国产精品入口免费视频 | 精品久久久久香蕉网 | 999精品网 | 亚洲欧美精品在线观看 | 成人在线一级片 | 国产精品久久久久久久免费观看 | 欧美一区二区另类 | 国产成人精品免高潮在线观看 | 亚洲精品专区 | 成人在线观看免费 | 成av在线 | 久在线精品视频 | 国产视频二区 | 99re视频在线免费观看 | 欧美另类视频 | 亚洲精品视频免费看 | 国产丝袜一区二区三区免费视频 | 亚洲国产aⅴ精品 | 成人免费区一区二区三区 | 日韩亚洲欧美综合 | 日韩欧美中文字幕在线观看 | www视频在线观看 | 精品99爱视频在线观看 | 久久影音先锋 | www精品美女久久久tv | 国产在线资源 | 午夜精品久久久久久久久久久久 | 九色在线视频 | 一级毛片免费 | 无码国模国产在线观看 | 中文字幕日韩欧美一区二区三区 | 在线高清免费观看视频 | 欧美a区| 99自拍视频| 精品无码三级在线观看视频 | 波多野结衣一区二区三区在线观看 | 亚洲午夜视频 | 一区二区三区在线 | 欧美日韩成人网 | 国产精品美女久久久久aⅴ国产馆 |