基于STC8F2A08S2及ESP8266的设计的物联模块,可以任意设置模块中的IP地址。模块支持8路的IO输出,4路的IO输入。有C51源码调试程序。
Altium DesignerPCB图如下:(51hei附件中可下载工程文件)
基于ESP8266物联模块
单片机源程序如下:
- /*
- 多屏多媒体互动HDMI切换及管理程序
- 使用STC单片机:STC8F2A08S2
- Copyright 201.01.25
- All rights reserved.
- 文件名 :HDMI-RS232.c
- 模块名称:
- 作者:戴
- 功能概要:
- 版本:4.1.0
- 修改人 :
- 完成日期:
- 升级说明:
- */
- #include "STC8Fxx.h"
- #include "intrins.h"
- #define INT8U unsigned char
- #define INT16U unsigned int
- #define FOSC 22118400UL
- #define BRT1 (256 - FOSC / 115200 / 32)
- #define BRT2 (65536 - (FOSC / 9600 / 4))
- #define OK 1 //设置成功标识状态
- #define FLASE 0 //设置失败标识状态
- #define LAMP_CMD_ON 0x31 //控制位 开
- #define LAMP_CMD_OFF 0x30 //控制位 关
- #define CMD_HDMI1 0xFE //HDMI指令起始码
- #define CMD_HDMI2 0x00 //HDMI指令机器码 机器地址码为:01~F0H 00H为广播码,出厂默认值
- #define CMD_HDMI3 0x33 //HDMI指令操作码 波特率设置:31H :2400bits/S 32H :4800bits/S 33H :9600bits/S 34H :19200bits/S
- #define CMD_HDMI31 0x31 //HDMI指令操作数 HDMI输入:1#端口31 2#端口32 3#端口33
- #define CMD_HDMI32 0x32
- #define CMD_HDMI33 0x33
- #define CMD_HDMI4 0xAA //HDMI指令结束码
- #define CMD_RET_CODEOK 0xF0 //HDMI指令返回码 F0成功
- #define CMD_RET_CODEEER 0xF1 //HDMI指令返回码 F1失败
- #define BEGINCODE 0x2B //串口通讯格式前置码 +
- #define ENDCODE 0x23 //串口通讯格式结束码 #
- #define FUNCODE_ENQ 0x30 //功能格式码 查询切换器状态码
- #define HDMI1FUNCODE 0x31 //切换HDMI1功能码
- #define HDMI2FUNCODE 0x32 //切换HDMI2功能码
- #define HDMI3FUNCODE 0x33 //切换HDMI3功能码
- #define HDMI_CHANNEL1 0x31 //HDMI输入通道号
- #define HDMI_CHANNEL2 0x32 //HDMI输入通道号
- #define HDMI_CHANNEL3 0x33 //HDMI输入通道号
- #define ENTER1 0x0d //回车符
- #define ENTER2 0x0a //回车符
- //#define WIFI_NAME_LEN 7 //WiFi SSID号
- //#define WIFI_PASS_LEN 11 //WiFi Password
- //=========================================================
- /* WiFi模块控制指令定义 ASCII码 */
- #define WIFI_MODE_SERVER 0x31 //开启server 自动建立后,TCP server 监听 0为关闭server模式
- #define WIFI_MODE_SEND_ID 0x30 //发送数据传输连接的ID 1
- #define WIFI_MODE_STA 0x31 //模块设置为STA模式
- #define WIFI_MODE_AP 0x32 //模块设置为AP模式
- #define WIFI_MODE_APSTA 0x33 //模块设置为AP和STA共存模式
- #define WIFI_MODE_MUX0 0x30 //单路连接参数
- #define WIFI_MODE_MUX1 0x31 //多路连接参数
- #define WIFI_MODE_MODE0 0x30 //非透传模式参数
- #define WIFI_MODE_MODE1 0x31 //透传模式参数
- #define CODE_EQU 0x3D // =
- #define CODE_PLUS 0x2B // +
- #define CODE_QUO 0x22 // "
- #define CODE_SEM 0x2C // ,
- #define CODE_HDMI 0x23
- //=========================================================
- /* STC0F2A08S2(EEPROM读写) */
- #define CMD_IDLE 0
- #define CMD_READ 1
- #define CMD_PROGRAM 2
- #define CMD_ERASE 3
- //#define ENABLE_IAP 0x80 //if SYSCLK<30MHz
- //#define ENABLE_IAP 0x81 //if SYSCLK<24MHz
- #define ENABLE_IAP 0x82 //if SYSCLK<20MHz
- //#define ENABLE_IAP 0x83 //if SYSCLK<12MHz
- //#define ENABLE_IAP 0x84 //if SYSCLK<6MHz
- //#define ENABLE_IAP 0x85 //if SYSCLK<3MHz
- //#define ENABLE_IAP 0x86 //if SYSCLK<2MHz
- //#define ENABLE_IAP 0x87 //if SYSCLK<1MHz
- #define IAP_ADDRESS1 0x0000
- #define IAP_ADDRESS2 0x0200
- #define IAP_ADDRESS3 0x0400
- #define IAP_ADDRESS4 0x0600
- #define IAP_ADDRESS5 0x0800
- sbit ledx = P5^5;
- sbit device_5 = P5^4;
- sbit DEVICE1 = P1^6;
- sbit DEVICE2 = P1^7;
- sbit LAMP1 = P3^2;
- sbit LAMP2 = P3^3;
- sbit LAMP3 = P3^4;
- sbit LAMP4 = P3^5;
- sbit LAMP5 = P3^6;
- sbit LAMP6 = P3^7;
- INT8U HDMI_ID_STR[7] = "ID=SZHT";
- //INT8U CMD_HDMI[4] = "HDMI";
- //INT8U CMD_PORT_STATUS[4] = "PORT";
- INT8U LAMP_CODE[6] = {0x01,0x02,0x04,0x08,0x10,0x20};
- INT8U DECIVE_CODE[3] = {0x01,0x02,0x04};
- //=========================================================
- /* WiFi模块控制指令定义 */
- //INT8U xdata WIFI_NAME[7] = "SZHT008"; //WiFi SSID名称
- //INT8U xdata WIFI_RST[3] = "RST";
- //INT8U xdata WIFI_PASS[11] = "szht@123456"; //WiFi登陆密码
- //INT8U xdata WIFI_MODE_TCP[3] = "UDP"; // UDP
- //INT8U xdata WIFI_MODE_IP[11] = "192.168.0.1";// IP
- INT8U xdata WIFI_MODE_PORT[4] = "9099";
- INT8U xdata CMD_WIFI_AT[2] = "AT";
- INT8U xdata CMD_WIFI_WORKMODE[6] = "CWMODE"; //设置WiFi模块的工作模式
- //INT8U xdata CMD_WIFI_PASS[5] = "CWJAP"; //设置WiFi模块的用户名和密码
- INT8U xdata CMD_WIFI_MUX[6] = "CIPMUX"; //启动连接模式
- INT8U xdata CMD_WIFI_SERVER[9] = "CIPSERVER"; //多连接TCP Server模式
- //INT8U xdata CMD_WIFI_START[8] = "CIPSTART"; //建立TCP连接或注册
- //INT8U xdata CMD_WIFI_TRAMODE[7] = "CIPMODE"; //WiFi模块传输模式
- INT8U xdata CMD_WIFI_SEND[7] = "CIPSEND"; //开始发送数据
- //INT8U xdata CMD_WIFI_IP[4] = "PING";
- //INT8U xdata CMD_WIFI_END[3] = "+++"; //结束透传模式 注意:+++后面没有回车符
- INT8U IPA_ID[4];
- INT8U UART1_BUF[24]; //可接收缓冲区
- INT8U UART2_BUF[2];
- INT8U DHMI_ID; //计数标示
- INT8U r_buf_num=0,r_data_len=0; //串口参数变量
- INT8U PORT1_STATUS_CMD=0,PORT1_STATUS=0; //控制端口参数变量
- INT8U PORT3_STATUS_CMD=0,PORT3_STATUS=0;
- INT8U P1_STATUS,P3_STATUS;
- INT8U port_status1,port_status3;
- INT16U TIMER_NUM=0;
- code INT8U CMD_EER_DATA[5] = "FLASE"; //发送错误代码
- code INT8U CMD_OK_DATA[2] = "OK"; //发送正确代码
- //==============================================================
- INT8U HexToBit(INT8U bBit) reentrant;
- void s1end_uart_one(INT8U s1data); /* 串口1发送数据 */
- void UART_one_Interrupt_Receive(void); /* 串口1中断接收 */
- //==============================================================
- void s2end_uart_two(INT8U s2data); /* 串口2发送数据 */
- void UART_two_Interrupt_Receive(void); /* 串口2中断接收 */
- //==============================================================
- void wifi_init(void); /* 初始化WIFI模块 */
- void com_reset();
- void delay(); /* 一秒延时 */
- void com_send_error() reentrant; /* 发送错误代码 */
- void com_send_ok() reentrant; /* 发送正确代码 */
- void com_send_status() reentrant; /* 发送设备ID代码 */
- INT8U check_cmd_pack_start(); /* 检查包头合理性 */
- void parse_cmd1(); /* 功能分析函数 */
- void parse_cmd2(); /* 功能分析函数 */
- void parse_cmd3(); /* 功能分析函数 */
- void parse_cmd4(); /* 功能分析函数 */
- void parse_cmd5(); /* 功能分析函数 */
- void parse_cmd6(); /* 功能分析函数 */
- void send_wifi_cmd_rst(INT8U cmd[],INT8U cmd_len) reentrant ;
- void send_settings_cmd_send(INT8U cmd[],INT8U cmd_len,INT8U send_len) reentrant;
- void send_settings_cmd_send1(INT8U cmd[],INT8U cmd_len,INT8U send_len1,INT8U send_len2) reentrant;
- void send_settings_cmd_one(INT8U cmd[],INT8U cmd_len) reentrant;
- void send_settings_cmd_one_enter_1(INT8U cmd[],INT8U cmd_len,INT8U valuelen);
- void send_settings_cmd_one_enter_2(INT8U cmd1[],INT8U cmd_len1,INT8U valuelen1,INT8U cmd2[],INT8U cmd_len2);
- void send_settings_cmd_one_wifi(INT8U cmd1[],INT8U cmd1_len,INT8U cmd2[],INT8U cmd2_len);
- void send_settings_cmd_one_net(INT8U cmd1[],INT8U cmd1_len,INT8U cmd2[],INT8U cmd2_len,INT8U cmd3[],INT8U cmd3_len);
- void UART_TC_ONE(INT8U *str); /* 发送一串字符函数 */
- void send_settings_cmd_two(INT8U hdmiID) reentrant;
- void send_hdmi_cmd(INT8U hdmi) reentrant;
- void send_port_cmd(INT8U port_val,INT8U port) reentrant;
- void send_cmd_ping_ip();
- //==============================================================
- // STC12C5A16S2(EEPROM读写)
- void Delayx(INT8U n);
- void IapIdle();
- void IapWriteByte(INT16U addr, INT8U dat);
- void IapEraseSector(INT16U addr);
- INT8U IapReadByte(INT16U addr);
- /******************************************************************************************
- * 函数名称 :void HexToBit(INT8U bBit) reentrant
- * 功能描述 :十六进制字节后4为字节函数
- ******************************************************************************************/
- INT8U HexToBit(INT8U bBit) reentrant
- {
- bBit =(bBit & 0x0f); //屏蔽高四位
- bBit = bBit + 0x30;
- return bBit;
- }
- /******************************************************************************************
- * 函数名称 :s1end_uart_one(INT8U s1data)
- * 功能描述 :串口1发送数据的函数
- ******************************************************************************************/
- void s1end_uart_one(INT8U s1data)
- {
- ES = 0 ;
- SBUF = s1data ;
- while(TI==0);
- TI = 0;
- ES = 1 ;
- }
- /******************************************************************************************
- * 函数名称 :s2end_uart_two(INT8U s2data)
- * 功能描述 :串口2发送数据
- ******************************************************************************************/
- void s2end_uart_two(INT8U s2data)
- {
- IE2 = 0x01 ; //ES2 = 1 ;
- S2CON&=0xfd ; //S2TI = 0 ;
- S2BUF = s2data;
- while((S2CON&0x02)!=0x02);
- S2CON &= ~0x02;
- IE2 = 0x01 ; //ES2 = 1 ;
- ES = 1;
- }
- /******************************************************************************************
- * 函数名称 :com_reset()
- * 功能描述 :将串口中的设置值,初始化函数
- ******************************************************************************************/
- void com_reset()
- {
- r_buf_num =0;
- r_data_len=0;
- }
- void send_settings_cmd_send(INT8U cmd[],INT8U cmd_len,INT8U send_len) reentrant // 发送字串带回车符 0x0D 0x0A
- {
- INT8U i = 0;
- send_settings_cmd_one(CMD_WIFI_AT,2);
- s1end_uart_one(CODE_PLUS);
- for(i=0;i<cmd_len;++i) // 发送指令格式
- {
- s1end_uart_one(cmd[i]);
- }
- s1end_uart_one(CODE_EQU);
- s1end_uart_one(WIFI_MODE_SEND_ID);
- s1end_uart_one(CODE_SEM);
- s1end_uart_one(send_len);
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
- void send_settings_cmd_send1(INT8U cmd[],INT8U cmd_len,INT8U send_len1,INT8U send_len2) reentrant // 发送字串带回车符 0x0D 0x0A
- {
- INT8U i = 0;
- send_settings_cmd_one(CMD_WIFI_AT,2);
- s1end_uart_one(CODE_PLUS);
- for(i=0;i<cmd_len;++i) // 发送指令格式
- {
- s1end_uart_one(cmd[i]);
- }
- s1end_uart_one(CODE_EQU);
- s1end_uart_one(WIFI_MODE_SEND_ID);
- s1end_uart_one(CODE_SEM);
- s1end_uart_one(send_len1);
- s1end_uart_one(send_len2);
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
- void send_settings_cmd_one(INT8U cmd[],INT8U cmd_len) reentrant // 发送字串不带回车符
- {
- INT8U i = 0;
- for(i=0;i<cmd_len;++i) // 发送指令格式
- {
- s1end_uart_one(cmd[i]);
- }
- }
- void send_settings_cmd_one_enter_1(INT8U cmd[],INT8U cmd_len,INT8U valuelen) //发送Wifi模块一般指令,带回车符。
- {
- INT8U i = 0;
- for(i=0;i<cmd_len;++i) // 发送指令格式
- {
- s1end_uart_one(cmd[i]);
- }
- s1end_uart_one(CODE_EQU);
- s1end_uart_one(valuelen);
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
- void send_settings_cmd_one_enter_2(INT8U cmd1[],INT8U cmd_len1,INT8U valuelen1,INT8U cmd2[],INT8U cmd_len2) //发送Wifi模块一般指令,带回车符。
- {
- send_settings_cmd_one(cmd1,cmd_len1);
- s1end_uart_one(CODE_EQU);
- s1end_uart_one(valuelen1);
- s1end_uart_one(CODE_SEM);
- send_settings_cmd_one(cmd2,cmd_len2);
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
-
- /*********************************************************************************************
- * 函数名:UART串口2发送字符串函数
- * 调 用:UART_TC_TWO (?);
- * 参 数:需要UART串口发送的数据(8位/1字节)
- * 返回值:无
- * 结果:向串口发送一个字符串,长度不限。
- * 备 注:例:UART_TC("d9887321[ DISCUZ_CODE_0 ]quot;); 此函数需要#include <string.h>头文件支持。
- /**********************************************************************************************/
- void send_settings_cmd_two(INT8U hdmiID) reentrant
- {
- s2end_uart_two(CMD_HDMI1);
- s2end_uart_two(CMD_HDMI2);
- s2end_uart_two(CMD_HDMI3);
- s2end_uart_two(hdmiID);
- s2end_uart_two(CMD_HDMI4);
- }
- /******************************************************************************************
- * 函数名称 :com_send_error()
- * 功能描述 :通讯中接收到错误码发出的函数
- ******************************************************************************************/
- void com_send_error() reentrant
- {
- INT8U p=0,k=0;
- for(k=0;k<5;k++)
- {
- s1end_uart_one(CMD_EER_DATA[k]);
- }
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
- /******************************************************************************************
- * 函数名称 :com_send_ok()
- * 功能描述 :通讯中接收到成功码发出的函数
- ******************************************************************************************/
- void com_send_ok() reentrant
- {
- INT8U p=0,k=0;
- for(k=0;k<2;k++)
- {
- s1end_uart_one(CMD_OK_DATA[k]);
- }
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- }
- /******************************************************************************************
- * 函数名称 :com_send_status()
- * 功能描述 :通讯中接收到设备ID码发出的函数
- ******************************************************************************************/
- void com_send_status() reentrant
- {
- INT8U k,i;
- for(k=0;k<7;k++) { s1end_uart_one(HDMI_ID_STR[k]); }
- for(i=4;i>0;i--) { IPA_ID[i-1] = IapReadByte(IAP_ADDRESS1+i); }
- for(k=4;k>0;k--) { s1end_uart_one(IPA_ID[k-1]); }
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- // for(k=0;k<3;k++) { s1end_uart_one(WIFI_MODE_TCP[k]); } //发送TCP或UDP
- // s1end_uart_one(CODE_EQU);
- // for(k=0;k<10;k++) { s1end_uart_one(WIFI_MODE_IP[k]); } //发送IP地址
- // s1end_uart_one(CODE_SEM);
- // for(k=0;k<4;k++) { s1end_uart_one(WIFI_MODE_PORT[k]); } //发送端口号
- }
-
- //void delay() /* 一秒延时 */
- //{
- // INT16U j,g;
- // j=0;
- // g=0;
- // for(j=0;j<5;j++)
- // {
- // for(g=0;g<500;g++)
- // {
- // _nop_();
- // _nop_();
- // _nop_();
- // _nop_();
- // _nop_();
- // }
- // }
- //}
- void InitUART(void) //初始化6T模式
- {
- SCON = 0x50;
- TMOD = 0x20;
- // PCON = 0x80;//波特率加倍
- TH1 = TL1 = BRT1;
- TR1 = 1;
- AUXR = 0x40;
- ES = 1;
- EA=1;
- S2CON = 0x50; //串口2工作在方式1 10位异步收发 S2REN=1允许接收
- T2L = BRT2; //设置波特率重装值
- T2H = BRT2>>8; //独立波特率发生器初值
- AUXR |= 0x14; //BRTR=1 独立波特率发生器开始计数
- IE2 = 0x01; //开串口2中断 ES2=1
- }
- /******************************************************************************************
- * 函数名称 :UART_one_Interrupt_Receive(void)
- * 功能描述 :WiFi模块程序
- ******************************************************************************************/
- void wifi_init(void)
- {
- ledx = 0;
- send_settings_cmd_one(CMD_WIFI_AT,2);
- s1end_uart_one(CODE_PLUS);
- send_settings_cmd_one_enter_1(CMD_WIFI_WORKMODE,6,WIFI_MODE_APSTA); // CWMODE 设置WiFi模块工作模式:AP和STA共存模式
- ledx = 1;
- Delayx(100);
- // 1-STA模式,2-AP模式,3-AP和STA模式共存
- ledx = 0;
- send_settings_cmd_one(CMD_WIFI_AT,2);
- s1end_uart_one(CODE_PLUS);
- send_settings_cmd_one_enter_1(CMD_WIFI_MUX,6,WIFI_MODE_MUX1); // CIPMUX 设置连接方式:0-单连接 ,1-多连接
- ledx = 1;
- Delayx(100);
- ledx = 0;
- send_settings_cmd_one(CMD_WIFI_AT,2);
- s1end_uart_one(CODE_PLUS);
- send_settings_cmd_one_enter_2(CMD_WIFI_SERVER,9,WIFI_MODE_SERVER,WIFI_MODE_PORT,4);
- ledx = 1;
- Delayx(500);
- ledx = 0;
- // send_settings_cmd_one(CMD_WIFI_AT,2);
- // s1end_uart_one(CODE_PLUS);
- // send_settings_cmd_one_enter(CMD_WIFI_TRAMODE,7,WIFI_MODE_MODE1); // CIPMODE 设置透传模式:0-非透传,1-透传。
- // Delayx(20);
- // send_settings_cmd_one(CMD_WIFI_AT,2); //连接TCP/IP服务器
- // s1end_uart_one(CODE_PLUS);
- // send_settings_cmd_one(CMD_WIFI_START,8); // CIPSTART
- // s1end_uart_one(CODE_EQU);
- // send_settings_cmd_one_net(WIFI_MODE_TCP,3,WIFI_MODE_IP,10,WIFI_MODE_PORT,4);
- // Delayx(1000);
- // send_settings_cmd_one(CMD_WIFI_AT,2);
- // s1end_uart_one(CODE_PLUS);
- // send_settings_cmd_send(CMD_WIFI_SEND,7);
- }
- /******************************************************************************************
- * 函数名称 :PORT_Init(void)
- * 功能描述 :I/O端口初始化程序
- ******************************************************************************************/
- void PORT_Init(void)
- {
- P54 = P16 = P17 = 0;
- P32 = P33 = P34 = P35 = P36 = P37 = 0;
- P1_STATUS = IapReadByte(IAP_ADDRESS3);
- P3_STATUS = IapReadByte(IAP_ADDRESS4);
- port_status1 = 0;
- port_status3 = 0;
- }
- /******************************************************************************************
- * 函数名称 :Timer0Init(void)
- * 功能描述 :定时器0初始化程序
- ******************************************************************************************/
- void Timer0Init(void) //2毫秒@22.1184MHz
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0x33; //设置定时初值
- TH0 = 0x53; //设置定时初值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- ET0 = 1; //使能定时器中断
- EA = 1;
- }
- /******************************************************************************************
- * 函数名称 :UART_one_Interrupt_Receive(void)
- * 功能描述 :串口1中断接收程序
- ******************************************************************************************/
- void UART_one_Interrupt_Receive(void) interrupt 4 // 串口1中断接收,下位机10ms发送一次
- {
- INT8U i = 0,p = 0,temp,stat1,stat2;
- if(RI==1)
- {
- temp = SBUF ;
- RI = 0 ;
- UART1_BUF[r_buf_num] = temp;
-
- if(UART1_BUF[0] == BEGINCODE)
- {
- if(UART1_BUF[r_buf_num] != ENDCODE) //进行接收指令头判断
- {
- if(UART1_BUF[1] == '3')
- {
- com_reset();
- return;
- }
- r_buf_num++;
- r_data_len = r_buf_num;
- }
- else
- {
- stat1 = UART1_BUF[9];
- stat2 = UART1_BUF[r_data_len];
- switch(stat1)
- {
- case 'H': //HDMI码 0x48="H"
- parse_cmd1();
- com_reset(); //清空接收缓冲区的计数值
- break;
- case 'L': //LAMP码 0x4C="L"
- parse_cmd2();
- com_reset();
- break;
- case 'D': //DEVICE码 0x44="D"
- parse_cmd3();
- com_reset();
- break;
- case 'W': //WRITE写ID码 0x57="W"
- parse_cmd4();
- com_reset();
- break;
- case 'R': //读现在读灯控及设备控制状态
- parse_cmd5();
- com_reset();
- break;
- case 'S': //读灯控及设备控制状态STATUS
- parse_cmd6();
- com_reset();
- break;
- default:
- com_reset(); //清空接收缓冲区的计数值
- }
- }
- }
- else
- {
- com_reset(); //清空接收缓冲区的计数值
- }
- }
- else
- {
- TI = 0 ;
- }
- }
- /******************************************************************************************
- * 函数名称 :UART_two_Interrupt_Receive(void)
- * 功能描述 :串口2中断接收程序
- ******************************************************************************************/
- void UART_two_Interrupt_Receive(void) interrupt 8 // 串口2中断接收
- {
- INT8U k = 0,i = 0,temp;
- k = S2CON ;
- k = k&0x01; //if(S2RI==1) //
- if(k==1)
- {
- S2CON = S2CON&0xfe; //S2RI=0;
- temp = S2BUF ;
- if(i <= 2)
- {
- UART2_BUF[i] = temp;
- i++;
- }
- if(UART2_BUF[0] == CMD_RET_CODEOK)
- {
- send_settings_cmd_send(CMD_WIFI_SEND,7,0x32);
- Delayx(20);
- com_send_ok();
- }
- if(UART2_BUF[0] == CMD_RET_CODEEER)
- {
- send_settings_cmd_send(CMD_WIFI_SEND,7,0x35);
- Delayx(20);
- com_send_error();
- }
- }
- else
- {
- S2CON = S2CON&0xfd; //S2TI=0;
- }
- }
- /******************************************************************************************
- * 函数名称 :parse_cmd()
- * 功能描述 :串口接收数据功能分析函数
- ******************************************************************************************/
- void parse_cmd1()
- {
- INT8U stat1=UART1_BUF[r_buf_num-1];
- switch(stat1)
- {
- case HDMI_CHANNEL1:
- Delayx(10); //切换HDMI 1#通道。
- send_settings_cmd_two(CMD_HDMI31);
- DHMI_ID = HDMI1FUNCODE;
-
- break;
- case HDMI_CHANNEL2: //切换HDMI 2#通道。
- Delayx(10);
- send_settings_cmd_two(CMD_HDMI32);
- DHMI_ID = HDMI2FUNCODE;
- break;
- case HDMI_CHANNEL3: //切换HDMI 3#通道。
- Delayx(10);
- send_settings_cmd_two(CMD_HDMI33);
- DHMI_ID = HDMI3FUNCODE;
- break;
- case FUNCODE_ENQ: //查询灯控与设备控制状态
- Delayx(10);
- send_settings_cmd_send(CMD_WIFI_SEND,7,0x32);
- Delayx(20);
- s1end_uart_one(port_status1);
- s1end_uart_one(port_status3);
- s1end_uart_one(ENTER1);
- s1end_uart_one(ENTER2);
- break;
- default:
- com_reset(); //清空接收缓冲区的计数值
- }
- }
- void parse_cmd2()
- {
- INT8U stat1=UART1_BUF[r_buf_num-2],stat2=UART1_BUF[r_buf_num-1];
- if(stat1 == LAMP_CMD_ON) //开灯
- {
- PORT1_STATUS = stat2;
- PORT1_STATUS_CMD = HexToBit(PORT1_STATUS);
- // s1end_uart_one(PORT1_STATUS_CMD); //调试用
- switch(PORT1_STATUS_CMD)
- {
- case '1': // 打开 P1.4 第一盏灯。
- LAMP1 = 1;
- port_status1 |= LAMP_CODE[0];
- break;
- case '2': // 打开 P1.6 第二盏灯。
- LAMP2 = 1;
- port_status1 |= LAMP_CODE[1];
- break;
- case '3': // 打开 P1.7 第三盏灯。
- LAMP3 = 1;
- port_status1 |= LAMP_CODE[2];
- break;
- case '4': // 打开 P1.7 第四盏灯。
- LAMP4 = 1;
- port_status1 |= LAMP_CODE[3];
- break;
- case '5': // 打开 P1.7 第五盏灯。
- LAMP5 = 1;
- port_status1 |= LAMP_CODE[4];
- break;
- case '6': // 打开 P1.7 第六盏灯。
- LAMP6 = 1;
- port_status1 |= LAMP_CODE[5];
- break;
-
- default:
- com_reset(); //清空接收缓冲区的计数值
- }
- // for(i=0;i<6;i++) { port_status |= LAMP_CODE[i]; }
- IapEraseSector(IAP_ADDRESS3);
- IapWriteByte(IAP_ADDRESS3,port_status1);
- send_settings_cmd_send(CMD_WIFI_SEND,7,0x32);
- Delayx(20);
- com_send_ok();
- }
- else
- {
- PORT1_STATUS = stat2;
- PORT1_STATUS_CMD = HexToBit(PORT1_STATUS);
- // s1end_uart_one(PORT1_STATUS_CMD); //调试用
- switch(PORT1_STATUS_CMD)
- {
- case '1': // 打开 P1.4 第三盏灯。
- LAMP1 = 0;
- port_status1 &= ~LAMP_CODE[0];
- break;
- case '2': // 打开 P1.6 第五盏灯。
- LAMP2 = 0;
- port_status1 &= ~LAMP_CODE[1];
- break;
- case '3': // 打开 P1.7 第六盏灯。
- LAMP3 = 0;
- port_status1 &= ~LAMP_CODE[2];
- break;
- case '4': // 打开 P1.7 第六盏灯。
- LAMP4 = 0;
- port_status1 &= ~LAMP_CODE[3];
- break;
- case '5': // 打开 P1.7 第六盏灯。
- LAMP5 = 0;
- port_status1 &= ~LAMP_CODE[4];
- break;
- case '6': // 打开 P1.7 第六盏灯。
- LAMP6 = 0;
- port_status1 &= ~LAMP_CODE[5];
- break;
-
- default:
- com_reset(); //清空接收缓冲区的计数值
- }
- IapEraseSector(IAP_ADDRESS3);
- IapWriteByte(IAP_ADDRESS3,port_status1);
- send_settings_cmd_send(CMD_WIFI_SEND,7,0x32);
- Delayx(20);
- com_send_ok();
- }
- }
- void parse_cmd3()
- {
- INT8U stat1=UART1_BUF[r_buf_num-2],stat2=UART1_BUF[r_buf_num-1];
- if(stat1 == LAMP_CMD_ON) //开设备
- {
- PORT3_STATUS = stat2;
- PORT3_STATUS_CMD = HexToBit(PORT3_STATUS);
- // s1end_uart_one(PORT1_STATUS_CMD); //调试用
- switch(PORT3_STATUS_CMD)
- {
- case '1': // 打开 P3.2 第一设备。
- DEVICE1 = 1;
- port_status3 |= DECIVE_CODE[0];
- break;
- case '2': // 打开 P3.3 第二设备。
- DEVICE2 = 1;
- port_status3 |= DECIVE_CODE[1];
- break;
- case '3': // 打开 P3.4 第三设备。
- device_5 = 1;
- port_status3 |= DECIVE_CODE[2];
- break;
-
- default:
- com_reset(); //清空接收缓冲区的计数值
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
控制程序201712(22.1184)08S2.zip
(85.68 KB, 下载次数: 56)
|