当前位置:文档之家› 一体化红外接收头控制

一体化红外接收头控制

#include<msp430x14x.h>
#defi ne BHSEL P2SEI定义捕获端口
#define BH_IO BIT2
unsigned int Cyc=0,LastCCR0=0, flag=0, key=0;
void InitBhTimerA();
void InitSys();
unsigned int translate(unsigned int number);
unsigned int getkey()〃得至U按键的值{return key;}unsigned int translate(unsigned int number)//将传入函数的数转化成七段数码管显示
{ unsigned int i;
switch(number){case 0: i=0xFC; break;
case 1: i=0x60; break;
case 2: i=0xDA; break;
case 3: i=0xF2; break;
case 4: i=0x66; break;
case 5: i=0xB6; break;
case 6: i=0xBE; break;
case 7: i=0xE0; break;
case 8: i=0xFE; break;
case 9: i=0xF6; break;}return i;}void In itBhTimerA()//初始化{P6DIR=0XFF; P6OUT=0X00;P5DIR=0XFF;P5OUT=0X00;
TACTL = TASSEL_2+ID_3+TACL定时器A,时钟源:
ACLK连续计数模式CCTLO = CCIS_1+CM_2+CA选择上降沿捕获,
CCIB (P2.2)为信号源,BHSEL |= BH_IO;/选择P2.2使用第二功能
TACTL |= MC_2+TACLR 打开计数器
CCTL0 |= CCIE;捕获中断允许
InitSys();}void InitSys(){unsigned int iq0;
//使用XT2振荡器
BCSCTL1 &二~XT2OFF打开XT2振荡器
do {IFG1 &二~OFIFG;清除振荡器失效标志
for (iqO = 0xFF; iqO > 0; iqO--);//延时,等待XT2起振
}while ((IFG1 & OFIFG) != 0);/判断XT2是否起振
BCSCTL2 二SELM_2+SEL选择MCLK SMCLK为XT2
_EINT();〃打开全局中断控制,若不需要打开,可以屏蔽本句}void
main(){WDTCTL=WDTPW+WDTHOLD;
InitBhTimerA();
while
(1){P6OUT=BIT1+BIT2;
P5OUT=translate((getkey()%10));
P6OUT=BIT0+BIT2;
P5OUT=translate((getkey()/10)%10);
P6OUT=BIT0+BIT1;
P5OUT=translate((getkey()/100));}}
#pragmavector二TIMERAO_VECTOR捕捉中断,根据两次中断的时间判断

入的值,最后转化成需要的整数
__interrupt void TimerA0(){Cyc=CCR0-LastCCR0;
LastCCR0=CCR0;
if((Cyc>12000)&&(Cyc<14000)){flag=0;
key=0;}flag++;//13401
if((flag>18)&&(flag<=26)){if((Cyc>1000)&&(Cyc<2000)) key=key*2;
if((Cyc>2000)&&(Cyc<3000)) key=key*2+1;}//flag++;
//Cyb[(flag-2)]=Cyc;}。

相关主题