#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
上一篇:基于MSP430F149的控制模块VAC400的真空控制系统的设计
下一篇:msp430如何设置时钟及ad模块学习
设计资源 培训 开发板 精华推荐
- 使用增强型隔离放大器且基于分流器的高电流测量 (200A) 参考设计
- DC1466B-C,演示板 LTC2636 八路 12 位 SPI VOUT DAC,具有 10ppm/摄氏度内部基准
- 使用 ON Semiconductor 的 LA4525 的参考设计
- AD9208-3000EBZ,AD9208-3000 评估板,14 位,3 GSPS,双模数转换器
- LTC2600IGN 八通道、16 位数模转换器的典型应用
- 【物联网】传智鸿蒙开发板-402304A
- STC8H8K64S4 To DIP40转接板
- LT8641IUDC 2MHz、5V、3.5A 降压转换器的典型应用电路
- LT1934EDCB 环路供电 3.3V 电源的典型应用电路,具有额外的隔离输出
- STA333ML13TR音响终端2通道无微高效数字音频系统典型应用