基于STC8F2A08S2及ESP8266的設計的物聯模塊,可以任意設置模塊中的IP地址。模塊支持8路的IO輸出,4路的IO輸入。有C51源碼調試程序。
Altium DesignerPCB圖如下:(51hei附件中可下載工程文件)
物聯模塊.png (178.44 KB, 下載次數: 41)
下載附件
基于ESP8266物聯模塊
2019-3-1 11:58 上傳
0.png (3.89 KB, 下載次數: 50)
下載附件
2019-3-1 15:42 上傳
單片機源程序如下:
- /*
- 多屏多媒體互動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)
2019-3-1 12:00 上傳
點擊文件名下載附件
C51'源碼 下載積分: 黑幣 -5
WiFi IP模塊開發板.zip
(131.57 KB, 下載次數: 49)
2019-3-1 11:59 上傳
點擊文件名下載附件
PCB源碼 下載積分: 黑幣 -5
|