找回密码
 立即注册

QQ登录

只需一步,快速开始

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

互联网远程控制

[复制链接]
跳转到指定楼层
楼主
ID:136435 发表于 2016-8-10 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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"

/********************************************************************/
/* 本程序仅供学习参考,未经作者允许,不得用于任何商业用途                                  */
/* 本程序为Fuhome互联网远程控制终端静系列专用程序                            */
/* 适用于硬件平台  采用W5500+STM32F103C8T6 64K+20K                                                  */                                                                            */
/* 单片机相关配置,I/O口定义,定时器,串口,中断等初始化函数                   */
/* 本程序用于硬件设备接入fuhome.net 平台进行远程控制(手机APP/微信/WEB */
/* 版本:v1.2 2016年6月30日                                                                                                        */
/* 龙剑奋斗                                                                                                                                                */
/* 定期更新,敬请关注——开放,交流,深入,进步                                                        */
/* Copyright  未来之家 实验室,让科技融入生活                                        */
/********************************************************************/


int main(void)
{
        U8 i=0;
        U8 Data_Have=0;//0 没有数据 1有数据,第一次运行时写入固定数据

         
         
         SystemInit();                          //系统时钟初始化为72M          SYSCLK_FREQ_72MHz
        delay_init(72);             //延时函数初始化
        NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
         Uart_Init(9600);                 //波特率 9600
        
          //KEY_Init();              //IO初始化
    //EXTIX_Init();
    Timerx_Init(99,7100);//定时器3延时 10ms

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

          //读取工作参数
          STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
         
                //是否需要写入
                if(fu_temp[0]!=0xac||fu_temp[1]!=0xa2)
                {
                        //第一次需要写入数据了
                        STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)fu_index,62);
                  //读取工作参数
                        STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
    }
               
                //如果不对,那说明单片机有问题,进入死循环
                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);
                                

                //是否进入设置
                Set_Flag=Key_Scan();
                while(Set_Flag)//设置完成必须重启才能
                {
                        SYS=0;
                        OUT=0;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                        delay_ms(500);
                }   
               
                //分析工作模式及设置参数
                //1/IP模式 0自动获取 1固定IP 2/工作模式 0远控 1透传
                 Get_IP=fu_temp[2];
                 Work_Sta=fu_temp[21];
                 Tihuan();
               

                SPI_Configuration();                //W5500 SPI初始化配置(STM32 SPI1)
    W5500_GPIO_Configuration();        //W5500 复位IO配置        
                W5500_Hardware_Reset();                //硬件复位W5500
         
          Load_All();     //子网掩码和MAC等固定信息
               
                //自动获取IP
                if(Get_IP==0x00)
                {
                        //装DHCP网络参数
                        Load_Auto();               
                 
                        W5500_Init();                  //初始化W5500寄存器函数
                        Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0 端口号
                        
                        W5500_Socket0_Set();//W5500端口0初始化配置,防止断开连接等让再次连接
                        SYS=1;
                        OUT=0;
                        IN=0;
                        DHCP();
                        SYS=1;
                        OUT=1;
                        IN=1;//指示已经获取到IP
                }
                //固定IP
                else
                {
                        //装载固定IP参数
                        Load_Keep();
                        W5500_Init();                  //初始化W5500寄存器函数
                        Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0 端口号
                        
                        W5500_Socket0_Set();//W5500端口0初始化配置,防止断开连接等让再次连接
                        
                        SYS=0;
                        OUT=1;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=0;
                        IN=1;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                }
               
  //设置本地端口7001
  Update_Port();
        Heart_Bag();

while (1)
        {
               
                        //是否进入设置
                Set_Flag=Key_Scan();
                while(Set_Flag)//设置完成必须重启才能
                {
                        SYS=0;
                        OUT=0;
                        IN=0;
                        delay_ms(500);
                        SYS=1;
                        OUT=1;
                        IN=1;
                        delay_ms(500);
                }  
               
                W5500_Socket0_Set();//W5500端口0初始化配置,防止断开连接等让再次连接
                        
                W5500_Interrupt_Process();//W5500中断处理程序,用来读取数据

                if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
                {
                        S0_Data&=~S_RECEIVE;
                        Process_UDP();//W5500接收并发送接收到的数据
                }
               

                //每30s心跳一次
                if( W5500_Send_Delay_Counter%3000==0)
                {
                        
                        SYS=1;//指示灯熄灭,待收到心跳包后服务器正常会亮起
                        
      Heart_Bag();        
    }
                if( W5500_Send_Delay_Counter%3500==0)//30s每次发送
                {
                        //传感器包 0温度 1湿度,两次发送至少间隔5s
     Feel_bag(0);
    }
                else if( W5500_Send_Delay_Counter%4000==0)//35s每次发送
                {
                        //传感器包 0温度 1湿度,两次发送至少间隔5s
     Feel_bag(1);
    }
               
                //每半个租期自动获取一次IP
               
                if(TimerS_Counter==DHCP_Time/2)
                {
                 TimerS_Counter=0;
     DHCP();
    }
               
        

               
               
               
        }
         
        
}
         
         


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:136743 发表于 2016-8-19 18:53 | 只看该作者
好人啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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