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

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

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

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