#mspfPWM紅外解碼(C語(yǔ)言)_第1頁(yè)
#mspfPWM紅外解碼(C語(yǔ)言)_第2頁(yè)
#mspfPWM紅外解碼(C語(yǔ)言)_第3頁(yè)
#mspfPWM紅外解碼(C語(yǔ)言)_第4頁(yè)
#mspfPWM紅外解碼(C語(yǔ)言)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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)用編/解碼專用集成電路芯片來(lái)進(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)制來(lái)加以說(shuō)明。當(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á)到降低 電源功耗的目的。然后再通過(guò)紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,其中前 16位為用戶識(shí)別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為 8位的操作碼和 8位的操作反碼用于核對(duì)數(shù)據(jù)是否接收正確。解碼的關(guān)鍵是如何識(shí)別 “0”和“1”,從位的定義我們可以發(fā)現(xiàn) “0”、“1”均以 0.56ms的低電平開(kāi)始,不同的 是高電平的寬度不同, “0”為0.56ms,“1為”1.68ms,所以必須根據(jù)高電平的寬度區(qū)別 “0”和 “1?!比绻麖?0.56ms 低電平過(guò)后,開(kāi)始延時(shí), 0.56ms以后,若讀到的電平為低,說(shuō)明該位為“0”,反之則為 “1”,為了可

4、靠起見(jiàn),延時(shí)必須比 0.56ms長(zhǎng)些,但又不能超過(guò) 1.12ms,否則如果該位為 “0”,讀到的已是下一位的高電平,因此 取1.12ms+0.56ms) /2=0.84ms最為可靠,一般取 0.84ms左右即可。根據(jù)紅外編碼的格式,程序應(yīng)該等待9ms的起始碼和 4.5ms的結(jié)果碼完成后才能讀碼。/ 10接收器及解碼VS0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需 要任何外接元件,就能完成從紅外線接收到輸出與TTL 電平信號(hào)兼容的所有工作,沒(méi)有紅外遙控信號(hào)時(shí)為高電平,收到紅外信號(hào)時(shí)為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅

5、外線數(shù)據(jù)傳輸。下面是一個(gè) msp430f149 單片機(jī)對(duì)紅外線遙控器的解碼程序,它可以把遙控器的32位碼42 位碼也可以)的紅外遙控器每一個(gè)按鍵的鍵值讀出來(lái),并且通過(guò) 12864 點(diǎn)陣液晶顯示編碼和鍵值,在解碼成功的 同時(shí)發(fā)出“嘀”的提示音。并且能把編碼保存起來(lái),如果此時(shí)按下鍵盤上第三個(gè)鍵,就把該信號(hào)再向外發(fā) 射出去,不過(guò)一次只能存一組數(shù)據(jù),如果有興趣可以把編碼存入 flash ,這樣不僅可以保存更多的編碼, 而且掉電數(shù)據(jù)也不會(huì)丟。這是我測(cè)試時(shí)用的遙控器這是測(cè)試的結(jié)果,前三行是紅外信號(hào)的編碼,最后一行是 8 位數(shù)據(jù)碼的十六進(jìn)制格式,因?yàn)槲业倪b 控器采用的是 32 位二進(jìn)制碼,所以后十位是無(wú)效位

6、。如果是對(duì)42 位二進(jìn)制碼的遙控器解碼時(shí),前 26 位是系統(tǒng)碼,后 16 位是 8 位數(shù)據(jù)碼和 8 位數(shù)據(jù)反碼。不過(guò)此時(shí)第四行的十六進(jìn)制是無(wú)效哦。/ 10軟件設(shè)計(jì)思想及流程 :1)程序使用到的 msp430f149單片機(jī)的 IO口主要有 P4與P6用于 12864液晶驅(qū)動(dòng)) P1.3與P5.2分別用來(lái)實(shí) 現(xiàn)紅外數(shù)據(jù)的接收和紅外數(shù)據(jù)的發(fā)送)。2)程序的關(guān)鍵部分是紅外解碼,而根據(jù)紅外線發(fā)出的紅外信號(hào)編碼的規(guī)則可以看出,二進(jìn)制碼“ 0和”“ 1最主要的區(qū)別在于脈沖時(shí)間的長(zhǎng)短,所以根據(jù)判斷脈沖時(shí)間便可以判斷是“1還”是 “0”。其程序如下:程序已調(diào)試通過(guò)直接移值就可以用) #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 。 /用來(lái)設(shè)定載波信號(hào)的持續(xù)時(shí)間uchar table_IR42 。 /用來(lái)存放接收的紅外信號(hào)編碼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ù)字對(duì)應(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 。 /紅外接收檢測(cè)函數(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 。/開(kāi)啟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è)置定時(shí)器 A 時(shí)鐘源為 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( 。 /開(kāi)啟總中斷/_DINT( 。 /關(guān)閉總中斷for( 。 infrared( 。 / 紅外接收檢測(cè)P1DIR=0 x0f 。 /紅外接收和矩陣鍵盤端口復(fù)用,所以在調(diào)用鍵盤掃描程序前重定義端口 P1OUT=0 x00 。keydata=key( 。 /讀鍵值if(keydata/ 如果用按鍵按下,根據(jù)返回值調(diào)用發(fā)射相對(duì)的

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( 。 /開(kāi)啟總中斷 while(width0 。 /輸出 9ms的載波信號(hào) _DINT( 。 /關(guān)閉總中斷

15、FS_H。 delay_us(4500 。 /輸出 4.5ms的高電平 for(i=0 。 iwidth=21 。 /21/ 10_EINT( 。 /開(kāi)啟總中斷while(width0 。/輸出 0.56ms的載波信號(hào)_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( 。 /開(kāi)啟總中斷while(width0 。/輸出 0.

16、56ms的載波信號(hào)作為結(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 。 /在檢測(cè)前把端口為輸入for(k=0 。k delay_us(400 。 if(HW_Q return 。 / 檢測(cè)是否有 9ms的低電平,否則返回重新檢測(cè) while(!HW_Q

17、。/等待 9ms低電平過(guò)去 for(k=0 。k delay_us(500 。if(!HW_Qreturn 。 /如果在 2.5ms內(nèi)有低電平,則認(rèn)為是干擾,并且退出重新檢測(cè) while(HW_Q 。 /等待 4.5ms高電平過(guò)去 for(k=0 。k while(!HW_Q 。 / 等待 0.565ms的低電平過(guò)去 while(HW_Q / 計(jì)算高電平的寬度,判斷接收的為“ 0還”是 “ 1 ” delay_us(100 。 j+ 。 if(j22break 。 / 如果高電平時(shí)間過(guò)長(zhǎng),跳出循環(huán),繼續(xù)執(zhí)行下面的程序/ 10if(j=7/ 如果高電平的寬度大于 0.7ms,則接收的為 1, 同

18、時(shí)存入數(shù)組table_IRk=1 。else table_IRk=0 。/如果高電平寬度小于 0.7ms,則接收的為 “ 0,”同時(shí)存入數(shù)組 j=0 。for(k=16 。k/把第 3個(gè)字節(jié)低四位存入 value_L內(nèi),便于在液晶上顯示value_Lvalue_L|=0 x01 。for(k=20 。k/把第 3個(gè)字節(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 。/* 矩陣鍵盤檢測(cè)函數(shù),根據(jù)返回值可以判斷按下的是哪個(gè)鍵 */ 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/ 列檢測(cè)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論