哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32F103C8T6對紅外遙控信號解碼 實現(xiàn)HX1838接收頭接收數(shù)據(jù)

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2026-01-30 19:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、紅外遙控簡介

紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設(shè)備特別是家用電器廣泛采用,并越來越多的應(yīng)用到計算機系統(tǒng)中。由于紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設(shè)計紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率或編碼(否則就會隔墻控制或干擾鄰居的家用電器),所以同類產(chǎn)品的紅外線遙控器,可以有相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的情況。這對于大批量生產(chǎn)以及在家用電器上普及紅外線遙控提供了極大的方便。由于紅外線為不可見光,因此對環(huán)境影響很小,再由紅外光波動波長遠(yuǎn)小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影響臨近的無線電設(shè)備。

HW1.jpg

二、紅外遙控特性

紅外遙控的情景中,必定會有一個紅外發(fā)射端和紅外接收端。要使兩者通信成功,收/發(fā)紅外波長與載波頻率需一致,在這里波長就是940nm,載波頻率就是38kHz。
紅外發(fā)射管也是屬于二極管類,紅外發(fā)射電路通常使用三極管控制紅外發(fā)射器的導(dǎo)通或者截至,在導(dǎo)通的時候,紅外發(fā)射管會發(fā)射出紅外光,反之,就不會發(fā)射出紅外光。雖然用肉眼看不到紅外光,但是可以借助手機攝像頭就能看到紅外光。但是紅外接收管的特性是當(dāng)接收到紅外載波信號時,OUT引腳輸出低電平;假如沒有接收到紅外載波信號時,OUT引腳輸出高電平。
紅外載波信號其實就是由一個個紅外載波周期組成。在頻率為38KHz下,紅外載波周期約等于26.3us(1s/38KHz≈26.3us)。在一個紅外載波發(fā)射周期里,發(fā)射紅外光時間8.77us和不發(fā)射紅外光17.53us,發(fā)射紅外光的占空比一般為1/3。相對的,整個周期內(nèi)不發(fā)射紅外光,就是載波不發(fā)射周期。在紅外遙控器內(nèi)已經(jīng)把載波和不載波信號處理好,只需要做的就是識別遙控器按鍵發(fā)射出的信號,信號也是遵循某種協(xié)議的。

三、紅外編解碼協(xié)議介紹

紅外遙控的編碼方式目前廣泛使用的是:PWM(脈沖寬度調(diào)制)的NEC協(xié)議和PhilipsPPM(脈沖位置調(diào)制)的RC-5協(xié)議的。以NEC協(xié)議為例,其特征如下:

1、8位地址和8位指令長度;
2、地址和命令2次傳輸(確??煽啃?;
3、PWM脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
4、載波頻率為38Khz;
5、位時間為1.125ms或2.25ms;

在NEC協(xié)議中,如何為協(xié)議中的數(shù)據(jù)‘0’或者‘1’?這里分開紅外接收器和紅外發(fā)射器。
紅外發(fā)射器:
發(fā)送協(xié)議數(shù)據(jù)‘0’=發(fā)射載波信號560us+不發(fā)射載波信號560us
發(fā)送協(xié)議數(shù)據(jù)‘1’=發(fā)射載波信號560us+不發(fā)射載波信號1680us
紅外發(fā)射器的位定義如下圖所示:

紅外接收器:
接收到協(xié)議數(shù)據(jù)‘0’=560us低電平+560us高電平
接收到協(xié)議數(shù)據(jù)‘1’=560us低電平+1680us高電平
紅外接收器的位定義如下圖所示:

NEC遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃?(可用于校驗)。除了上面的數(shù)據(jù)格式,NEC還規(guī)定了一個連發(fā)碼(由9ms低電平+2.5ms高電平+0.56ms低電平+97.94ms高電平組成),如果在一幀數(shù)據(jù)發(fā)送完畢之后,按鍵仍然沒有放開,則發(fā)射重復(fù)碼,即連發(fā)碼可以通過統(tǒng)計連發(fā)碼的次數(shù)來標(biāo)記按鍵按下的長短/次數(shù)。紅外NEC協(xié)議編碼如圖所示:

當(dāng)遙控器的按鍵按下時,從紅外接收頭端收到的波形如圖所示,從圖中可以看到,其地址碼為0,控制碼為21(正確解碼后00010101)。

四、STM32F103解碼接收紅外信號

準(zhǔn)備工作

STM32F103C8T6開發(fā)板,940nm波長 38kHz載波頻率的紅外遙控器,HX1838接收頭,OLED屏幕

接線說明

STM32F103C8T6HX1838接收頭
3.3V接收頭的+ 和 OLED的VCC
GND共地
PA0S
PB8OLED->SCL
PB9OLED->SDA

代碼示例

HX1838.c

#include "IR.h"
#include "timer.h"

// 遙控器接收狀態(tài)
//[7]:收到了引導(dǎo)碼標(biāo)志
//[6]:得到了一個按鍵的所有信息
//[5]:保留
//[4]:標(biāo)記上升沿是否已經(jīng)被捕獲
//[3:0]:溢出計時器
uint8_t RmtSta = 0;
uint16_t Dval;		// 下降沿時計數(shù)器的值
uint32_t RmtRec = 0; // 紅外接收到的數(shù)據(jù)
uint8_t RmtCnt = 0;	// 按鍵按下的次數(shù)

void IR_Init(void)
{
	Timer_Init();
}

void TIM2_IRQHandler(void)
{
 	if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
	{
		if (RmtSta & 0x80) // 上次有數(shù)據(jù)被接收到了
		{
			RmtSta &= ~0X10; // 取消上升沿已經(jīng)被捕獲標(biāo)記
			if ((RmtSta & 0X0F) == 0X00)
				RmtSta |= 1 < < 6; // 標(biāo)記已經(jīng)完成一次按鍵的鍵值信息采集
			if ((RmtSta & 0X0F) < 14)
				RmtSta++;
			else
			{
				RmtSta &= ~(1 < < 7); // 清空引導(dǎo)標(biāo)識
				RmtSta &= 0XF0;		 // 清空計數(shù)器
			}
		}
	}
	
	if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
	{
		if (RDATA) // 上升沿捕獲
		{
			TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Falling); // CC4P=1	設(shè)置為下降沿捕獲
			TIM_SetCounter(TIM2, 0);							 // 清空定時器
			RmtSta |= 0X10;										 // 標(biāo)記上升沿已經(jīng)被捕獲
		}
		else // 下降沿捕獲
		{
			Dval = TIM_GetCapture1(TIM2);						// 讀取CCR4也可以清CC4IF標(biāo)志位
			TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Rising); // CC4P=0	設(shè)置為上升沿捕獲
			if (RmtSta & 0X10)									// 完成一次高電平捕獲
			{
				if (RmtSta & 0X80) // 接收到了引導(dǎo)碼
				{
 
					if (Dval > 300 && Dval < 800) // 560為標(biāo)準(zhǔn)值,560us
					{
						RmtRec < <= 1; // 左移一位.
						RmtRec |= 0;  // 接收到0
					}
					else if (Dval > 1400 && Dval < 1800) // 1680為標(biāo)準(zhǔn)值,1680us
					{
						RmtRec < <= 1; // 左移一位.
						RmtRec |= 1;  // 接收到1
					}
					else if (Dval > 2200 && Dval < 2600) // 得到按鍵鍵值增加的信息 2500為標(biāo)準(zhǔn)值2.5ms
					{
						RmtCnt++;		// 按鍵次數(shù)增加1次
						RmtSta &= 0XF0; // 清空計時器
					}
				}
				else if (Dval > 4200 && Dval < 4700) // 4500為標(biāo)準(zhǔn)值4.5ms
				{
					RmtSta |= 1 < < 7; // 標(biāo)記成功接收到了引導(dǎo)碼
					RmtCnt = 0;		  // 清除按鍵次數(shù)計數(shù)器
				}
			}
			RmtSta &= ~(1 < < 4);
		}
	}
	TIM_ClearITPendingBit(TIM2, TIM_IT_Update | TIM_IT_CC1);
}
 
// 處理紅外鍵盤
// 返回值:
//	 0,沒有任何按鍵按下
// 其他,按下的按鍵鍵值.
uint8_t Remote_Scan(void)
{
	uint8_t sta = 0;
	uint8_t t1, t2;
	if (RmtSta & (1 < < 6)) // 得到一個按鍵的所有信息了
	{
		t1 = RmtRec > > 24;						// 得到地址碼
		t2 = (RmtRec > > 16) & 0xff;				// 得到地址反碼
		if ((t1 == (uint8_t)~t2) && t1 == REMOTE_ID) // 檢驗遙控識別碼(ID)及地址
		{
			t1 = RmtRec > > 8;
			t2 = RmtRec;
			if (t1 == (uint8_t)~t2)
				sta = t1; // 鍵值正確
		}

		RmtSta &= ~(1 < < 6); // 清除接收到有效按鍵標(biāo)識
		RmtCnt = 0;			 // 清除按鍵次數(shù)計數(shù)器
	}
	return sta;
}

main.c

#include "stm32f10x.h"                  // Device header
#include "oled.h" 
#include "delay.h"  
#include "IR.h" 

uint8_t IR_Address;
uint8_t IR_Command;
uint8_t IR_Count;  
uint8_t *str = 0;
uint8_t key;
	
int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	OLED_Init();
	IR_Init();
	
	OLED_ShowString(1,1,"ADDR HEX CMD NUM");
	OLED_ShowString(2,1,"00   00   0  000");
	
	while(1)
	{
		IR_Address = (RmtRec > > 24) & 0xFF;
        IR_Command = (RmtRec > > 8)  & 0xFF;
		
		key = Remote_Scan();
        if (key) {
            switch (key) {
                case IR_1:
                    str = "1";
                    break;
                case IR_2:
                    str = "2";
                    break;
                case IR_3: 
                    str = "3";
                    break;
                case IR_4: 
                    str = "4";
                    break;
                case IR_5: 
                    str = "5";
                    break;
                case IR_6: 
                    str = "6";
                    break;
                case IR_7: 
                    str = "7";
                    break;
                case IR_8: 
                    str = "8";
                    break;
                case IR_9: 
                    str = "9";
                    break;
                case IR_0:
                    str = "0";
                    break;
                case IR_SP1:
                    str = "*";
                    break;
                case IR_SP2:
                    str = "#";
                    break;
                case IR_UP:			//"↑"
                    IR_Count++;
                    break;
                case IR_LEFT:		//"←"
					//
                    break;
                case IR_DOWN:		//"↓"
                    IR_Count--;
                    break;
                case IR_RIGHT:		//"→"
					//
                    break;
                case IR_CONFIRM:
                    str = "OK ";
                    break;
                default:
                    str = "EMOURE";
                    break;
            }
			
			OLED_ShowHexNum(2, 1,  IR_Address, 2);
			OLED_ShowHexNum(2, 6,  IR_Command, 2);
			OLED_ShowString(2,12," ");
			OLED_ShowString(2,11,str);
			OLED_ShowNum(2, 14, IR_Count,   3);
        }
		Delay_ms(10);
	}
}

效果展示

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 紅外遙控
    +關(guān)注

    關(guān)注

    22

    文章

    353

    瀏覽量

    47730
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    113

    文章

    166

    瀏覽量

    89198
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于STM32F103C8T6的智能超聲波測距尺:從原理到代碼的完整實現(xiàn)

    連接、時序邏輯以及核心代碼的實現(xiàn)。 一、硬件連接與選型 核心硬件: - MCU: STM32F103C8T6 (藍(lán) pill 最小系統(tǒng)板) - 傳感器: HC-SR04 超聲波模塊 - 顯示
    發(fā)表于 02-28 02:21

    STM32驅(qū)動串口屏,STM32F103C8T6串口發(fā)送指令控制HMI串口屏

    僅是一部分常用的基礎(chǔ)指令,更多更仔細(xì)的指令或者函數(shù)可以訪問陶晶馳資料官網(wǎng)。 硬件和接線 硬件需要一塊STM32F103C8T6的開發(fā)板,杜邦線諾干,2.4寸串口屏一塊 接線 串口屏 STM32 +5V 5V TX PA10 RX PA9 GND GND 實驗前準(zhǔn)備 準(zhǔn)備前
    的頭像 發(fā)表于 02-10 17:07 ?488次閱讀
    <b class='flag-5'>STM32</b>驅(qū)動串口屏,<b class='flag-5'>STM32F103C8T6</b>串口發(fā)送指令控制HMI串口屏

    f103c8t6使用adc采樣時程序無法正常工作怎么解決?

    我在學(xué)習(xí)使用stm32f103c8t6的adc的使用時遇到了這個問題。 是按照教程一步一步操作的:這是教程地址:https://blog.csdn.net/WTF___000/article
    發(fā)表于 10-13 07:25

    stm32f103c8t6 PWM設(shè)置后不生效是怎么回事?

    參照這這篇文檔 https://blog.csdn.net/2301_80066900/article/details/144024976 芯片f103c8t6,rt版本4.1.1, 定時器TIM2
    發(fā)表于 09-10 07:26

    CherryUSB +STM32F103C8 example usb cdc device不識別是怎么回事?

    stm32f103c8t6 配置cdc,使用cubeMX 配置生成xxx_msp.c 為什么 放開 CONFIG_USBDEV_SETUP_LOG_PRINT 發(fā)現(xiàn) usb 中斷 一直未能進入 ____usbd_event_ep0_setup_complete_hand
    發(fā)表于 09-10 07:03

    STM32項目分享:智能廚房安全系統(tǒng)(機智云)

    01—項目簡介1.功能詳解STM32智能廚房安全系統(tǒng)(機智云)功能如下:STM32F103C8T6單片機作為主控芯片檢測功能:檢測環(huán)
    的頭像 發(fā)表于 09-10 00:01 ?1264次閱讀
    <b class='flag-5'>STM32</b>項目分享:智能廚房安全系統(tǒng)(機智云)

    stm32f103c8t6讀不到完整的MC6C遙控器Uart數(shù)據(jù)幀怎么辦

    我用stm32c8t6最小系統(tǒng)板做飛控,時鐘為72MHz,在使用Usart通信嘗試讀取sbus信號時,發(fā)現(xiàn)只能讀取到16.16.16.16.16.16226.181.117.91.56.13為循環(huán)
    發(fā)表于 08-13 09:29

    STM32項目分享:智能語音臺燈(機智云)

    01—項目簡介1.功能詳解STM32智能語音臺燈(機智云)功能如下:STM32F103C8T6單片機作為主控單元按鍵切換模式,支持自
    的頭像 發(fā)表于 07-24 18:03 ?1770次閱讀
    <b class='flag-5'>STM32</b>項目分享:智能語音臺燈(機智云)

    STM32F103c8上做DLQR最優(yōu)控制算法的C編程資料

    這是我近期做的一個項目--基于STM32F103c8的DLQR控制算法的C編程,涉及DLQR最優(yōu)控制算法、嵌入式STM32F103編程、CMSIS-DSP庫使用。? ??附有完整的程序。
    發(fā)表于 07-23 15:30 ?0次下載

    CH32F103C8T6核心板三種程序下載方式簡介

    CH32F103C8T6核心板,通過USB轉(zhuǎn)串口方式、USB直連方式、SWD方式下載應(yīng)用程序
    的頭像 發(fā)表于 06-09 09:38 ?1224次閱讀
    CH32<b class='flag-5'>F103C8T6</b>核心板三種程序下載方式簡介

    STM32F103 I2C從機接收數(shù)據(jù)的問題

    我使用STM32F103做一個I2C從機接收數(shù)據(jù)的功能,通過查閱函數(shù)手冊,使用了2種方法 方法1: 1、調(diào)用HAL_I2C_EnableLi
    發(fā)表于 06-06 12:29

    STM32F103C6T6 DCAC逆變器原理圖

    STM32F103C6T6 DCAC逆變器原理圖
    發(fā)表于 05-19 17:48 ?2次下載

    stm32f103c8t6主控芯片無人機原理圖

    stm32f103c8t6主控芯片無人機原理圖
    發(fā)表于 04-29 17:02 ?3次下載

    STM32F103C8T6無法選擇外部晶振怎么解決?

    我從網(wǎng)上購入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成項目時,卻無法選擇外部晶振(如下圖)。請問要在哪里設(shè)置才能選擇外部晶振呀?
    發(fā)表于 04-28 07:03

    基于STM32F103C8T6控制多路VL53L0X激光測距傳感器

    使用STM32F103C8T6的一條IIC總線控制4個激光測距傳感器,我使用的激光測距傳感器是亞博智能的 地址相同改不了,我要怎么控制多路,求指點
    發(fā)表于 04-23 18:23
    天柱县| 定襄县| 佛学| 江门市| 高青县| 太和县| 迁西县| 稻城县| 长岭县| 安宁市| 阿拉善盟| 临潭县| 枣阳市| 清原| 桓台县| 乌什县| 集安市| 阳春市| 银川市| 和顺县| 绩溪县| 临武县| 昌吉市| 长治县| 郸城县| 涪陵区| 大荔县| 松桃| 清水河县| 仪陇县| 嵩明县| 安塞县| 同心县| 丰原市| 邯郸县| 灵丘县| 阳高县| 承德市| 饶阳县| 枣强县| 彰化市|