




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于 msp430f149的PWM 紅外解碼的研究摘要: 因?yàn)榧t外遙控的實(shí)用與經(jīng)濟(jì)性,本文研究 PWM 方式調(diào)制的紅外解碼的實(shí)現(xiàn)。 紅外線遙控是目前使用最廣泛的一種通信和遙控手段。因?yàn)榧t外線遙控裝置具有體積小、功耗低、 功能強(qiáng)、成本低等特點(diǎn),因而,繼彩電、錄像機(jī)之后,在錄音機(jī)、音響設(shè)備、空凋機(jī)以及玩具等其它小型 電器裝置上也紛紛采用紅外線遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線 遙控不僅完全可靠而且能有效地隔離電氣干擾。1紅外遙控系統(tǒng)通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如下所示:一)發(fā)射部分 鍵盤矩陣、編碼調(diào)制、 LE
2、D 紅外發(fā)送器2 遙控發(fā)射器及其編碼1)遙控發(fā)射器專用芯片很多2)根據(jù)編碼格式可以分成:脈沖寬度調(diào)制和脈沖相位調(diào)制兩大類 現(xiàn)在我們研究以運(yùn)用比較廣泛,解碼比較容易實(shí)現(xiàn)的脈沖寬度調(diào)制來加以說明。當(dāng)發(fā)射器按鍵按下 后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:( a) 采用脈寬調(diào)制的串行碼( b ) 以脈寬為 0.565ms、間隔 0.56ms、周期為 1.125ms的組合表示二進(jìn)制的 “0”( c) 以脈寬為 0.565ms、間隔 1.685ms、周期為 2.25ms的組合表示二進(jìn)制的 “1”遙控器發(fā)出由 “0”和“1”組成的 32位二進(jìn)制碼,經(jīng) 38kHz 的載頻進(jìn)行
3、二次調(diào)制以提高發(fā)射效率,達(dá)到降低 電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,其中前 16位為用戶識別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為 8位的操作碼和 8位的操作反碼用于核對數(shù)據(jù)是否接收正確。解碼的關(guān)鍵是如何識別 “0”和“1”,從位的定義我們可以發(fā)現(xiàn) “0”、“1”均以 0.56ms的低電平開始,不同的 是高電平的寬度不同, “0”為0.56ms,“1為”1.68ms,所以必須根據(jù)高電平的寬度區(qū)別 “0”和 “1?!比绻麖?0.56ms 低電平過后,開始延時, 0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為 “1”,為了可
4、靠起見,延時必須比 0.56ms長些,但又不能超過 1.12ms,否則如果該位為 “0”,讀到的已是下一位的高電平,因此 取1.12ms+0.56ms) /2=0.84ms最為可靠,一般取 0.84ms左右即可。根據(jù)紅外編碼的格式,程序應(yīng)該等待9ms的起始碼和 4.5ms的結(jié)果碼完成后才能讀碼。/ 10接收器及解碼VS0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需 要任何外接元件,就能完成從紅外線接收到輸出與TTL 電平信號兼容的所有工作,沒有紅外遙控信號時為高電平,收到紅外信號時為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅
5、外線數(shù)據(jù)傳輸。下面是一個 msp430f149 單片機(jī)對紅外線遙控器的解碼程序,它可以把遙控器的32位碼42 位碼也可以)的紅外遙控器每一個按鍵的鍵值讀出來,并且通過 12864 點(diǎn)陣液晶顯示編碼和鍵值,在解碼成功的 同時發(fā)出“嘀”的提示音。并且能把編碼保存起來,如果此時按下鍵盤上第三個鍵,就把該信號再向外發(fā) 射出去,不過一次只能存一組數(shù)據(jù),如果有興趣可以把編碼存入 flash ,這樣不僅可以保存更多的編碼, 而且掉電數(shù)據(jù)也不會丟。這是我測試時用的遙控器這是測試的結(jié)果,前三行是紅外信號的編碼,最后一行是 8 位數(shù)據(jù)碼的十六進(jìn)制格式,因?yàn)槲业倪b 控器采用的是 32 位二進(jìn)制碼,所以后十位是無效位
6、。如果是對42 位二進(jìn)制碼的遙控器解碼時,前 26 位是系統(tǒng)碼,后 16 位是 8 位數(shù)據(jù)碼和 8 位數(shù)據(jù)反碼。不過此時第四行的十六進(jìn)制是無效哦。/ 10軟件設(shè)計(jì)思想及流程 :1)程序使用到的 msp430f149單片機(jī)的 IO口主要有 P4與P6用于 12864液晶驅(qū)動) P1.3與P5.2分別用來實(shí) 現(xiàn)紅外數(shù)據(jù)的接收和紅外數(shù)據(jù)的發(fā)送)。2)程序的關(guān)鍵部分是紅外解碼,而根據(jù)紅外線發(fā)出的紅外信號編碼的規(guī)則可以看出,二進(jìn)制碼“ 0和”“ 1最主要的區(qū)別在于脈沖時間的長短,所以根據(jù)判斷脈沖時間便可以判斷是“1還”是 “0”。其程序如下:程序已調(diào)試通過直接移值就可以用) #include #incl
7、ude config.h#define CPU_F (double8000000 /CPU 主頻 8MHZ#define delay_us(x _delay_cycles(long(CPU_F*(doublex/1000000.0 #define delay_ms(x _delay_cycles(long(CPU_F*(doublex/1000.0 #define uchar unsigned char#define uint unsigned int紅外接收端口定義 */#define HW_I #define HW_O #define HW_L #define HW_H#define HW
8、_QP1DIR &=BIT3 P1DIR |= BIT3 P1OUT &=BIT3 P1OUT |= BIT3 (P1IN & BIT3*12864液晶端口定義 */#define RS (1 #define RW (1 #define EC (1 #define PSB (1/ 10#defineRST(1/*紅外發(fā)射端口定義 */#defineFS_HP5OUT |=BIT2#defineFS_LP5OUT&=BIT2#defineFS_IP5DIR&=BIT2#defineFS_OP5DIR |=BIT2#defineFS_FP5OUT =BIT2#defineFSIEON TACCTL
9、0|=CCIE 。 TACCTL1|=CCIE#defineFSIEOFF TACCTL0&=CCIE 。 TACCTL1&=CCIE#defineBUZ_OFF P6OUT|=BIT2#defineBUZ_ON P6OUT&=BIT2uchar flag,ff,mf,num 。int width 。 /用來設(shè)定載波信號的持續(xù)時間uchar table_IR42 。 /用來存放接收的紅外信號編碼uchar table_ir0=0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1 。 /音量 - uchar table_i
10、r1=0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,1 。 /音量 + uchartable_lcd=48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 。 /液晶顯示數(shù)字對應(yīng) ASIIC void LCD_INIT(void 。 /液晶初始化函數(shù)聲明void WRITE_COM(uchar com 。 /液晶寫指令函數(shù)聲明 void WRITE_DATA(uchar data 。 /液晶寫數(shù)據(jù)函數(shù)聲明 char READ_BF(void 。 /液晶忙檢查函數(shù)聲明 void
11、 infrared(void 。 /紅外接收檢測函數(shù)聲明 void IR_SEND(uchar *pir 。 /紅外發(fā)射函數(shù)聲明 uchar key(void 。 /矩陣鍵盤掃描函數(shù)聲明 void main(voiduint i=0 。uchar keydata。 /存放鍵值用WDTCTL=WDTPW+WDTHOLD 。 /關(guān)閉看門狗 BCSCTL1 &=XT2OFF 。/開啟XT2 高速晶體振蕩器BCSCTL2|=SELM_2+SELS 。doIFG1&=OFIFG 。for(i=0 。 i_NOP( 。while(IFG1&OFIFG 。IFG1 &=OFIFG 。Close_LED( 。
12、 /關(guān)閉數(shù)碼管P5DIR|=RS+RW+EC+PSB+RST 。/ 初始化液晶相關(guān)端口P6DIR|=BIT2 。 /蜂鳴器端口設(shè)為輸出模式BUZ_OFF 。 /關(guān)閉蜂鳴器HW_L 。HW_I 。 /初始化紅外接收端口/ 10P1DIR=0 x0f 。P1OUT=0 x00 。 /初始化矩陣鍵盤端口,紅外接收復(fù)用P1.3口FS_O。FS_L。 /初始化紅外發(fā)射端口P2DIR=0 xff 。P2OUT=0 xff 。/初始化 LED 端口LCD_INIT( 。 /初始化液晶TACTL|=TASSEL_2+MC_1+TACLR 。/設(shè)置定時器 A 時鐘源為 MCLK ,不分頻,增計(jì)數(shù)模式 TACCT
13、L0|=CCIE 。 /允許比較 0中斷TACCTL1|=CCIE 。 /允許比較 1中斷TACCR0=210 。/26.25us中斷一次,用以產(chǎn)生 38kHZ ,占空比為 1:3的方波TACCR1=70 。 /8.75us中斷一次 /_BIS_SR(GIE 。_EINT( 。 /開啟總中斷/_DINT( 。 /關(guān)閉總中斷for( 。 infrared( 。 / 紅外接收檢測P1DIR=0 x0f 。 /紅外接收和矩陣鍵盤端口復(fù)用,所以在調(diào)用鍵盤掃描程序前重定義端口 P1OUT=0 x00 。keydata=key( 。 /讀鍵值if(keydata/ 如果用按鍵按下,根據(jù)返回值調(diào)用發(fā)射相對的
14、編碼 switch(keydatacase 1:IR_SEND(table_ir0 。 break。/如果按下 1,發(fā)射 “音量 -”case 2:IR_SEND(table_ir1 。break。/如果按下 2,發(fā)射 “音量 +”case 3:IR_SEND(table_IR 。break。 /如果按下 3,發(fā)射上次紅外接收的編碼值 default :break 。 /*紅外發(fā)射函數(shù) */void IR_SEND(uchar *pir uchar i 。width=383 。_EINT( 。 /開啟總中斷 while(width0 。 /輸出 9ms的載波信號 _DINT( 。 /關(guān)閉總中斷
15、FS_H。 delay_us(4500 。 /輸出 4.5ms的高電平 for(i=0 。 iwidth=21 。 /21/ 10_EINT( 。 /開啟總中斷while(width0 。/輸出 0.56ms的載波信號_DINT( 。 /關(guān)閉總中斷if(*pir+FS_H 。delay_us(1685 。 /根據(jù)編碼確定要輸出 “0還”是 “1” else FS_H 。 delay_us(560 。 /如果是 “ 1輸”出1.685ms的高電平, / 如果是 “ 0,”輸出 0.56ms 的高電平width=21 。 /21_EINT( 。 /開啟總中斷while(width0 。/輸出 0.
16、56ms的載波信號作為結(jié)束碼_DINT( 。 /關(guān)閉總中斷FS_L。/關(guān)閉紅外發(fā)射管 P2OUT&=BIT0 。delay_ms(100 。P2OUT|=BIT0 。 /LED0 閃爍一下作為發(fā)射標(biāo)志 void infrared(void紅外接收函數(shù) */uchar k 。uchar ir=0 。uchar j=0 。uchar value_L=0,value_H=0 。 /存放操作碼的高四位和低四位HW_I 。 /在檢測前把端口為輸入for(k=0 。k delay_us(400 。 if(HW_Q return 。 / 檢測是否有 9ms的低電平,否則返回重新檢測 while(!HW_Q
17、。/等待 9ms低電平過去 for(k=0 。k delay_us(500 。if(!HW_Qreturn 。 /如果在 2.5ms內(nèi)有低電平,則認(rèn)為是干擾,并且退出重新檢測 while(HW_Q 。 /等待 4.5ms高電平過去 for(k=0 。k while(!HW_Q 。 / 等待 0.565ms的低電平過去 while(HW_Q / 計(jì)算高電平的寬度,判斷接收的為“ 0還”是 “ 1 ” delay_us(100 。 j+ 。 if(j22break 。 / 如果高電平時間過長,跳出循環(huán),繼續(xù)執(zhí)行下面的程序/ 10if(j=7/ 如果高電平的寬度大于 0.7ms,則接收的為 1, 同
18、時存入數(shù)組table_IRk=1 。else table_IRk=0 。/如果高電平寬度小于 0.7ms,則接收的為 “ 0,”同時存入數(shù)組 j=0 。for(k=16 。k/把第 3個字節(jié)低四位存入 value_L內(nèi),便于在液晶上顯示value_Lvalue_L|=0 x01 。for(k=20 。k/把第 3個字節(jié)高四位存入 value_H內(nèi),便于在液晶上顯示value_Hvalue_H|=0 x01 。WRITE_COM(0 x80 。 /設(shè)置液晶第一行顯示前 16位字符 。for(k=0 。kir=table_IRk 。WRITE_DATA(table_lcdir 。while(REA
19、D_BF( 。WRITE_COM(0 x90 。 /設(shè)置液晶第二行顯示 8位的操作碼和 8位的操作反碼 while(READ_BF( 。for(k=0 。kir=table_IRk+16 。WRITE_DATA(table_lcdir 。while(READ_BF( 。WRITE_COM(0 x88 。 /如果遙控器發(fā)出的是 42位二進(jìn)制碼,則剩余的部分在第三行顯示 while(READ_BF( 。for(k=0 。kir=table_IRk+32 。WRITE_DATA(table_lcdir 。while(READ_BF( 。WRITE_COM(0 x98 。 /第四行顯示 16進(jìn)制的操作
20、碼/ 10while(READ_BF( 。WRITE_DATA(table_lcdvalue_L 。WRITE_DATA(table_lcdvalue_H 。HW_O 。BUZ_ON 。delay_ms(50 。BUZ_OFF 。/* 矩陣鍵盤檢測函數(shù),根據(jù)返回值可以判斷按下的是哪個鍵 */ unsigned char key(voidunsigned char rank 。char row 。unsigned char temp 。unsigned char num=0 。 if(P1IN&0 xf0!=0 xf0delay_ms(15 。 if(P1IN&0 xf0!=0 xf0switc
21、h(P1IN&0 xf0/ 列檢測case 0 x70:rank=0 。 break。case 0 xb0:rank=4 。 break。case 0 xd0:rank=8 。 break。case 0 xe0:rank=12 。 break。temp=0 x01 。for(row=4 。 row0 。 row-P1OUT= temp 。 if(P1IN&0 xf0!=0 xf0num=row+rank 。P1OUT=0 xf0 。return num 。temp!=0 xf0 。delay_ms(15 。while(P1IN&0 xf0!=0 xf0 。/ 10return num 。液晶初始化函數(shù) */void LCD_INIT(voidP5OUT|=RST 。P5OUT|=PSB 。WRITE_COM(0 x30 。 while(READ_BF( 。 WRITE_COM(0 x0c 。 while(READ_BF( 。 WRITE_COM(0 x01
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院《打印創(chuàng)新設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津醫(yī)科大學(xué)臨床醫(yī)學(xué)院《電視節(jié)目播音主持實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 邵陽職業(yè)技術(shù)學(xué)院《結(jié)構(gòu)設(shè)計(jì)軟件應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春職業(yè)技術(shù)學(xué)院《三維動畫MAYA》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)江師范學(xué)院《SAS與統(tǒng)計(jì)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年重慶市建筑安全員考試題庫附答案
- 長春師范大學(xué)《公共管理與公共政策實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安航空學(xué)院《老年認(rèn)知癥的篩查與干預(yù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京科技職業(yè)學(xué)院《會展設(shè)計(jì)實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 襄陽職業(yè)技術(shù)學(xué)院《現(xiàn)代環(huán)境分析技術(shù)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 病歷書寫相關(guān)法律法規(guī)
- 老舊小區(qū)加裝電梯方案
- 老年人誤吸與預(yù)防-護(hù)理團(tuán)標(biāo)
- 輸氣場站工藝流程切換操作規(guī)程課件
- 青少年網(wǎng)絡(luò)安全教育課件
- 2021年全國統(tǒng)一高考英語試卷(新課標(biāo)Ⅰ)(原卷版)
- 產(chǎn)科抗磷脂綜合征診斷與處理專家共識護(hù)理課件
- 中醫(yī)護(hù)理中藥封包課件
- 2024年中智集團(tuán)及下屬單位招聘筆試參考題庫含答案解析
- 中草藥材種植基地項(xiàng)目申請報告
- 2022年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能題庫及答案解析
評論
0/150
提交評論