久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3433|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STM32戰(zhàn)艦迷你板的紅外實驗加了蜂鳴器 附程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:562896 發(fā)表于 2019-6-15 12:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強,信息傳輸可靠,功耗低,成
本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設(shè)備特別是家用電器廣泛采用,并越來越多的應(yīng)用到計
算機系統(tǒng)中。
由于紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設(shè)
計紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率
或編碼(否則,就會隔墻控制或干擾鄰居的家用電器),所以同類產(chǎn)品的紅外線遙控器,可以有
相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的情況。這對于大批量生產(chǎn)以及在家用
電器上普及紅外線遙控提供了極大的方面。由于紅外線為不可見光,因此對環(huán)境影響很小,再
由紅外光波動波長遠小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影
響臨近的無線電設(shè)備。
紅外遙控的編碼方式目前廣泛使用的是:PWM(脈沖寬度調(diào)制)的 NEC 協(xié)議和 Philips
PPM(脈沖位置調(diào)制) 的 RC-5 協(xié)議的。ALIENTEK MiniSTM32 開發(fā)板配套的遙控器使用的是
NEC 協(xié)議,其特征如下:
1、8 位地址和 8 位指令長度;
2、地址和命令 2 次傳輸(確?煽啃裕
3、PWM 脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
4、載波頻率為 38Khz;
5、位時間為 1.125ms 或 2.25ms;
NEC 碼的位定義:一個脈沖對應(yīng) 560us 的連續(xù)載波,一個邏輯 1 傳輸需要 2.25ms(560us
脈沖+1680us 低電平),一個邏輯 0 的傳輸需要 1.125ms(560us 脈沖+560us 低電平)。而遙控
接收頭在收到脈沖的時候為低電平,在沒有脈沖的時候為高電平,這樣,我們在接收頭端收到
的信號為:邏輯 1 應(yīng)該是 560us 低+1680us 高,邏輯 0 應(yīng)該是 560us 低+560us 高。
NEC 遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼
由一個 9ms 的低電平和一個 4.5ms 的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是
8 位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃裕ǹ?br /> 用于校驗)。
我們遙控器的按鍵▽按下時,從紅外接收頭端收到的波形如圖
紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強,信息傳輸可靠,功耗低,成
本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設(shè)備特別是家用電器廣泛采用,并越來越多的應(yīng)用到計
算機系統(tǒng)中。
由于紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設(shè)
計紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率
或編碼(否則,就會隔墻控制或干擾鄰居的家用電器),所以同類產(chǎn)品的紅外線遙控器,可以有
相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的情況。這對于大批量生產(chǎn)以及在家用
電器上普及紅外線遙控提供了極大的方面。由于紅外線為不可見光,因此對環(huán)境影響很小,再
由紅外光波動波長遠小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影
響臨近的無線電設(shè)備。
紅外遙控的編碼方式目前廣泛使用的是:PWM(脈沖寬度調(diào)制)的 NEC 協(xié)議和 Philips
PPM(脈沖位置調(diào)制) 的 RC-5 協(xié)議的。ALIENTEK MiniSTM32 開發(fā)板配套的遙控器使用的是
NEC 協(xié)議,其特征如下:
1、8 位地址和 8 位指令長度;
2、地址和命令 2 次傳輸(確?煽啃裕
3、PWM 脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
4、載波頻率為 38Khz;
5、位時間為 1.125ms 或 2.25ms;
NEC 碼的位定義:一個脈沖對應(yīng) 560us 的連續(xù)載波,一個邏輯 1 傳輸需要 2.25ms(560us
脈沖+1680us 低電平),一個邏輯 0 的傳輸需要 1.125ms(560us 脈沖+560us 低電平)。而遙控
接收頭在收到脈沖的時候為低電平,在沒有脈沖的時候為高電平,這樣,我們在接收頭端收到
的信號為:邏輯 1 應(yīng)該是 560us 低+1680us 高,邏輯 0 應(yīng)該是 560us 低+560us 高。
NEC 遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼
由一個 9ms 的低電平和一個 4.5ms 的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是
8 位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃裕ǹ?br /> 用于校驗)。
我們遙控器的按鍵▽按下時,從紅外接收頭端收到的波形如圖

紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強,信息傳輸可靠,功耗低,成
本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設(shè)備特別是家用電器廣泛采用,并越來越多的應(yīng)用到計
算機系統(tǒng)中。
由于紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設(shè)
計紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率
或編碼(否則,就會隔墻控制或干擾鄰居的家用電器),所以同類產(chǎn)品的紅外線遙控器,可以有
相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的情況。這對于大批量生產(chǎn)以及在家用
電器上普及紅外線遙控提供了極大的方面。由于紅外線為不可見光,因此對環(huán)境影響很小,再
由紅外光波動波長遠小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影
響臨近的無線電設(shè)備。
紅外遙控的編碼方式目前廣泛使用的是:PWM(脈沖寬度調(diào)制)的 NEC 協(xié)議和 Philips
PPM(脈沖位置調(diào)制) 的 RC-5 協(xié)議的。ALIENTEK MiniSTM32 開發(fā)板配套的遙控器使用的是
NEC 協(xié)議,其特征如下:
1、8 位地址和 8 位指令長度;
2、地址和命令 2 次傳輸(確保可靠性)
3、PWM 脈沖位置調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
4、載波頻率為 38Khz;
5、位時間為 1.125ms 或 2.25ms;
NEC 碼的位定義:一個脈沖對應(yīng) 560us 的連續(xù)載波,一個邏輯 1 傳輸需要 2.25ms(560us
脈沖+1680us 低電平),一個邏輯 0 的傳輸需要 1.125ms(560us 脈沖+560us 低電平)。而遙控
接收頭在收到脈沖的時候為低電平,在沒有脈沖的時候為高電平,這樣,我們在接收頭端收到
的信號為:邏輯 1 應(yīng)該是 560us 低+1680us 高,邏輯 0 應(yīng)該是 560us 低+560us 高。
NEC 遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼
由一個 9ms 的低電平和一個 4.5ms 的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是
8 位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃裕ǹ?br /> 用于校驗)

單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "remote.h"  
  7. #include "ds18b20.h"  
  8. #include "beep.h"

  9. void ds18b20(void)
  10. {
  11. u8 t=0;        
  12. short temperature;
  13.                 while(DS18B20_Init())        //DS18B20初始化        
  14.         {
  15.                 LCD_ShowString(60,130,200,16,16,(u8*)"DS18B20 Error");
  16.                 delay_ms(200);
  17.                 LCD_Fill(60,130,239,90+16,WHITE);
  18.                  delay_ms(200);
  19.         }               
  20. POINT_COLOR=BLUE;//設(shè)置字體為藍色
  21.          LCD_ShowString(60,130,200,16,16,(u8*)"Temp:   . C");        
  22. if(t%10==0)//每100ms讀取一次
  23.                 {                                                                          
  24.                         temperature=DS18B20_Get_Temp();        
  25.                         if(temperature<0)
  26.                         {
  27.                                 LCD_ShowChar(60+40,130,'-',16,0);                        //顯示負(fù)號
  28.                                 temperature=-temperature;                                        //轉(zhuǎn)為正數(shù)
  29.                         }else LCD_ShowChar(60+40,130,' ',16,0);                        //去掉負(fù)號
  30.                         LCD_ShowNum(60+40+8,130,temperature/10,2,16);        //顯示正數(shù)部分            
  31.                            LCD_ShowNum(60+40+32,130,temperature%10,1,16);        //顯示小數(shù)部分                    
  32.                 }                                   
  33.                  delay_ms(10);
  34.                 t++;
  35. }

  36. int main(void)
  37. {
  38.         u8 key;
  39.         u8 *str=0;         
  40.         delay_init();                     //延時函數(shù)初始?
  41.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級分組2         
  42.         uart_init(9600);                 //串口初始化為9600
  43.         LED_Init();                                  //初始化與LED連接的硬件接口
  44.          LCD_Init();
  45.         Remote_Init();                        //紅外接收初始化        
  46.         BEEP_Init();//蜂鳴器初始化                        
  47.          POINT_COLOR=RED;//設(shè)置字體為紅色
  48.                 LCD_ShowString(60,50,200,16,16,(u8*)"Mini STM32");        
  49.                 LCD_ShowString(60,70,200,16,16,(u8*)"REMOTE TEST");        
  50.            LCD_ShowString(60,90,200,16,16,(u8*)"KEYVAL:");               
  51.            LCD_ShowString(60,110,200,16,16,(u8*)"SYMBOL:");
  52.         while(1)
  53.         {
  54.                 key=Remote_Scan();        
  55.                 if(key)
  56.                 {         
  57.                         LCD_ShowNum(116,90,key,3,16);                //顯示鍵值         
  58.                         switch(key)
  59.                         {
  60.                                 case 0:str=(u8*)"ERROR";break;                           
  61.                                 case 162:str=(u8*)"POWER",NVIC_SystemReset();break;         //復(fù)位   
  62.                                 case 98:str=(u8*)"UP",LED1=0;break; //DS1點亮   
  63.                                 case 2:str=(u8*)"PLAY",ds18b20();break;        //DS1熄滅         
  64.                                 case 226:str=(u8*)"ALIENTEK",play();break;                  
  65.                                 case 194:str=(u8*)"RIGHT",LED0=0;break;         //DS0點亮  
  66.                                 case 34:str=(u8*)"LEFT",LED0=1;break;         //DS0熄滅
  67.                                 case 224:str=(u8*)"VOL-",LCD_Fill(10,200,230,300,LGRAY);break;                  
  68.                                 case 168:str=(u8*)"DOWN",LED1=1;break;                  
  69.                                 case 144:str=(u8*)"VOL+",LCD_Fill(10,200,230,300,BROWN);break;                    
  70.                                 case 104:str=(u8*)"1",LCD_Fill(10,200,230,300,WHITE);break;                  
  71.                                 case 152:str=(u8*)"2",LCD_Fill(10,200,230,300,BLACK);break;           
  72.                                 case 176:str=(u8*)"3",LCD_Fill(10,200,230,300,BLUE);break;            
  73.                                 case 48:str=(u8*)"4",LCD_Fill(10,200,230,300,RED);break;                    
  74.                                 case 24:str=(u8*)"5",LCD_Fill(10,200,230,300,MAGENTA);break;                    
  75.                                 case 122:str=(u8*)"6",LCD_Fill(10,200,230,300,GREEN);break;                  
  76.                                 case 16:str=(u8*)"7",LCD_Fill(10,200,230,300,CYAN);break;                                                                  
  77.                                 case 56:str=(u8*)"8",LCD_Fill(10,200,230,300,YELLOW);break;         
  78.                                 case 90:str=(u8*)"9",LCD_Fill(10,200,230,300,BRRED);break;
  79.                                 case 66:str=(u8*)"0",LCD_Fill(10,200,230,300,GRAY);break;
  80.                                 case 82:str=(u8*)"DELETE",LCD_Fill(60,130,239,130+16,WHITE);;break;                 
  81.                         }
  82.                         LCD_Fill(116,110,116+8*8,110+16,WHITE);        //清除之前的顯示
  83.                         LCD_ShowString(116,110,200,16,16,str);        //顯示SYMBOL
  84.                 }else delay_ms(10);         
  85.                
  86.         }
  87. }
復(fù)制代碼

所有資料51hei提供下載:
紅外遙控器實驗.rar (380.46 KB, 下載次數(shù): 16)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:656093 發(fā)表于 2019-12-4 17:05 | 只看該作者
添加蜂鳴器功能,怎么不響呢,上邊代碼并不是蜂鳴器的,還請大神請教
回復(fù)

使用道具 舉報

板凳
ID:657755 發(fā)表于 2019-12-6 19:56 | 只看該作者
蜂鳴器代碼怎么寫啊
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三 | 日韩精品在线一区 | 免费一看一级毛片 | 久久高清 | 狠狠av | 亚洲在线| 黄色精品视频网站 | 91影院在线观看 | 日韩一区二区三区在线观看 | 免费观看一级特黄欧美大片 | 久久亚洲综合 | 蜜桃在线一区二区三区 | 激情五月婷婷综合 | 在线高清免费观看视频 | www.久草| 免费在线观看毛片 | 久久久久久久久久爱 | 国产精品久久欧美久久一区 | 国产真实精品久久二三区 | av资源网站| 日本成人中文字幕 | 国产午夜一级 | www.夜夜骑.com | 亚洲第一成年免费网站 | 欧美日韩国产在线 | 欧美日韩免费一区二区三区 | 综合久久99 | 欧美日韩一区二区在线 | 欧洲毛片 | 欧美日韩亚洲视频 | 欧美手机在线 | 一区二区三区四区免费观看 | 亚洲精品乱码久久久久久蜜桃91 | 91五月天| 亚洲一区不卡在线 | 久久久久久国产免费视网址 | 九九热这里只有精品在线观看 | 密乳av| 99视频在线 | 国产高清精品在线 | 免费在线观看av网址 |