#include "IRRemote.h"
void main(void)
{
//初始化
Initialize();
//死循环
while(1)
{
unsigned int transmit;
//初始化变量
transmit = ENDTRANSMIT;
//等待按键按下
SetForPress();
//进入LPM4模式
LPM4;
Debounce();
//扫描键盘
KeySCAN();
//键盘处理
KeyLookup();
if (Error_Flags == 0)
{
//有键按下的情况
SetupForRelease();
do
{
//传输数据(RC5码)
Transmit();
transmit = TestRetransmit();
//延时
DelayToNextTransmit();
} while (transmit == RETRANSMIT);
}
}
}
void Initialize(void)
{
//停止看门狗
WDTCTL = WDTPW+WDTHOLD;
//P2口为输出
P2DIR = 0xFF;
//P2.3为TA1功能管脚
P2SEL = 0x08;
//清除P2口的输出
P2OUT = 0;
//设置DCO频率为1MHz
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
//使能中断
_EINT();
}
void SetForPress(void)
{
//P1.0和P1.1为输入
P1DIR = 0xFC;
//清除P1口的输出,下拉
P1OUT = 0;
//使能P1.0和P1.1的电阻
P1REN |= 0x03;
//使能键盘
P2OUT |= 0x07;
//低到高中断方式
P1IES &= ~0x03;
//清除中断标志
P1IFG = 0;
//使能中断
P1IE |= 0x03;
//清除错误标志
Error_Flags = 0;
//清除传输标志
Trans_Flags = 0;
}
void Debounce(void)
{
//SMCLK/8,清除TA
TACTL = TASSEL1+TACLR+ID0+ID1;
//使能CCR0中断
TACCTL0 = CCIE;
//设置延时的值
TACCR0 = 5000 - 1;
//开始UP模式
TACTL |= MC0;
//进入LPM0模式
LPM0;
//停止并清除TA
TACTL = TACLR;
//清除CCTL0寄存器
TACCTL0 = 0;
}
void KeyScan(void)
{
unsigned int i;
//初始化行
RowMask = 0x01;
KeyHex = 0;
//清除行的值
P1OUT &= ~0x03;
for (i=0; i
全部0条评论
快来发表一下你的评论吧 !