《msp430红外线解码程序.doc》由会员分享,可在线阅读,更多相关《msp430红外线解码程序.doc(4页珍藏版)》请在金锄头文库上搜索。
1、/消耗资源一个外部中断和一个定时器;#include#include#includemath.h#includenokia.h#define uchar unsigned char#define uint unsigned intuchar I_count=0;uchar start=0;long KEY_value=0;uint temp_time=0;uint key_time=0;uchar USRE0=0;uchar USRE1=0;uchar key=0xff;uchar buff=00;uchar temp2=abcdefg;uchar display=00;void key_de
2、coding(uchar key_1);void inter_init();void inter_init() P1OUT|=BIT0; P1OUT&=(BIT1+BIT3); P1OUT|=BIT5; P1DIR&=BIT0; P1DIR|=BIT1+BIT5+BIT3; P1IES|=BIT0; P1IE|=BIT0; _EINT();#pragma vector=PORT1_VECTOR_interrupt void cood_interrup() if(P1IFG&BIT0=BIT0) P1IFG&=BIT0; I_count+;if(start)/第三次中断到第34次中断做装数据工作
3、; temp_time=TAR;/*temp_time=TH1;temp_time1500)/数据位为1;KEY_value|=0x01;KEY_value=1;/USRE1=KEY_value24;USRE0=KEY_value16;if(USRE1USRE0)=0XFF)key=KEY_value8;I_count=0;KEY_value=0; start=0;TACTL&=MC1;/TR1=0; TACTL|=TACLR;/TAR=0;/TH1=0;TL1=0;/每一次检测定时器必须清零;else if(I_count=1) /TACTL&=MC0; /连码也会进入此函数;/但第三次TA
4、CTL|=MC1; else if(I_count=2) temp_time=TAR; /*temp_time=TH1; temp_time12000) start=1; TAR=0;KEY_value=0;/TH1=0;TL1=0;else I_count=0;TACTL&=MC1;TACTL|=TACLR;KEY_value=0;/TH1=0;TL1=0;如果没有第二次中断说明是干扰; /定时时间到。归零;连码处理;必须处理此函数;可做连键判断;#pragma vector=TIMERA1_VECTOR_interrupt void time0() switch(TAIV) case 2:
5、break; case 4:break; case 10:I_count=0;TACTL&=MC1;TAR=0;start=0;break;/归零函数TR1=0;TH1=0;TL1=0; void key_decoding(uchar key_1)/转换为16进制数;if(key_1/16)9) buff0=key_1/16+0x37;/高八位检测;else buff0=key_1/16+0x30;if(key_1%16)9) buff1=key_1%16+0x37;/低八位检测;else buff1=key_1%16+0x30;LCD_Write_str68(0,3,buff);/*swit
6、ch(key_1) case 0x30: LED=!LED;break; case 0x18: LED=!LED;break; default: break; */void main() clk_init(); inter_init(); LCD_init(); LCD_Clear(); TACTL|=TASSEL_2+ID_3+TACLR+TAIE; display0=sqrt(4)+0x30; display1=sqrt(9)+0x30; LCD_Write_str68(0, 3,display); LCD_Write_str68(0, 1,temp2); /LCD_Write_str68(0, 0,temp2); while(1) if(key!=0xff) key_decoding(key); if(key=0x68) P1OUT|=BIT3+BIT1; P1OUT&=BIT5; key=0xff;