KeyPressed = 99;
for (i = 0; i < 6; i++)
{
//查表
if (KeyTab[i] == KeyHex)
{
KeyPressed = i;
}
}
if (KeyPressed == 99)
{
//没有找到值
//设置标志
Error_Flags |= noMatch;
}
}
void SetupForRelease(void)
{
//设置方向
P1DIR |= 0x03;
P1OUT |= 0x03;
//键被按下
Trans_Flags |= hELDDown;
}
void DetermineRelease(void)
{
//设置输入下拉
P1OUT &= ~0x03;
P1DIR &= ~0x03;
if (P1IN & 0x03)
{
SetupForRelease();
}
else
{
Trans_Flags &= ~heldDown;
}
}
void Transmit(void)
{
unsigned int i;
//得到命令码
Command = FuncTab[KeyPressed];
//增加两个位的起始位
Command = Command + 0x3000;
if (Trans_Flags & toggle)
{
// 切换位
Command = Command + 0x0800;
}
//左移
Command = Command << 2;
//CCR1 PWM参数
TACCR1 = 7;
//使能CCR0中断
TACCTL0 = CCIE;
for (i=0; i < 14; i++)
{
//判断是1还是0
if (Command & 0x8000)
{
//先发送780us的低
OutputLow(780);
//然后高,记数32个中断
OutputHigh(32);
}
else
{
//先高,记数35个中断
OutputHigh(35);
OutputLow(765);
}
//下一个位
Command = Command << 1;
}
//停止并清除TA
TACTL = TACLR;
}
unsigned int TestRetransmit(void)
{
//P1是否有输入
if (P1IFG == 0)
{
//没有输入的情况下
return RETRANSMIT;
}
else
{
//有输入的情况下
//是否有按键按下
DetermineRelease();
if (Trans_Flags & heldDown)
{
//有的情况下
return RETRANSMIT;
}
else
{
// 没有的情况下,返回主程序
//清除CCTL0寄存器
TACCTL0 = 0;
//清除CCTL1寄存器
TACCTL1 = 0;
//清除切换位
Trans_Flags &= ~toggle;
return ENDTRANSMIT;
}
}
}
void DelayToNextTransmit(void)
{
//SMCLK/8 清除TA
TACTL = TASSEL1+TACLR+ID0+ID1;
//89ms的中断
TACCR0 = 11125 - 1;
//使能CCR0中断
TACCTL0 = CCIE;
//TA开始UP模式
TACTL |= MC0;
//延时
LPM0;
上一页 [1] [2] [3] 下一页
本文关键字:单片机 程序 MSP430单片机,单片机-工控设备 - MSP430单片机