|
安卓控制+315M無線通信單片機(jī)軟件解碼
成品以運(yùn)行一年以上
手機(jī)控制由易安卓編寫的APP(只寫了安卓程序而且寫的不太好)。
原理圖與線路圖由PADS9.5編輯。
一些調(diào)試工具由易語言編輯。
http://www.torrancerestoration.com/bbs/dpj-54638-1.html 單路
http://www.torrancerestoration.com/bbs/dpj-54161-1.html 四路
http://www.torrancerestoration.com/bbs/dpj-94000-1.html 六路
STC15W408AS模擬315M 2272解碼程序
工作頻率:12M
說明:7路繼電器輸出,7LED指示,1LED電源指示,1微動(dòng)開關(guān)K1。
按K1進(jìn)入編輯模式,LED指示燈全亮。
在編輯模式下 ,按下遙控器鈕,LED1亮>>LED2亮>>LED3亮>>LED4亮>> LED5亮>>LED6亮>>LED7亮>>全亮(此模式存儲(chǔ)的遙控碼是關(guān)閉所有的LED)>>退出編輯模式。
在編輯模式下 ,按K1退出編輯模式或存儲(chǔ)有效的遙控碼。
在編輯模式下 ,長(zhǎng)按K1 (10S) 刪除所有存儲(chǔ)的遙控碼。
在正常模式下 , 按下遙控器鈕,及相應(yīng)的LED.繼電器亮滅。
注意: 同一條遙控碼 在同一個(gè)LED上存兩條,相當(dāng)于亮了又滅,無動(dòng)作。
優(yōu)點(diǎn): 能接收2262的1.2M-4.7M電阻編碼,幾乎所有的315M遙控器都兼容。
由于定時(shí)讀引腳,抗干擾能力強(qiáng) ,和硬件解碼距離無區(qū)別。
缺點(diǎn):占用單片機(jī)資源比較多。
電路原理圖如下:
pcb文件在附件中:
單片機(jī)源程序如下:
- #include "stc15XX.h"
- #include "flash.h"
- #include "delay.h"
- #define FOSC 11059200
- //typedef unsigned int u16; //16位無符號(hào)整型數(shù)
- //typedef unsigned char u8; //8位無符號(hào)整型數(shù)
- sbit IR_INPUT = P5^5;
- sbit KEY1 = P3^2;
- sbit led1 = P3^3;
- sbit led2 = P3^4;
- sbit led3 = P3^5;
- sbit led4 = P3^6;
- sbit led5 = P3^7;
- sbit led6 = P1^0;
- sbit led7 = P1^1;
- sbit JD1 = P5^4;
- sbit JD2 = P1^7;
- sbit JD3 = P1^6;
- sbit JD4 = P1^5;
- sbit JD5 = P1^4;
- sbit JD6 = P1^3;
- sbit JD7 = P1^2;
- bit WiFi_200=0; //200MS標(biāo)記
- bit WiFi_OK=0; //模塊返回?cái)?shù)據(jù)與比對(duì)值匹配標(biāo)記
- bit CongZi=0;
- u8 Index; //比對(duì)值索引
- u8 WiFi_Step=0; //模塊啟動(dòng)執(zhí)行到的步數(shù)
- u16 value;
- u16 SS_HZ;
- u8 T0RL;
- u16 Restart=0;
- u8 T0RL = 0; //T0重載值的低字節(jié)
- u8 ms =1;
- u8 ircode_x[3]; //編輯模式解碼中間值
- u8 ircodex[3];
- u8 ircode[6];
- u16 code Tm_bz[]={ 31 ,156 ,114 ,134 ,2 ,16 ,8 };
- u8 code YaoKongSu_4 = 8; //遙控碼個(gè)數(shù)
- u8 code DaiMaTiaoSu_20 = 20; //遙控條數(shù)
- bit WanCengBiaoJi = 0; // 讀完一組數(shù)據(jù)的標(biāo)記
- bit Bianji = 0; //進(jìn)入編輯標(biāo)記
- u8 JIBU=0; //按鍵第幾步標(biāo)記
- u8 E2BiaoJi;
- u8 pdata Tm1[50];
- u8 code WiFi_0[] = "AT\r\n"; //AT命令是模塊就緒
- u8 code WiFi_1[] = "AT+CWMODE=2\r\n"; //設(shè)置為AP模式
- u8 code WiFi_2[] = "AT+CWSAP=\"AT-00\",\"12345678\",8,4\r\n "; //設(shè)置路由
- u8 code WiFi_3[] = "AT+RST\r\n"; //重啟模塊
- u8 code WiFi_4[] = "AT+CIFSR\r\n"; //獲取本地IP地址
- u8 code WiFi_5[] = "AT+CIPMUX=1\r\n"; //啟用多線程
- u8 code WiFi_6[] = "AT+CIPSERVER=1,19730\r\n"; //啟用服務(wù)器功能
- u8 code WiFi_Len[] = { sizeof(WiFi_0)-1, sizeof(WiFi_1)-1, sizeof(WiFi_2)-1,sizeof(WiFi_3)-1,
- sizeof(WiFi_4)-1, sizeof(WiFi_5)-1, sizeof(WiFi_6)-1};
- u8 code *WiFi_Ptr[] = {&WiFi_0[0], &WiFi_1[0], &WiFi_2[0], &WiFi_3[0],
- &WiFi_4[0], &WiFi_5[0], &WiFi_6[0]};
- u8 code WiFi_syz[] = { 0,0,0,0,1,0,0,2 };
- void ConfigTimer0(u8 ms); //定時(shí)器0配置
- void ConfigTimer3(u8 ms); //定時(shí)器:CCP/PCA功能實(shí)現(xiàn)16位定時(shí)器功能
- void WiFi_initial(); //模塊初始化流程
- u8 S_Take(u8 *ptr); //返回字符串長(zhǎng)度
- u8 Add_character(u8 *ptr1,u8 len ,u8 ptr); //字符串結(jié)尾加字符
- u8 Add_Merge0(u8 *ptr1,u8 len,u8 *ptr2 ); //字符串合并0
- u8 Add_Merge1(u8 *ptr1, u8 len1 ,u8 *ptr2, u8 len2 ,u8 Ten );//字符串合并1
- u8 Compare(u8 *ptr1, u8 len1, u8 *ptr2, u8 len2); //字符串查找函數(shù)
- void AT_CIPSEND(u8 dat,u8 len); //AT命令組裝并發(fā)送
- extern void UartDriver(); // 串口驅(qū)動(dòng)函數(shù)
- extern void ConfigUART(); // 串口配置函數(shù)
- extern void UartRxMonitor(u8 ms); // 串口接收監(jiān)控
- extern void UartWrite(u8 *buf, u8 len);// 串口數(shù)據(jù)寫入
- /*以下為模擬2262解碼調(diào)用程序 */
- void Decoding(u8 add); //脈沖解碼 ,接收到脈沖編譯成遙控條碼
- void Edit(); //進(jìn)入編輯模式,以便于存儲(chǔ)遙控條碼
- void LED_add(); //編輯模式下LED順序累加
- void Flash_Delete(); //刪除Flash記錄,刪除所有的遙控條碼
- void LED_Mode(u8 add,u8 add1); //LED模式變換與查找
- void Initialization(); //初始化
- void Button_scan(); //按鈕掃描 需在定時(shí)中斷中調(diào)用
- void Flash_seek(); //Flash中查找對(duì)應(yīng)值
- void main ()
- {
- EA = 1; //開總中斷
- ConfigTimer0(124); //配置T0定時(shí)1ms
- ConfigTimer3(5); //CCP/PCA定時(shí)器1ms
- ConfigUART(); //配置波特率為115200
- IR_INPUT = 1; //接收引腳
- Initialization(); //2622模擬解碼初始化
- while (1)
- { //AT流程用
- UartDriver(); //調(diào)用串口驅(qū)動(dòng)
- if(WiFi_200==1) //200ms進(jìn)入流程標(biāo)記
- { WiFi_200=0; WiFi_initial();} //模塊初始化流程
- //2622模擬解碼用
- if(WanCengBiaoJi == 1)
- { WanCengBiaoJi = 0;
- Decoding(0);
- Decoding(1);
- if((ircode[0]==ircode[3]) && (ircode[1]==ircode[4]) && (ircode[2]==ircode[5]) && ms!=0)
- {
- if((ircodex[0]==ircode[0]) && (ircodex[1]==ircode[1]) && (ircodex[2]==ircode[2]) )
- { ms=1; }
- else
- {
- ircodex[0]=ircode[0];
- ircodex[1]=ircode[1];
- ircodex[2]=ircode[2];
- if(Bianji==1)
- { ms = 1; LED_add();}
- else
- { ms=0;}
- }
- }
-
- ET0 = 1;
-
- }
- }
- }
- /*===============================================================================
- 以下為AT控制流程
- ===============================================================================*/
- /*AT初始化流程_子程序
- Ten-命令索引值 sx-成功跳轉(zhuǎn)值 tc=失敗跳轉(zhuǎn)值 */
- void WiFi_initial0(u8 Ten)
- {
- static u8 JiShi=0; //計(jì)數(shù)
- static bit WiFi_fasong=0; //命令發(fā)送標(biāo)記
-
- Index=WiFi_syz[Ten] ; //比對(duì)值索引
- if(WiFi_fasong==0) //發(fā)送數(shù)據(jù)
- { WiFi_fasong=1; UartWrite(WiFi_Ptr[Ten], WiFi_Len[Ten]); }
- if(WiFi_OK==1) //比對(duì)成功返回標(biāo)記
- { WiFi_OK=0; WiFi_fasong=0; JiShi=0; WiFi_Step=Ten+1; return;}
- JiShi++;
- if((JiShi&0x07)==0) //進(jìn)入7次重新初始化發(fā)送標(biāo)記
- { WiFi_fasong=0; }
- if(JiShi>=50) //發(fā)送多次未果認(rèn)定失敗
- { WiFi_fasong=0; JiShi=0; WiFi_Step=10;}
- }
- //AT初始化流程
- void WiFi_initial()
- {
- //200ms進(jìn)入一次
- switch (WiFi_Step) //第幾步索引值
- { case 0:
- WiFi_initial0(0);//AT命令是模塊就緒
- break;
- case 1:
- WiFi_initial0(1);//設(shè)置為AP模式
- break;
- case 2:
- if(CongZi==1)
- WiFi_initial0(2);//設(shè)置路由
- else
- WiFi_Step=3;
- break;
- case 3:
- WiFi_initial0(3);//重啟模塊
- break;
- case 4:
- WiFi_initial0(4);// 獲取本地IP地址
- break;
- case 5:
- WiFi_initial0(5);//啟用多線程
- break;
- case 6:
- WiFi_initial0(6);//啟用服務(wù)器功能
- break;
- case 7:
- Index=WiFi_syz[7];
- WiFi_Step=8;
- break;
- case 8:
- Restart++;
- if(Restart > 3000) //10分鐘初始化模塊
- { Restart=0; WiFi_Step=0; }
- break;
- default:
- WiFi_Step=0;
- break;
-
- }
- }
- void LED_Action(u8 *ptr,u8 len)
- {
- u8 i;
- bit tem;
- if(ptr[len]=='0')
- { tem=0; }
- else
- { tem=1; }
-
- for (i=0; i<8; i++)
- { len++;
- if(ptr[len]=='1')
- {
- switch (i)
- { case 0: led1 = tem ; JD1 = !tem ;break;
- case 1: led2 = tem ; JD2 = !tem ;break;
- case 2: led3 = tem ; JD3 = !tem ;break;
- case 3: led4 = tem ; JD4 = !tem ;break;
- case 4: led5 = tem ; JD5 = !tem ;break;
- case 5: led6 = tem ; JD6 = !tem ;break;
- case 6: led7 = tem ; JD7 = !tem ;break;
- default: break;
- }
-
- }
-
- }
- }
- u8 LED_state(u8 *ptr,u8 len)
- {
- if(led1)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led2)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led3)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led4)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led5)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led6)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- if(led7)
- { ptr[len]='1'; }
- else
- { ptr[len]='0'; }
- len++;
- ptr[len]='1';
- len++;
- return len;
- }
- /*命令的匯總處理,收到的數(shù)據(jù)格式; +IPD,0,15:@@@@AAT_00
- ptr-待處理數(shù)據(jù) len 通道位 len1 數(shù)據(jù)起始位 */
- void Command(u8 *ptr, u8 len,u8 Ten)
- {
- u8 pdata HuiDa[18]; //回答字符串
- u8 HuiDa_len; //回答字符串長(zhǎng)度
- u8 GeSu; //到達(dá)數(shù)據(jù)長(zhǎng)度緩存值
-
- GeSu =ptr[len+2]-48;
- if(ptr[len+3]!=':')
- { GeSu =GeSu*10+(ptr[len+3]-48); } //計(jì)算收到數(shù)據(jù)長(zhǎng)度
- GeSu=GeSu-3; //去掉5位校驗(yàn)位
- Restart=0;
- if(ptr[Ten]=='A')
- { HuiDa_len = 0;
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"@@");
- HuiDa_len = Add_character(HuiDa,HuiDa_len,'A');
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"\r\n");
- AT_CIPSEND(ptr[len],HuiDa_len);
- UartWrite(HuiDa,HuiDa_len);
- WiFi_Step=0;
- }
- else if(ptr[Ten]=='B')
- {
- LED_Action(ptr,Ten+1);
- HuiDa_len = 0;
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"@@");
- HuiDa_len = Add_character(HuiDa,HuiDa_len,'C');
- HuiDa_len = LED_state(HuiDa,HuiDa_len);
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"\r\n");
- AT_CIPSEND(ptr[len],HuiDa_len);
- UartWrite(HuiDa,HuiDa_len);
-
- }
- else if(ptr[Ten]=='C')
- { HuiDa_len = 0;
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"@@");
- HuiDa_len = Add_character(HuiDa,HuiDa_len,'C');
- HuiDa_len = LED_state(HuiDa,HuiDa_len);
- HuiDa_len = Add_Merge0(HuiDa,HuiDa_len,"\r\n");
- AT_CIPSEND(ptr[len],HuiDa_len);
- UartWrite(HuiDa,HuiDa_len);
- }
- }
-
- /*數(shù)據(jù)到達(dá)處理,提取通道位置與數(shù)據(jù)真正起始位,收到的數(shù)據(jù)格式; +IPD,0,15:@@@@AAT_00
- ptr-待處理數(shù)據(jù) len-處理的起始位*/
- void Data_arrival(u8 *ptr, u8 len)
- {
-
- if (ptr[len+1]==',' && ptr[len+3]==':')
- {
- if(ptr[len+4]=='@' && ptr[len+5]=='@' )
- {
- Command(ptr,len,len+6);
- }
- }
- else if (ptr[len+1]==',' && ptr[len+4]==':')
- {
- if(ptr[len+5]=='@' && ptr[len+6]=='@' )
- {
- Command(ptr,len,len+7);
- }
- }
- }
- /* 串口動(dòng)作函數(shù),根據(jù)接收到的數(shù)據(jù)響應(yīng)的動(dòng)作
- buf-接收到的數(shù)據(jù)幀指針,len-數(shù)據(jù)幀長(zhǎng)度 */
- void UartAction(u8 *ptr, u8 len)
- {
- u8 FanHui;
- u8 code cmd0[] = "OK";
- u8 code cmd1[] = "+CIFSR:APIP";
- u8 code cmd2[] = "+IPD,";
- u8 code cmdLen[] = { sizeof(cmd0)-1, sizeof(cmd1)-1, sizeof(cmd2)-1};
- u8 code *cmdPtr[] = {&cmd0[0], &cmd1[0], &cmd2[0]};
-
- if (len >= cmdLen[Index]) //首先接收到的數(shù)據(jù)長(zhǎng)度要不小于對(duì)比值長(zhǎng)度
- {
- FanHui=Compare(ptr,len,cmdPtr[Index],cmdLen[Index]);
- if (FanHui>0) //查找到匹配值
- {
- if(Index==WiFi_syz[7])
- { Data_arrival(ptr, FanHui); } //數(shù)據(jù)進(jìn)一步處理
- else
- { WiFi_OK=1; }
- }
- }
- }
- /* 配置并啟動(dòng)T0,us-T0定時(shí)時(shí)間 */
- void ConfigTimer0(u8 ms)
- {
- unsigned long tmp; //臨時(shí)變量
- tmp = FOSC / 1000 / 12 ; //定時(shí)器計(jì)數(shù)頻率
- tmp = tmp * ms /1000 ;
- tmp = 256 - ms ; //計(jì)算定時(shí)器重載值
- TMOD &= 0xF0; // 定時(shí)器工作方式 方式 :8位重裝模式計(jì)數(shù)器
- TMOD |= 0x02; //配置T0為模式2
- T0RL = tmp;
- TH0 = tmp; //加載T0重載值
- ET0 = 1; //使能T0中斷
- TR0 = 1; //啟動(dòng)T0
- PT0 = 1; //配置T0中斷為高優(yōu)先級(jí)
- }
- /* 定時(shí)器:CCP/PCA功能實(shí)現(xiàn)16位定時(shí)器功能 */
- void ConfigTimer3(u8 ms)
- {
- SS_HZ = FOSC / 1000 / 12 ; //定時(shí)器計(jì)數(shù)頻率
- SS_HZ = SS_HZ * ms ; //計(jì)算所需的計(jì)數(shù)值
- value = SS_HZ;
- ACC = P_SW1;
- ACC &= 0xcf;
- P_SW1 = P_SW1; //CCP_S0=0 CCP_S1=0
- CCON = 0; //初始化PCA控制寄存器
- //清除CF標(biāo)志
- //PCA定時(shí)器停止
- //清除模塊中斷標(biāo)志
- CL = 0; //復(fù)位PCA寄存器
- CH = 0;
- CMOD = 0x00; //設(shè)置PCA時(shí)鐘
- CCAP0L = value;
- CCAP0H = value>>8;
- value += SS_HZ;
- CCAPM0 = 0x49; //PCA模塊0為16位定時(shí)器模式
- CR = 1; //PCA定時(shí)器開始工作
-
- }
- void InterruptTimer3() interrupt 7 using 1
- {
- static u8 cnt=40;
-
- CCF0 = 0;
- CCAP0L = value;
- CCAP0H = value>>8;
- value += SS_HZ;
- UartRxMonitor(1); //串口接收監(jiān)控
- if(cnt--==0)
- { cnt=40; WiFi_200=1; WDT_CONTR=0x37; } //喂狗 8.4S
- Button_scan();
- Flash_seek();
-
- }
- /*字符串結(jié)尾加字符 - 返回:字符串長(zhǎng)度
- ptr1-被加入字符串 len-被加入位置 ptr-加入的單字節(jié)數(shù)據(jù) */
- u8 Add_character(u8 *ptr1,u8 len ,u8 ptr)
- {
- ptr1[len] = ptr;
- len++;
- ptr1[len] = '\0';
- return len;
- }
- /*字符串合并0 - 返回:字符串長(zhǎng)度
- ptr1-被加入字符串 len-被加入位置 ptr2-加入的字符串*/
- u8 Add_Merge0(u8 *ptr1,u8 len,u8 *ptr2 )
- {
- while (*ptr2 != '\0')
- { ptr1[len] = *(ptr2++); len++; }
- ptr1[len]= '\0';
- return len;
- }
- /*字符串合并1- 返回:字符串長(zhǎng)度
- ptr1-被加入字符串 len1-被加入位置 ptr2-加入的字符串
- len2-加入的字符串位置 Ten-加入的字符串長(zhǎng)度 */
- u8 Add_Merge1(u8 *ptr1, u8 len1 ,u8 *ptr2, u8 len2 ,u8 Ten )
- {
- u8 i;
- for (i=0; i<Ten; i++)
- { ptr1[len1+i] = ptr2[len2+i]; }
- ptr1[len1+i] = '\0';
- return (len1+i);
- }
- /*返回字符串長(zhǎng)度 */
- u8 S_Take(u8 *ptr)
- {
- u8 len=0;
- while (ptr[len] != '\0')
- { len++; }
- return len;
- }
- /* AT命令組裝并發(fā)送 樣本:AT+CIPSEND=0,23\r\n
- dat-通道值 len-待發(fā)送數(shù)據(jù)長(zhǎng)度*/
- void AT_CIPSEND(u8 dat,u8 len)
- {
- u8 pdata ZiFuc[20];
- u8 ZiFuc_Tem = 0;
- u8 Ten;
- // 最終字符串:AT+CIPSEND=0,123\r\n
- ZiFuc_Tem = Add_Merge0(ZiFuc,ZiFuc_Tem,"AT+CIPSEND=");
- ZiFuc_Tem = Add_character(ZiFuc,ZiFuc_Tem,dat); // 寫入通道值
- ZiFuc_Tem = Add_character(ZiFuc,ZiFuc_Tem,',');
- Ten=len/10%10;
- if(Ten!=0);
- {ZiFuc_Tem = Add_character(ZiFuc,ZiFuc_Tem,Ten+48);}
- Ten=len%10;
- ZiFuc_Tem = Add_character(ZiFuc,ZiFuc_Tem,Ten+48);
- ZiFuc_Tem = Add_Merge0(ZiFuc,ZiFuc_Tem,"\r\n");
- UartWrite(ZiFuc,ZiFuc_Tem);
- Delay1ms(20);
- }
- /* 字符串比較函數(shù),比較兩個(gè)字符串?dāng)?shù)據(jù)是否相同 - 返回:1,成功 0,失敗
- ptr1-被比較字符串 len1-被比較位置 ptr2-比較的字符串
- len2-比較的字符串長(zhǎng)度 */
- bit Compare1(u8 *ptr1, u8 len1, u8 *ptr2, u8 len2)
- {
- u8 i;
- for (i=0; i<len2; i++)
- {
- if (ptr1[i+len1] != ptr2[i])
- { return 0;}
- }
- return 1;
- }
- /*字符串查找函數(shù),查找字符串與比對(duì)值的首字節(jié)相等的位置,之后進(jìn)一步比對(duì) - 返回:0,失敗 非零, 字符串查找到的位置
- ptr1-被查找字符串 len1-被查找長(zhǎng)度 ptr2-查找的字符串
- len2-查找的字符串長(zhǎng)度 */
- u8 Compare(u8 *ptr1, u8 len1, u8 *ptr2, u8 len2)
- {
- u8 i;
- for (i=0; i<(len1-len2); i++)
- {
- if (ptr1[i] == ptr2[0])
- {
- if ( Compare1(ptr1,i,ptr2,len2))
- { return (i+len2); }
- }
- }
- return 0; //比較完全部長(zhǎng)度數(shù)據(jù)都相等則返回1
- }
- /* ==========================================================================================
- 以下為模擬2262解碼調(diào)用程序
- ==========================================================================================*/
- //脈沖解碼
- void Decoding(u8 add)
- {
- u8 i, j, x, dat;
- u8 byt;
-
- x = add*25+1;
- for(i=0; i<3; i++)
- { dat=i*8;
- for(j=0; j<8; j++)
- { if(Tm1[dat+j+x]<=Tm_bz[6])
- { byt <<= 1; byt |= 0x01; }
- else
- { byt <<= 1; }
- }
- ircode[i+ add*3 ] = byt;
- }
- }
- void LED_Mode(u8 add,u8 add1)
- { bit dat;
-
- switch(add)
- {
- case 1: dat= led1;
- _nop_();
- led1=!dat;
- if(Bianji==0)
- {JD1 = dat; }
- break;
- case 2: dat= led2;
- _nop_();
- led2=!dat;
- if(Bianji==0)
- {JD2 = dat; }
- break;
- case 3: dat= led3;
- _nop_();
- led3=!dat;
- if(Bianji==0)
- {JD3 = dat; }
- break;
- case 4: dat= led4;
- _nop_();
- led4=!dat;
- if(Bianji==0)
- {JD4 = dat; }
- break;
- case 5: dat= led5;
- _nop_();
- led5=!dat;
- if(Bianji==0)
- {JD5 = dat; }
- break;
- case 6: dat= led6;
- _nop_();
- led6=!dat;
- if(Bianji==0)
- {JD6 = dat; }
- break;
- case 7: dat= led7;
- _nop_();
- led7=!dat;
- if(Bianji==0)
- {JD7 = dat; }
- break;
- case 8: led1 = add1;led2 = add1;led3 = add1;led4 = add1;led5 = add1;led6 = add1; led7 = add1;
- if(Bianji==0)
- {JD1 = !add1;JD2 = !add1; JD3 = !add1;JD4 = !add1;JD5 = !add1;JD6 = !add1;JD7 = !add1; WiFi_Step=0;}
- break;
- default:
- break;
- }
- }
- //初始化
- void Initialization()
- {
- Bianji=0;
- LED_Mode(8,1);
- JIBU=0;
-
- P1M1= 0x00; //1111 1100 推挽輸出
- P1M0= 0xfc; //1111 1100
- P5M1= 0x20; //0010 0000
- P5M0= 0x10; //0001 0000
-
- }
- //遙控碼修改
- void Flash_Delete()
- { if(Bianji==1)
- { eeprom_erase(0); Initialization(); }
- }
- // 進(jìn)入編輯模式
- void Edit()
- { u8 i;
- u8 dat;
- if(Bianji==0)
- { Bianji=1;
-
- P1M1= 0xfc; //1111 1100 推挽輸出
- P1M0= 0xfc; //1111 1100
- P5M1= 0x30; //0011 0000
- P5M0= 0x10; //0001 0000
- LED_Mode(8,0);
- E2BiaoJi=0xff;
- for(i=0; i<DaiMaTiaoSu_20; i++)
- { if(eeprom_read(i*YaoKongSu_4)==0xff)
- {E2BiaoJi=i; break;}
- }
- }
- else
- {
- if (E2BiaoJi!= 0xff && JIBU!=0)
- { dat= E2BiaoJi*YaoKongSu_4;
- eeprom_write(dat+1,JIBU); //標(biāo)記以寫入
- eeprom_write(dat,JIBU); //標(biāo)記以寫入
- eeprom_write(dat+2,JIBU); //標(biāo)記以寫入
- eeprom_write(dat+3,ircode_x[0]);
- eeprom_write(dat+4,ircode_x[1]);
- eeprom_write(dat+5,ircode_x[2]);
-
-
- }
- Initialization();
- CongZi=1;
- WiFi_Step=0;
- }
-
- }
- void LED_add()
- {
- JIBU++;
- if(JIBU>8)
- { Initialization(); }
- else
- { ircode_x[0]=ircodex[0];
- ircode_x[1]=ircodex[1];
- ircode_x[2]=ircodex[2];
- LED_Mode(8,1);
- if(JIBU==8)
- LED_Mode(8,0);
- else
- LED_Mode(JIBU,1);
- }
- }
- /* T0中斷服務(wù)函數(shù),執(zhí)行接收2262到來的脈沖 */
- void EXINT1_ISR() interrupt 1
- { static bit a1,a2,a3;
- static u8 Tm_zz=0;
- static u8 Tm_js=0;
- static u8 Tm=0;
- a3=a2;
- a2=a1;
- a1=IR_INPUT;
- if(a1==a3)
- {a2=a1;}
- if(a3)
- {
- switch(Tm_zz)
- {
- case 0: if(Tm==0)
- {
- if((Tm_js<Tm_bz[0] )|| Tm_js>Tm_bz[1])
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm++; Tm_zz=2; TH0 = 256- Tm_js; TL0=TH0;}
- }
- else
- { if((Tm_js<Tm_bz[2] )|| Tm_js>Tm_bz[3] )
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm1[Tm]=256-TH0; Tm++; Tm_zz=2;}
- }
-
- break;
- case 1: if((Tm_js<Tm_bz[4] )|| Tm_js>Tm_bz[5])
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm1[Tm]=Tm_js; Tm++; Tm_zz=2;}
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
遙控解碼7#-15w408.rar
(4.52 MB, 下載次數(shù): 168)
2018-9-2 20:14 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|