久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2221|回復: 7
收起左側

誰有風扇遙控器紅外解碼的單片機程序,要正確值的

[復制鏈接]
ID:796012 發表于 2023-3-2 15:40 | 顯示全部樓層 |閱讀模式
       試了好多個論壇的程序,沒有能夠正確解碼出來的。

        這個遙控發送的紅外光很快,幾乎不閃,也很短,就像是一速光。

        一般的遙控都是間隔一閃一閃的,用手機攝像頭看到的,這種類型論壇的程序都能解碼吧。

        這個風扇遙控器試了之后,每次編碼都不一樣,那肯定就不是正確值啦!

        不知道是什么格式,看久電腦眼睛累,要是還戴耳機聽歌那準失眠睡不著。

        就像在論壇搞一個合適的程序,居然也找不到合適的……

        肯定會有特別高明的黒友,嘻嘻!

風扇遙控器

風扇遙控器
回復

使用道具 舉報

ID:814525 發表于 2023-3-2 20:59 | 顯示全部樓層
/********************************************
Title       :    main.c
McuBody     :    STC15
Author      :   
Updata      :    2020-12-09
Version     :    Ver1.00
********************************************
NOTE:
  1. P11 PCA采樣,紅外遙控解碼

********************************************/
#include "xtimer[v032].h"
#include "TM1638.h"
#include "PCA.h"

/************************外部變量***************************/

/************************本地全局變量***********************/
#define MAIN_Fosc                12000000UL        //定義主時鐘
#define Timer0_Reload_1ms   (MAIN_Fosc / 1000)      //Timer 0 中斷頻率, 1000次/秒

#define ID_IR_USER 0x00

u8  IR_Rxbuff[4]={0};                //第一字節:地址  第二字節:地址反碼        第三字節:按鍵值(命令) 第四字節:命令反碼
u8  IR_RXCnt = 0;
bit Flag_IrStart = 0;
bit Flag_IrHold = 0;
bit Flag_RecvOk = 0;  
bit flagAction=0;
u8        Displaybuff[8]={0};
/*******************Private function defines*****************/
xTIMER_TypeDef Task1(void);
xTIMER_TypeDef Task2(void);

/************************************************************
Function : Mcu_IO_Config
Stacks   :
Note     : Pxn_standard-雙向  Pxn_push_pull-推挽  Pxn_pure_input-高阻         Pxn_open_drain-開漏
Updata   : 2020-06-18
************************************************************/
void Mcu_IO_Config(void)
{
                P1n_pure_input(Pin5);
                P5n_pure_input(Pin4);
}
/************************************************
Function : PCA_config
Stacks   :
Note     : PWM頻率= PCA時鐘源 / 2^n     (n為PCA模式6/7/8)
                                         PWM占空比最小為1/2^n
Updata   : 2020-12-08
PCA_P12_P11_P10_P37  0x00  CCP 在[ECI-P1.2,CCP0-P1.1,CCP1-P1.0,CCP2-P3.7]  
PCA_P34_P35_P36_P37  0x10  CCP 在[ECI-P3.4,CCP0_2-P3.5,CCP1_2-P3.6,CCP2_2-P3.7]
PCA_P24_P25_P26_P27  0x20  CCP 在[ECI-P2.4,CCP0_3-P2.5,CCP1_3-P2.6,CCP2_2-P2.7]  
************************************************/
void        PCA_config(void)
{
        PCA_InitTypeDef                PCA_InitStructure;

        PCA_InitStructure.PCA_Clock    = PCA_Clock_12T;                //PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
        PCA_InitStructure.PCA_IoUse    = PCA_P12_P11_P10_P37;        //PCA_P12_P11_P10_P37, PCA_P34_P35_P36_P37, PCA_P24_P25_P26_P27
        PCA_InitStructure.PCA_Interrupt_Mode = ENABLE;                //ENABLE, DISABLE
        PCA_InitStructure.PCA_Polity   = PolityLow;                        //優先級設置        PolityHigh,PolityLow
        PCA_InitStructure.PCA_RUN      = DISABLE;                        //ENABLE, DISABLE
        PCA_Init(PCA_Counter,&PCA_InitStructure);

        PCA_InitStructure.PCA_Mode     = PCA_Mode_Capture;                //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
        PCA_InitStructure.PCA_PWM_Wide = 0;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
        PCA_InitStructure.PCA_Interrupt_Mode = PCA_Fall_Active|ENABLE;                //PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
        PCA_InitStructure.PCA_Value    = 0;                        //對于PWM,高8位為PWM占空比
        PCA_Init(PCA0,&PCA_InitStructure);

//        PCA_InitStructure.PCA_Mode     = PCA_Mode_PWM;                //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
//        PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
//        PCA_InitStructure.PCA_Interrupt_Mode = DISABLE;                //PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
//        PCA_InitStructure.PCA_Value    = 128 << 8;                        //對于PWM,高8位為PWM占空比
//        PCA_Init(PCA1,&PCA_InitStructure);

//        PCA_InitStructure.PCA_Mode     = PCA_Mode_PWM;                //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
//        PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_6bit;                //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit
//        PCA_InitStructure.PCA_Interrupt_Mode = DISABLE;                //PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
//        PCA_InitStructure.PCA_Value    = 32 << 8;                        //對于PWM,高8位為PWM占空比
//        PCA_Init(PCA2,&PCA_InitStructure);

        CR = 1;
}

/************************************************
Function : Mcu_OutIO_Init
Stacks   :
Note     :
Updata   : 2020-09-13
************************************************/

void Mcu_Port_Init(void)
{
                P15=0;
                P54=0;
}

/************************************************
Function : Timer0_Init
Stacks   :
Note     :         period as 1ms auto load
Updata   :         2020-09-13
************************************************/
void Timer0_Init(void)
{
        TR0 = 0;
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式16位自動重裝
        TH0 = (u8)((65536UL - Timer0_Reload_1ms) / 256);
        TL0 = (u8)((65536UL - Timer0_Reload_1ms) % 256);
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;                                //定時器0開始計時
        ET0 = 1;                                 //允許T0中斷
        EA = 1;
}

/************************************************
Function : Task1
Stacks   :
Note     : 紅外接收處理
Updata   : 2020-09-13
************************************************/
xTIMER_TypeDef Task1(void)
{       
                _xBEGIN
                while(1)
                {       
                        if (Flag_RecvOk)
                        {
                                if ((IR_Rxbuff[2] == ~IR_Rxbuff[3])&& (IR_Rxbuff[0] == ID_IR_USER))
                                        {
                                                        flagAction = 1;
                                        }
                                Flag_RecvOk = 0;
                        }
                        xDelay(10);                                                                                       
                }
}

/************************************************
Function : Task2
Stacks   :
Note     : 顯示接收的NEC碼
Updata   : 2020-09-13
************************************************/
xTIMER_TypeDef Task2(void)
{                static u8 i;
                static u8 j;
       
                _xBEGIN
                while(1)
                {         
                        if(flagAction)
                        {
                                i=IR_Rxbuff[0];       
                                Displaybuff[0]=        i/16;
                                Displaybuff[1]=        i%16;       
                               
                                i=IR_Rxbuff[1];       
                                Displaybuff[2]=        i/16;
                                Displaybuff[3]=        i%16;       
                               
                                i=IR_Rxbuff[2];       
                                Displaybuff[4]=        i/16;
                                Displaybuff[5]=        i%16;       
                               
                                i=IR_Rxbuff[3];       
                                Displaybuff[6]=        i/16;
                                Displaybuff[7]=        i%16;       
                               
                                flagAction=0;
                        }
               
                        for(j=0;j<8;j++)
                        {                                                                       
                                Write_DATA(j<<1,tab[Displaybuff[j]]);                                
                        }
                       
                        for(j=0;j<10;j++)
                        {                                                                       
                                        xDelay(25);                                                //250mS更新一次顯示                               
                        }
                }
}


/************************************************
Function : System_Init
Stacks   :
Note     :
Updata   : 2020-09-13
************************************************/
void System_Init(void)
{
        Mcu_IO_Config();
        Mcu_Port_Init();
        init_TM1638();
        PCA_config();
        Timer0_Init();
}
/************************************************
Function : xTimerCallback
Stacks   :
Note     :
Updata   : 2020-09-13
************************************************/
void xTimerCallback(void)
{       
                NOP(1);
}       

/**********************************************************************
                                                                                                        main program zone
**********************************************************************/
void main(void)
{
        System_Init();
        xTimerInit(20);
        while(1)
        {
                xTimerProcess(Task1," ", ID_0);                        //將Task1函數裝入0號  
                xTimerProcess(Task2," ",  ID_1);                        //將Task2函數裝入1號
        }       
}

/**********************************************************************
                                                                                                interrupt program zone
**********************************************************************/
void TM0_Isr(void) interrupt 1         //1ms
{       
        xTimerUpdata(xTimerCallback);
}

/**********************************************************************

**********************************************************************/
void PCA_()interrupt 7                                                //PCA中斷入口
{       
        u8 i;
        CF=0;
       
        if(CCF0)                                                                //捕獲中斷
        {                  
                CCF0=0;

                if (CCAP0H> 0x32&& CCAP0H < 0x37)                //確認收到起始信號 12.8-14.335mS
                {
                        IR_RXCnt = 0;
                        Flag_IrStart = 1;               
                }
                else if (!Flag_IrStart )
                {
                        if((CCAP0H > 0x29) && (CCAP0H < 0x2e))                                //長按信號 10.496-12.031mS
                          Flag_IrHold = 1;               
                }
                else
                {
                        if ((CCAP0H  < 0x02) || (CCAP0H  > 0x0c))                                // < 0.767mS 或 > 3.072mS
                        {
                                Flag_IrStart = 0;
                        }
                        else if(Flag_IrStart )
                        {
                                i=IR_RXCnt/8;
                                IR_Rxbuff[i]>>=1;
                                if (CCAP0H > 0x06)
                                {
                                        IR_Rxbuff[i]|= 0x80;
                                }
                                else
                                {
                                        IR_Rxbuff[i] &= ~0x80;
                                }
                                IR_RXCnt++;
                                if (IR_RXCnt >= 32)
                                {
                                        if (!Flag_RecvOk) Flag_RecvOk = 1;
                                        Flag_IrStart = 0;
                                }
                        }                       
                }
        }
        CCAP0L=CCAP0H=CL=CH=0;                                        //清零PCA計數寄存器和捕獲數據寄存器
}








回復

使用道具 舉報

ID:161164 發表于 2023-3-2 21:05 | 顯示全部樓層
三十塊包郵的邏輯分析儀,你值得擁有
回復

使用道具 舉報

ID:1034262 發表于 2023-3-2 22:38 | 顯示全部樓層
示波器抓波形分析。
別說沒有示波器,國產雙通道100M的才1K多,或者300+的手持示波器,買一個,F代學電子技術,沒個示波器怎么行。
回復

使用道具 舉報

ID:969868 發表于 2023-3-3 16:54 | 顯示全部樓層
不想買示波器可以上邏輯分析儀,我45某一個寶包郵的,感覺還不錯
回復

使用道具 舉報

ID:230500 發表于 2023-3-4 09:55 | 顯示全部樓層
lkc8210 發表于 2023-3-2 21:05
三十塊包郵的邏輯分析儀,你值得擁有

這個確實好用;我剛學紅外遙控發射和解碼的時候也買了一個 27元, 抓到波形后可以直接在電腦上就能手動算出來;很直觀的可以看到起始信號,用戶碼 鍵值碼 反碼 重復碼; 然后就會發現自己的程序是哪里出了問題; 調試利器 值得買一個!
1db568243740772279cb67e38a6fcfd.jpg


回復

使用道具 舉報

ID:648281 發表于 2023-3-5 12:31 | 顯示全部樓層
應該有相當一部分電扇的遙控器不是NEC編碼的,需要用學習型的紅外模塊來做
回復

使用道具 舉報

ID:796012 發表于 2023-3-14 16:59 | 顯示全部樓層
51hei**1140 發表于 2023-3-5 12:31
應該有相當一部分電扇的遙控器不是NEC編碼的,需要用學習型的紅外模塊來做

開風速鍵紅外波形圖.png

這是波形圖,也看不懂,哈哈。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲毛片一区二区 | 亚洲第一视频网站 | 欧美一区二区三区一在线观看 | 亚洲天堂av在线 | 色免费视频| 97免费视频在线观看 | 91麻豆精品国产91久久久久久 | 黄视频网址 | 性生活毛片 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 天天干天天爽 | 久久久精品久久久 | 国产偷录叫床高潮录音 | 精品自拍视频在线观看 | 97精品超碰一区二区三区 | 97国产精品 | 亚洲视频精品 | 国产资源在线观看 | 精品国产一区二区三区性色 | 久久香蕉精品视频 | 国产一区二区三区 | 91av视频在线观看 | 久久久久久www | 亚洲精品电影网在线观看 | 在线看日韩av | 日韩成人免费视频 | 欧美精品一区二区三区在线四季 | caoporn视频| 国产欧美一区二区三区日本久久久 | 欧美精品久久久久久 | 一级片在线观看 | 日韩精品免费视频 | 亚洲精品久久久一区二区三区 | 91麻豆久久久 | 国产精品国产成人国产三级 | 亚洲欧美v | 中文字幕乱码一区二区三区 | 一级片av | 伊人网一区 | 午夜码电影 | 精精国产xxxx视频在线 |