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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3397|回復: 2
收起左側

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

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

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

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

使用道具 舉報

ID:656093 發(fā)表于 2019-12-4 17:05 | 顯示全部樓層
添加蜂鳴器功能,怎么不響呢,上邊代碼并不是蜂鳴器的,還請大神請教
回復

使用道具 舉報

ID:657755 發(fā)表于 2019-12-6 19:56 | 顯示全部樓層
蜂鳴器代碼怎么寫啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久这里只有精品首页 | 一区二区三区国产好的精 | 日韩在线视频一区 | 国产乱精品一区二区三区 | 天天看片天天干 | 欧美在线一区二区三区 | 中文字幕在线不卡播放 | 国产成人免费视频网站视频社区 | 天天天操 | 天天躁日日躁狠狠躁白人 | 夜色www国产精品资源站 | 久久99视频 | 国产一极毛片 | 国产精品视频免费 | 国产三级电影网站 | 欧美色偷拍 | 精品九九在线 | 午夜电影网 | 高清亚洲 | 亚洲欧美综合 | 免费激情网站 | 蜜臀久久99精品久久久久野外 | 中文一区 | 国产91丝袜在线18 | 精品国产免费人成在线观看 | 欧美精品一区在线发布 | 中文字幕一区二区三区四区五区 | 国产小u女发育末成年 | 黄色免费在线观看网站 | 午夜影院在线观看免费 | 久草免费在线视频 | 久久成人精品一区二区三区 | 成人a视频片观看免费 | 国产欧美精品在线观看 | 国户精品久久久久久久久久久不卡 | 一级黄色片免费在线观看 | 久热精品免费 | 欧美一区二区免费 | 午夜在线小视频 | 求毛片 | 欧美日韩在线成人 |