找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 355|回復(fù): 6
收起左側(cè)

新手請教51單片機(jī)紅外解碼問題

[復(fù)制鏈接]
ID:61140 發(fā)表于 2025-6-7 09:22 | 顯示全部樓層 |閱讀模式
本人新手,剛接觸紅外遙控解碼問題,在此向各位大神請教
1:紅外解碼后得到鍵值碼和用戶碼,我想用不同的遙控鍵控制一個LED燈的亮滅,使用的是鍵值碼還是用戶碼?
2:各位大神有沒有簡單的例程,本人實在新手太菜,想找個例程參考一下
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2025-6-7 09:53 | 顯示全部樓層
好像有多種編碼結(jié)構(gòu)吧。用脈沖寬度的方法,適合很多種吧,包括無線遙控編碼
回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2025-6-7 10:37 | 顯示全部樓層
遙控器(NEC協(xié)議) 例如:用戶碼:0xABCD 開按鍵碼:0x00 關(guān)按鍵碼:0x01
接收頭收到下降沿中斷后執(zhí)行解碼程序,解碼失敗或反碼錯誤表示無效編碼。

解碼成功比對用戶碼等于0xABCD 等于則繼續(xù)執(zhí)行,不等于表示遙控器不是自己的。
然后用switch case指令比對按鍵碼:0x00:開燈、0x01:關(guān)燈、default:不執(zhí)行任何操作。
遙控器按鍵長按識別:等待重復(fù)碼信號,收到則繼續(xù)等待下一個重復(fù)碼,超時(127ms)未收到表示按鍵已松開。
如果你不知道用戶碼以及按鍵碼是什么,解碼成功后將用戶碼以及按鍵碼通過串口發(fā)送出去或數(shù)碼管顯示等即可。
回復(fù)

使用道具 舉報

ID:621776 發(fā)表于 2025-6-7 15:40 | 顯示全部樓層
oshwhub.com/tc_tom/intelligent-air-conditioner-remo 這是我的一個開源工程,理論上只要實現(xiàn)一個基本的延時就可以完成紅外的解碼。
回復(fù)

使用道具 舉報

ID:1153644 發(fā)表于 2025-6-11 21:29 | 顯示全部樓層
在紅外遙控中,控制LED燈亮滅通常使用鍵值碼,因為用戶碼是遙控器的“身份標(biāo)識”(同一品牌同型號遙控器可能相同),而鍵值碼才對應(yīng)具體按鍵的功能。

簡單例程(以Arduino為例)

硬件需求

- Arduino開發(fā)板(如UNO)
- 紅外接收模塊(如VS1838B)
- LED燈、電阻(限流)
- 遙控器(需先解碼出鍵值)

代碼實現(xiàn)

#include <IRremote.h>

// 定義引腳
const int irReceiverPin = 2;  // 紅外接收模塊引腳
const int ledPin = 13;        // LED引腳

// 定義鍵值(需替換為實際解碼后的鍵值)
const unsigned int KEY_ON = 0x12345678;   // 開燈鍵值
const unsigned int KEY_OFF = 0x87654321;  // 關(guān)燈鍵值

IRrecv irrecv(irReceiverPin);
decode_results results;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);  // 初始關(guān)燈
  irrecv.enableIRIn();        // 啟用紅外接收
  Serial.begin(9600);         // 串口用于調(diào)試
}

void loop() {
  if (irrecv.decode(&results)) {  // 接收紅外信號
    Serial.println(results.value, HEX);  // 打印接收到的鍵值
   
    // 根據(jù)鍵值控制LED
    if (results.value == KEY_ON) {
      digitalWrite(ledPin, HIGH);  // 開燈
      Serial.println("LED ON");
    } else if (results.value == KEY_OFF) {
      digitalWrite(ledPin, LOW);   // 關(guān)燈
      Serial.println("LED OFF");
    }
   
    irrecv.resume();  // 繼續(xù)接收下一個信號
  }
}
 

使用說明

1. 先獲取鍵值:將代碼中的 KEY_ON 和 KEY_OFF 替換為實際遙控器按鍵解碼后的鍵值(可通過串口打印查看)。
2. 連線注意:紅外接收模塊的VCC接5V,GND接地,OUT接Arduino的2號引腳,LED通過電阻接13號引腳。
3. 調(diào)試技巧:先通過串口打印確認(rèn)能正確接收鍵值,再進(jìn)行控制邏輯編寫。
回復(fù)

使用道具 舉報

ID:584814 發(fā)表于 2025-6-12 11:14 | 顯示全部樓層
理一下:
1、用戶碼是用來確認(rèn)發(fā)信號的是不是我的遙控器,可想象成門禁,或抗干擾;
2、鍵值碼是用來確認(rèn)按了哪個鍵從而做出對應(yīng)的動作,可想象成進(jìn)門后干啥。
3、對發(fā)射和接收的編碼,自制的產(chǎn)品可定制只收射用戶碼,或只收發(fā)鍵值碼;
4、解碼后不校驗用戶碼,能發(fā)出相應(yīng)鍵值碼的遙控器都可以完成相關(guān)的控制;
5、發(fā)射和接收的編碼有成品的規(guī)則,你可以按標(biāo)準(zhǔn)來做也可以自創(chuàng)標(biāo)準(zhǔn)來做。
回復(fù)

使用道具 舉報

ID:61140 發(fā)表于 2025-6-15 23:14 | 顯示全部樓層
電工11號 發(fā)表于 2025-6-11 21:29
在紅外遙控中,控制LED燈亮滅通常使用鍵值碼,因為用戶碼是遙控器的“身份標(biāo)識”(同一品牌同型號遙控器可 ...

我用的STC32G12K128可以使用你的這段程序么,謝謝!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表