基於PWM調製的紅外遙控器的設計

2021-06-28 09:17:54 字數 1168 閱讀 8756

下面首先先簡單介紹單匯流排通訊的原理:

假設通訊線上無資料時,即常態為低電平,即單匯流排以 下拉電阻將匯流排拉為低電平,其中100k歐就是常態的下拉電阻。

這裡以12v為高電平,以實現較遠通訊電路的設計

那麼如何實現數字通訊呢?

現將3ms高電平,1ms低電平作為邏輯1;1ms高電平,1ms低電平作為邏輯0.(當然,只要高電平的時間有明顯區分即可)

軟體設計時,通常需要定時器配合,即設計乙個0.5ms的定時中斷,並定義乙個中斷次數計數器c,每發生一次中斷,c加一。

軟體包括發資料和接收資料兩部分。

(1)發資料程式設計方法

程式應設計兩個函式,發邏輯1和發邏輯0兩個函式。

發邏輯1是,首先將定時器重新初始化,並將c清0,將傳送資料埠置1.之後一直查詢計數器c,當c等於6時,傳送埠立即給0.並將定時器重新初始化,且c清0;然後查詢等待

當c等於2時,程式返回,即傳送邏輯1結束。同理髮邏輯0.

採用位域的方法定義輸出為port_send,輸入為prt_re.注意要初始化i/o屬性

unsigned int ms_timing0;

void send_high()//3個1ms高電平和1個1ms低電平為傳送邏輯1

void send_low()//乙個1ms高電平和1ms低電平為乙個傳送邏輯0

下面是發乙個位元組資料的程式:

void send(unsigned int  nc)

}(2)接收資料

接受資料需要一直查詢接收資料埠,發現為高電平,即刻進入接收資料狀態。

當出現高電平後,定時器重新初始化,且c清0,查詢等待直到接收埠出現低電平,立即退出c的值。

當1<  當5<

軟體設計時,要注意防止進入程式死區,在等待高或低電平時,同時也要查詢計數器c的值,當c已經很大,比如10時,要考慮是否發生匯流排錯誤問題,該類情況要給予充分的重視。

下面是連續接收8個邏輯位的函式,當檢測到高電平時,即刻進入此函式。

unsigned int re8()

if((c_times>=1)&&(c_times<3)) nc<<=1;

if((c_times>=5)&&(c_times<7)) nc=(nc<<1)|0x01;

c_times=0;

while(!port_re)

}  return nc;

}

神奇的遙控器

看完美國的 神奇遙控器 後,感慨多多。看完後,我知道人生在於分分秒秒的經歷,每經歷過一些,我們都能得到一些精彩,無論是痛苦還是快樂,有時覺得經歷一段人生低潮是很有必要的,痛苦的時刻也會給人帶來特殊的體驗。看完後,我開始想起家人,想著日日夜夜掛念我的爸媽,想著我的哥哥,姐姐和弟弟。家人需要的不是給他們...

STM32高階 紅外遙控器的應用詳細步驟

紅外遙控是一種無線 非接觸摸制技術,具有抗干擾能力強,資訊傳輸可靠,功耗低,成本低,易實現等顯著優點,被諸多電子裝置特別是家用電器廣泛採用,並越來越多的應用到計算機系統中。同類產品的紅外線遙控器,可以有相同的遙控頻率或編碼,而不會出現遙控訊號 串門 的情況。紅外遙控的編碼目前廣泛使用的是 nec p...

使用電視遙控器的基於Arduino的家庭自動化

家庭自動化是乙個概念,其中單個裝置用於控制房屋的許多方面,例如開啟和關閉不同的電器,監視溫度,火災警報,車庫門等。在此專案中,使用遙控器進行控制 簡單地說是 開 和 關 幾個電器或裝置,從而實現簡單的家庭自動化系統。遙控器是幾乎所有家庭中最常用的裝置之一。它們幫助我們操作電視,空調,vcr等裝置。遙...