日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于STM32红外遥控器的研究与分析

發布時間:2024/8/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于STM32红外遥控器的研究与分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?前情提要:

STM32 紅外遙控器詳解_Lzjusc2017的博客-CSDN博客

?關于左移右移的問題:程序如圖。

?????? 正點原子程序寫的是左移,所以接收到的數據依次是同步碼頭、地址碼、地址反碼、數據碼、數據反碼、連發碼。但是中間32位數據(RmtRec),每一部分(一共四部分)的位都是相反的,因為信號是低位發送,所以先接收到低位,例如發送按鍵1,應該是00001100(0X0C),但是左移接收便是00110000(0x30)。

??? 【如果在此基礎上直接改成右移,那么這32位數據(RmtRec)的數據最終順序是數據反碼、數據碼、地址反碼、地址碼(猜測,還未驗證)。改成右移之后發現程序出現問題,后續有時間會再更新,找到問題所在。。。RmtRec|=0 和 RmtRec&=0 在紅框內應該是一樣的。但按理說應該使用&,有0則0】

???? 為了能夠跟遙控器的鍵值對應上,我在鍵盤掃描函數中增加了顛倒位操作,把錯誤的數據碼改成更正過來。程序如下:

u8 Remote_Scan(void) { u8 sta=0;u8 resta=0; u8 t1,t2,i,x; if(RmtSta&(1<<6))//得到一個按鍵的所有信息了{ t1=RmtRec>>24; //得到地址碼,RmtRec最高的8位,通過右移位變為了00000000 00000000 00000000 xxxxxxxxt2=(RmtRec>>16)&0xff; //得到地址反碼 ,因為已知地址碼是0,所以通過與全1相與得到地址反碼if((t1==(u8)~t2)&&t1==0)//檢驗遙控識別碼(ID)及地址 :(u8)是只對低8位進行判斷{ t1=RmtRec>>8; //控制碼t2=RmtRec; //控制反碼(低8位if(t1==(u8)~t2)sta=t1;//鍵值正確:(u8)是只對低8位進行判斷for(i=0;i<7;i++) //相當于移位了七次,i從0一直到6{x = sta>>i&(0x01);resta=resta|x;resta<<=1; }} if((sta==0)||((RmtSta&0X80)==0))//按鍵數據錯誤/遙控已經沒有按下了{RmtSta&=~(1<<6);//清除接收到有效按鍵標識RmtCnt=0; //清除按鍵次數計數器}} return resta; }

通過該段代碼解決了問題:

????????? for(i=0;i<7;i++)?
?? ??? ??? ??? ?{
?? ??? ??? ??? ????? x = sta>>i&(0x01);
?? ??? ??? ??? ??? ??? resta=resta|x;
?? ??? ??? ??? ??? ??? resta<<=1;?? ?
?? ??? ??? ??? ?}

返回的值可以跟按鍵值一一對應。

?注:待完善。

總結

以上是生活随笔為你收集整理的关于STM32红外遥控器的研究与分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。