C语言遥控器程序,红外遥控
紅外遙控器的發送裝置和接收裝置以及關于載波等一些原理大家可參看《手把手教你學51單片機》文檔第16章知識內容,這里筆者只簡單說明如何運用該模塊并講解代碼的實現。
1.接收裝置
HS0038這個元器件是用來接收紅外遙控器發送來的信號做處理的,我們知道紅外遙控器有21個按鍵,按下不同的按鍵,HS0038的信號引腳就會產生不同的時序,我們解析這些時序就可以判斷按下的是什么按鍵。
比如我們用紅外遙控器對準開發板上的接收裝置HS0038,按下左上角的按鍵,那么HS0038的信號引腳就會產生一系列的變化如下:
首先是引導碼,也就是一開始HS0038信號引腳會拉低信號線9ms左右的時間,然后是4.5ms的高電平時間,這段時序叫做發送端的引導碼。
接著HS0038信號引腳會接收到用戶碼,只要信號線被拉低560us之后又拉高560us的時間,那么我們就認為這段時序是這種字節的一位,為0。
如果信號線被拉低560us之后又拉高1.68ms的時間,那么這段時序就是代表1。
比如信號線的時序如下
這樣我們就知道接收到的字節為0x0C。
0x0C是某個按鍵所發送的字節,我們要知道按鍵的發送有5個階段,分別為:引導碼、用戶碼、用戶反碼、按鍵數據碼、按鍵數據反碼。
引導碼已經說明過它的時序。
然后是用戶碼,用戶碼一直是0x00,也就是HS0038信號引腳是如下所示
接著用戶反碼就是0xFF。
按鍵數據碼如果是0x0C,那么按鍵數據反碼就是0xF3。
0x0C:00001100
0xF3:11110011
2.代碼的實現原理
在第八章第11講我們已經學過輸入捕獲,那么解析紅外遙控就是使用這種方式,看到宋老師的例程lesson16_1里面的函數“void EXINT1_ISR() interrupt 2”。
在main.c中“InitInfrared();”就是為輸入捕獲做好設置,只要信號引腳被拉低就會進入外部中斷函數。
當我們在遙控器上按下某個按鍵時,信號引腳首先接收到的是引導碼,也就是9ms的低電平+4.5ms的高電平,由于一開始接收到低電平所以就會進入“void EXINT1_ISR() interrupt 2”函數,函數里就是一關關的判斷是否一開始接收到9ms低電平,如果是,那么又接著判斷后面是不是產生4.5ms左右的高電平,如果是,接著就是進行判斷后面的用戶碼、用戶反碼、按鍵數據碼、按鍵數據反碼的字節,并存入全局變量的數組ircode[4]中。
總結
以上是生活随笔為你收集整理的C语言遥控器程序,红外遥控的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux关闭硬件蜂鸣器,linux 关
- 下一篇: c语言 自动包含头文件,C语言不要重复包