從波形抓取到按鍵映射,手把手教你搞定 NEC 協(xié)議解碼
做紅外遙控解碼的朋友,有沒有過這種絕望:
- 邏輯分析儀抓了一堆波形,看著像 NEC 協(xié)議,就是解不出正確的地址和按鍵?
- 定時器配置了無數(shù)次,要么捕獲不到邊沿,要么時序算出來全錯?
- 好不容易解出數(shù)據(jù),按鍵映射又亂成一鍋粥,按“開關(guān)”出“音量+”?
別慌!NEC 協(xié)議作為紅外遙控里的“通用語言”,其實邏輯巨簡單,看完直接抄作業(yè)就能用!
一、NEC 協(xié)議原理:大白話講明白
NEC 協(xié)議的核心是“用脈沖寬度表示 0 和 1”,就像用專屬的摩斯密碼,遙控器和單片機(jī)之間靠這個密碼傳遞按鍵信息。
一幀數(shù)據(jù)由引導(dǎo)碼、地址碼、地址反碼、數(shù)據(jù)碼、數(shù)據(jù)反碼組成,總共32 位。
關(guān)鍵時序參數(shù)(38kHz 載波)
| 類型 | 時序說明 |
|---|---|
引導(dǎo)碼 | 9ms 高電平 + 4.5ms 低電平(“敲門磚”,告訴 MCU 要發(fā)數(shù)據(jù)了) |
邏輯“0” | 562.5μs 高電平 + 562.5μs 低電平,總時長 1.125ms |
邏輯“1” | 562.5μs 高電平 + 1.6875ms 低電平,總時長 2.25ms |
重復(fù)碼 | 9ms 高 + 2.25ms 低 + 0.56ms 高(長按按鍵時發(fā)送) |
數(shù)據(jù)校驗邏輯
- 地址碼 + 地址反碼 =0xFF
- 數(shù)據(jù)碼 + 數(shù)據(jù)反碼 =0xFF
校驗通過才是有效數(shù)據(jù)。

二、解碼實現(xiàn)
第一步:精準(zhǔn)捕捉信號,記錄時間差
最通用的方案:
- 用單片機(jī)的外部中斷,專門捕捉信號的下降沿,每來一次下降沿,就觸發(fā)一次中斷
- 同時用一個定時器持續(xù)不間斷計時
- 每次中斷觸發(fā)時,記下當(dāng)前的定時器數(shù)值,和上一次中斷的數(shù)值做減法,就能算出兩次下降沿之間的時間差
這個時間差,就是我們判斷引導(dǎo)碼、邏輯 0、邏輯 1的唯一依據(jù)。只要時間算準(zhǔn)了,解碼就成功了一大半!
第二步:用狀態(tài)機(jī)一步步解析數(shù)據(jù)
光有時間差還不夠,我們需要給解碼過程分階段,就像流水線一樣按順序推進(jìn),避免亂序出錯——這就是狀態(tài)機(jī)的核心思路。
大致分為四個階段:
- 空閑狀態(tài):等待信號到來
- 引導(dǎo)碼狀態(tài):識別引導(dǎo)碼
- 數(shù)據(jù)接收狀態(tài):逐位解析地址和數(shù)據(jù)
- 完成狀態(tài):校驗并輸出結(jié)果

三、按鍵映射實現(xiàn):一鍵對應(yīng),再也不會按錯鍵
解出了正確的按鍵數(shù)據(jù)碼,只是第一步。我們最終要的是:“按哪個鍵,就觸發(fā)對應(yīng)的功能”——這就是按鍵映射的核心。
實現(xiàn)起來特別簡單,核心就是做一張“按鍵對應(yīng)表”:
- 先用邏輯分析儀或調(diào)試好的解碼程序,記錄遙控器各按鍵對應(yīng)的數(shù)據(jù)碼
- 整理成「數(shù)據(jù)碼 → 按鍵功能」固定對照表,存入單片機(jī)
- 每次解碼出有效數(shù)據(jù)碼,即用該碼查表匹配,觸發(fā)對應(yīng)按鍵功能

四、調(diào)試避坑技巧
| 序號 | 技巧 | 說明 |
|---|---|---|
| ① | 邏輯分析儀是神器 | 采樣率設(shè) 1MHz 以上,直接看波形時間,比瞎調(diào)定時器快 10 倍 |
| ② | 定時器分頻要合適 | 設(shè) 1MHz 計數(shù)頻率,時間差直接就是 μs 數(shù),不用換算 |
| ③ | 紅外接收頭別買錯 | 常用VS1838B是 38kHz 載波,別買成 40kHz 的 |
| ④ | 反碼校驗必須加 | 過濾干擾信號,避免解出亂碼 |
| ⑤ | 重復(fù)碼單獨處理 | 長按按鍵時會發(fā)重復(fù)碼,別當(dāng)成新按鍵 |
總結(jié)
其實 NEC 解碼的核心,從來不是復(fù)雜的代碼,而是搞懂時序的本質(zhì)——把時間差算準(zhǔn)、把校驗做對,剩下的就是水到渠成的事。
哪怕是剛?cè)腴T單片機(jī)的新手,搞懂這一套邏輯,也能一下午就實現(xiàn)紅外遙控解碼。
小貼士:調(diào)試時先用邏輯分析儀抓一組已知按鍵的波形,對照本文的時序參數(shù),確認(rèn)無誤后再寫代碼,事半功倍!
-
NEC
+關(guān)注
關(guān)注
0文章
240瀏覽量
101006 -
信號
+關(guān)注
關(guān)注
12文章
2922瀏覽量
80377 -
紅外遙控
+關(guān)注
關(guān)注
22文章
353瀏覽量
47730
發(fā)布評論請先 登錄
NEC 紅外解碼求助
藍(lán)牙學(xué)習(xí)型紅外線遙控器(NEC協(xié)議編解碼)
基于STM32的紅外遙控和解碼遙控程序解析
Linux驅(qū)動開發(fā)-編寫NEC紅外線協(xié)議解碼驅(qū)動
紅外遙控 NEC 解碼終于搞懂了!看完直接抄作業(yè)
評論