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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

红外线接受程序 理解

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 红外线接受程序 理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 /************************************************************************************** 2 * 紅外通信實驗 * 3 實現現象:下載程序后,數碼管顯示紅外遙控鍵值數據 4 注意事項: 紅外遙控器內的電池絕緣片一定要抽掉 5 通過該函數可以控制很多東西,因為每個按鍵都有一個固定的16定制的編碼,故而通過if語句來進行判斷這個 6 鍵是否按下,當按下的時候,就可以執行相應的動作 7 ***************************************************************************************/ 8 9 #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器 10 11 12 typedef unsigned int u16; //對數據類型進行聲明定義 13 typedef unsigned char u8; 14 15 sbit LSA=P2^2; 16 sbit LSB=P2^3; 17 sbit LSC=P2^4; 18 19 sbit IRIN=P3^2; 20 21 u8 IrValue[6]; 22 u8 Time; 23 24 u8 DisplayData[8]; 25 u8 code smgduan[17]={ 26 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 27 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76}; 28 //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的顯示碼 29 30 /******************************************************************************* 31 * 函 數 名 : delay 32 * 函數功能 : 延時函數,i=1時,大約延時10us 33 *******************************************************************************/ 34 void delay(u16 i) 35 { 36 while(i--); 37 } 38 39 40 /******************************************************************************* 41 * 函數名 :DigDisplay() 42 * 函數功能 :數碼管顯示函數 43 * 輸入 : 無 44 * 輸出 : 無 45 *******************************************************************************/ 46 void DigDisplay() 47 { 48 u8 i; 49 for(i=0;i<3;i++) 50 { 51 switch(i) //位選,選擇點亮的數碼管, 52 { 53 case(0): 54 LSA=0;LSB=0;LSC=0; break;//顯示第0位 55 case(1): 56 LSA=1;LSB=0;LSC=0; break;//顯示第1位 57 case(2): 58 LSA=0;LSB=1;LSC=0; break;//顯示第2位 59 } 60 P0=DisplayData[2-i];//發送數據 61 delay(100); //間隔一段時間掃描 62 P0=0x00;//消隱 63 } 64 } 65 66 67 /******************************************************************************* 68 * 函數名 : IrInit() 69 * 函數功能 : 初始化紅外線接收 70 * 輸入 : 無 71 * 輸出 : 無 72 *******************************************************************************/ 73 74 void IrInit() 75 { 76 IT0=1;//下降沿觸發 由于P3^2的引腳剛好連的是單片機的外部中斷0 ,故而通過外部中斷0來判斷起始碼9ms和4.5ms 77 EX0=1;//打開中斷0允許 78 EA=1; //打開總中斷 79 80 IRIN=1;//初始化端口 紅外接收端的引腳 81 } 82 83 84 /******************************************************************************* 85 * 函 數 名 : main 86 * 函數功能 : 主函數 87 * 輸 入 : 無 88 * 輸 出 : 無 89 *******************************************************************************/ 90 void main() 91 { 92 IrInit(); 93 while(1) 94 { 95 DisplayData[0] = smgduan[IrValue[2]/16];//得到16位數的高位 96 DisplayData[1] = smgduan[IrValue[2]%16];//得到16位數的低位 97 DisplayData[2] = smgduan[16];//數碼管前面定義的16為字母 H 98 DigDisplay(); 99 } 100 } 101 102 /******************************************************************************* 103 * 函數名 : ReadIr() 104 * 函數功能 : 讀取紅外數值的中斷函數 105 * 輸入 : 無 106 * 輸出 : 無 107 *******************************************************************************/ 108 109 void ReadIr() interrupt 0 110 { 111 u8 j,k; 112 u16 err; 113 Time=0; 114 delay(700); //7ms 115 if(IRIN==0) //確認是否真的接收到正確的信號 116 { 117 118 err=1000; //1000*10us=10ms,超過說明接收到錯誤的信號 119 /*當兩個條件都為真是循環,如果有一個條件為假的時候跳出循環,免得程序出錯的時 120 侯,程序死在這里*/ 121 while((IRIN==0)&&(err>0)) //等待前面9ms的低電平過去 122 { 123 delay(1); 124 err--; 125 } 126 if(IRIN==1) //如果正確等到9ms低電平 127 { 128 err=500; 129 while((IRIN==1)&&(err>0)) //等待4.5ms的起始高電平過去 130 { 131 delay(1); 132 err--; 133 } 134 for(k=0;k<4;k++) //共有4組數據 135 { 136 for(j=0;j<8;j++) //接收一組數據 137 { 138 139 err=60; 140 while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去 141 { 142 delay(1); 143 err--; 144 } 145 err=500; 146 while((IRIN==1)&&(err>0)) //計算高電平的時間長度。 147 { 148 delay(10); //0.1ms 149 Time++; 150 err--; 151 if(Time>30) 152 { 153 return; 154 } 155 } 156 IrValue[k]>>=1; //k表示第幾組數據 將四組字節放入其中 157 if(Time>=8) //如果高電平出現大于565us,那么是1 如果Time =8的時候,表示時間為0.1mS*8=0.8ms 158 { 159 IrValue[k]|=0x80; /*當時間大于565us的時候,為位1 這里相當于讀取(因為已經通過時間確定了位0還是位1相當于寫入了) 160 這個數據 ,因為是讀,故而才將IrValue[k]>>=1;放在IrValue[k]|=0x80;的上面 161 將其先放在高位,之后通過上面的IrValue[k]>>=1; 162 這個語句將其移到下一位 ,這樣就可以將其8位依次由低位移到高位 */ 163 } 164 Time=0; //用完時間要重新賦值 當用Time確定完之后,就要重新賦0,一邊下一次使用 165 } 166 } 167 } 168 if(IrValue[2]!=~IrValue[3]) //用于判斷收到的數據是否正確 ,如果不正確,強行退出 169 { 170 return; 171 } 172 } 173 } View Code

?

轉載于:https://www.cnblogs.com/wises/p/9557572.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的红外线接受程序 理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩高清专区 | va婷婷 | 色偷偷中文字幕 | 日韩免费视频一区二区视频在线观看 | 国产精品国产三级国产专区53 | 特级丰满少妇一级aaaa爱毛片 | www.夜夜骑 | 奇米影视在线视频 | 中文字幕在线观看 | 黄色片子看看 | 日韩人妻精品一区二区三区视频 | 一级黄色录像大片 | 91免费看片 | 久久一级黄色片 | 免费欧美视频 | 欧美一区二区三区在线 | 国产精品xxxxxx| 久久九九久久九九 | 亚洲首页 | 精品人妻无码一区二区三区蜜桃一 | 色av综合网 | av鲁丝一区鲁丝二区鲁丝 | 在线国产网站 | 精品一区精品二区 | 91福利视频网 | 波多野结衣在线视频免费观看 | www一级片 | 亚洲欧美在线综合 | 日本精品少妇 | 欧美专区 日韩专区 | 国产精品免费一区二区区 | 久久毛片网站 | 久久xxxx| jizz日韩 | 色诱视频在线观看 | 又粗又大又硬又长又爽 | 国产成人一区二区三区别 | 午夜视频在线免费观看 | 欧美精品久久久久久久久久 | 免费观看视频一区二区 | 国产人妻精品久久久久野外 | 亚洲色图在线观看 | 91亚洲国产 | 精品欧美视频 | 国产精品第13页 | 黑巨茎大战欧美白妞 | 久久久精品日韩 | 一区二区三区三区在线 | 邻居少妇张开腿让我爽了在线观看 | 日本中文字幕在线 | 日本a天堂 | 男女草逼视频 | 日韩午夜在线 | 国产三级一区二区三区 | av免费看片 | 激情福利网 | 水蜜桃影库 | 亚洲婷婷网| 久久人人爽人人爽人人片亚洲 | 奇米影视第4色 | 高清乱码免费网 | 国产成人一区二区三区小说 | 久久经典视频 | 亚洲久草视频 | avtt在线观看 | 国产99爱| 天天综合日韩 | 日本69少妇| 熟女人妇 成熟妇女系列视频 | 台湾佬在线 | 中国一级黄色大片 | 亚a在线| 日日夜夜精品免费 | 99久| 黄页网址大全免费观看 | 久久久久久久久久久久久久久 | 亚洲v国产v欧美v久久久久久 | 国产精品羞羞答答 | 色中色在线视频 | h视频在线观看网站 | 13日本xxxxxⅹxxx20 | 国产精品一区免费 | 日韩成人专区 | 欧美mv日韩mv国产网站app | 欧美色图19p | 欧美大片91 | 国产不卡精品视频 | 国产伦精品一区二区三区视频痴汉 | 波多野结衣小视频 | 国产高清不卡av | 国产成人无码精品久久 | 亚洲av无码一区二区三区四区 | 日本二区视频 | 欧美另类在线观看 | 无码精品黑人一区二区三区 | 国产精品88 | 在线人成 | 国产熟女一区二区三区五月婷 | 中文字幕免费在线看线人动作大片 |