標(biāo)題: 互聯(lián)網(wǎng)遠(yuǎn)程控制 [打印本頁(yè)]

作者: rye    時(shí)間: 2016-8-10 15:26
標(biāo)題: 互聯(lián)網(wǎng)遠(yuǎn)程控制
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"

#include "exti.h"
#include "ex_out.h"
#include "ex_in.h"
#include "W5500.h"
#include "net.h"
#include "value.h"
#include "fu_dhcp.h"
#include "flash.h"
#include "dht12.h"

/********************************************************************/
/* 本程序僅供學(xué)習(xí)參考,未經(jīng)作者允許,不得用于任何商業(yè)用途                                  */
/* 本程序?yàn)镕uhome互聯(lián)網(wǎng)遠(yuǎn)程控制終端靜系列專(zhuān)用程序                            */
/* 適用于硬件平臺(tái)  采用W5500+STM32F103C8T6 64K+20K                                                  */                                                                            */
/* 單片機(jī)相關(guān)配置,I/O口定義,定時(shí)器,串口,中斷等初始化函數(shù)                   */
/* 本程序用于硬件設(shè)備接入fuhome.net 平臺(tái)進(jìn)行遠(yuǎn)程控制(手機(jī)APP/微信/WEB */
/* 版本:v1.2 2016年6月30日                                                                                                        */
/* 龍劍奮斗                                                                                                                                                */
/* 定期更新,敬請(qǐng)關(guān)注——開(kāi)放,交流,深入,進(jìn)步                                                        */
/* Copyright  未來(lái)之家 實(shí)驗(yàn)室,讓科技融入生活                                        */
/********************************************************************/


int main(void)
{
        U8 i=0;
        U8 Data_Have=0;//0 沒(méi)有數(shù)據(jù) 1有數(shù)據(jù),第一次運(yùn)行時(shí)寫(xiě)入固定數(shù)據(jù)

         
         
         SystemInit();                          //系統(tǒng)時(shí)鐘初始化為72M          SYSCLK_FREQ_72MHz
        delay_init(72);             //延時(shí)函數(shù)初始化
        NVIC_Configuration();//設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
         Uart_Init(9600);                 //波特率 9600
        
          //KEY_Init();              //IO初始化
    //EXTIX_Init();
    Timerx_Init(99,7100);//定時(shí)器3延時(shí) 10ms

          Ex_in_Init();
          Ex_out_Init();
          DHT12_Init();

          //讀取工作參數(shù)
          STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
         
                //是否需要寫(xiě)入
                if(fu_temp[0]!=0xac||fu_temp[1]!=0xa2)
                {
                        //第一次需要寫(xiě)入數(shù)據(jù)了
                        STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)fu_index,62);
                  //讀取工作參數(shù)
                        STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
    }
               
                //如果不對(duì),那說(shuō)明單片機(jī)有問(wèn)題,進(jìn)入死循環(huán)
                if(fu_temp[0]!=0xAc||fu_temp[1]!=0xA2)
                {
                        while(1)
                        {
                                SYS=0;
                                OUT=1;
                                IN=1;
                                delay_ms(200);
                                SYS=0;
                                OUT=0;
                                IN=1;
                                delay_ms(200);
                                SYS=0;
                                OUT=0;
                                IN=0;
                                delay_ms(200);
                        }
    }
               
               
                SYS=0;
                OUT=1;
                IN=1;
                delay_ms(200);
                SYS=0;
                OUT=0;
                IN=1;
                delay_ms(200);
                SYS=0;
                OUT=0;
                IN=0;
                delay_ms(200);
                                

                //是否進(jìn)入設(shè)置
                Set_Flag=Key_Scan();
                while(Set_Flag)//設(shè)置完成必須重啟才能
                {
                        SYS=0;
                        OUT=0;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                        delay_ms(500);
                }   
               
                //分析工作模式及設(shè)置參數(shù)
                //1/IP模式 0自動(dòng)獲取 1固定IP 2/工作模式 0遠(yuǎn)控 1透?jìng)?br />                  Get_IP=fu_temp[2];
                 Work_Sta=fu_temp[21];
                 Tihuan();
               

                SPI_Configuration();                //W5500 SPI初始化配置(STM32 SPI1)
    W5500_GPIO_Configuration();        //W5500 復(fù)位IO配置        
                W5500_Hardware_Reset();                //硬件復(fù)位W5500
         
          Load_All();     //子網(wǎng)掩碼和MAC等固定信息
               
                //自動(dòng)獲取IP
                if(Get_IP==0x00)
                {
                        //裝DHCP網(wǎng)絡(luò)參數(shù)
                        Load_Auto();               
                 
                        W5500_Init();                  //初始化W5500寄存器函數(shù)
                        Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0 端口號(hào)
                        
                        W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開(kāi)連接等讓再次連接
                        SYS=1;
                        OUT=0;
                        IN=0;
                        DHCP();
                        SYS=1;
                        OUT=1;
                        IN=1;//指示已經(jīng)獲取到IP
                }
                //固定IP
                else
                {
                        //裝載固定IP參數(shù)
                        Load_Keep();
                        W5500_Init();                  //初始化W5500寄存器函數(shù)
                        Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0 端口號(hào)
                        
                        W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開(kāi)連接等讓再次連接
                        
                        SYS=0;
                        OUT=1;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=0;
                        IN=1;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                }
               
  //設(shè)置本地端口7001
  Update_Port();
        Heart_Bag();

while (1)
        {
               
                        //是否進(jìn)入設(shè)置
                Set_Flag=Key_Scan();
                while(Set_Flag)//設(shè)置完成必須重啟才能
                {
                        SYS=0;
                        OUT=0;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                        delay_ms(500);
                }  
               
                W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開(kāi)連接等讓再次連接
                        
                W5500_Interrupt_Process();//W5500中斷處理程序,用來(lái)讀取數(shù)據(jù)

                if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到數(shù)據(jù)
                {
                        S0_Data&=~S_RECEIVE;
                        Process_UDP();//W5500接收并發(fā)送接收到的數(shù)據(jù)
                }
               

                //每30s心跳一次
                if( W5500_Send_Delay_Counter%3000==0)
                {
                        
                        SYS=1;//指示燈熄滅,待收到心跳包后服務(wù)器正常會(huì)亮起
                        
      Heart_Bag();        
    }
                if( W5500_Send_Delay_Counter%3500==0)//30s每次發(fā)送
                {
                        //傳感器包 0溫度 1濕度,兩次發(fā)送至少間隔5s
     Feel_bag(0);
    }
                else if( W5500_Send_Delay_Counter%4000==0)//35s每次發(fā)送
                {
                        //傳感器包 0溫度 1濕度,兩次發(fā)送至少間隔5s
     Feel_bag(1);
    }
               
                //每半個(gè)租期自動(dòng)獲取一次IP
               
                if(TimerS_Counter==DHCP_Time/2)
                {
                 TimerS_Counter=0;
     DHCP();
    }
               
        

               
               
               
        }
         
        
}
         
         



作者: lmy    時(shí)間: 2016-8-19 18:53
好人啊





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1