历史上的今天
今天是:2024年10月15日(星期二)
2020年10月15日 | MSP430单片机按键中断程序
2020-10-15 来源:elecfans
#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
史海拾趣
|
“热爱乃是工作最大的动力”无论从事何种行业,‘热爱\'是不可缺少的前提,而且一旦用心投入,便 会看到‘冰山效应\',试想要使冰山融化是需要多大的热情,那是一种与企业‘同呼吸,共命运\'的感觉。 刚走出菁菁校园,步入社会,站在择业的 ...… 查看全部问答> |
|
[ERP]深圳嘉立盛公司专业订制ERP,OA , CRM,进销存, [ERP]深圳嘉立盛公司专业订制ERP,OA , CRM,进销存,1000元起订 深圳嘉立盛是一家专业从事软件开发订制,对ERP,OA,CRM,仓库进销存,客户管理系统,软件的订制有一流的经验,先后为多家中,小型公司提供过软件订制服务,先后同支付宝,财富通,快钱进 ...… 查看全部问答> |
|
如何用串口连接ATtiny2313(AVR)和MC68HC908AP(Freescale) 如题。 串口设置:9600 bps , 8bits, 1 stop bit, no parity MC68HC908AP上使用了上拉电阻(阻值不知道) ATtiny2313上没使用任何上拉电阻 我曾试着用线直接TxD-RxD,RxD-TxD连接,但是有严重的信号错误,根本无法识别。 连个单片机我都成功的 ...… 查看全部问答> |
|
[localimg=1081,556]1[/localimg] 以下是代码 ; 引脚定义;********************************************************************ROW0 EQU   ...… 查看全部问答> |




