📄 449的键盘程序(带连击键处理).txt
字号:
}
else if((ADC12IFG&BIT2)==BIT2)
{
//通道2
//以下填充用户代码
}
else if((ADC12IFG&BIT3)==BIT3)
{
//通道3
//以下填充用户代码
}
else if((ADC12IFG&BIT4)==BIT4)
{
//通道4
//以下填充用户代码
}
else if((ADC12IFG&BIT5)==BIT5)
{
//通道5
//以下填充用户代码
}
else if((ADC12IFG&BIT6)==BIT6)
{
//通道6
//以下填充用户代码
}
else if((ADC12IFG&BIT7)==BIT7)
{
//通道7
//以下填充用户代码
}
else if((ADC12IFG&BIT8)==BIT8)
{
//VeREF+
//以下填充用户代码
}
else if((ADC12IFG&BIT9)==BIT9)
{
//VREF-/VeREF-
//以下填充用户代码
}
else if((ADC12IFG&BITA)==BITA)
{
//温度
//以下填充用户代码
}
else if((ADC12IFG&BITB)==BITB)
{
//(AVcc-AVss)/2
//以下填充用户代码
}
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
USART0发送中断函数
******************************************************************************/
#pragma vector=USART0TX_VECTOR
__interrupt void Usart0Tx()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
USART0接收中断函数
******************************************************************************/
#pragma vector=USART0RX_VECTOR
__interrupt void Usart0Rx()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
看门狗定时器中断函数
******************************************************************************/
#pragma vector=WDT_VECTOR
__interrupt void WatchDog()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
比较器A中断函数
******************************************************************************/
#pragma vector=COMPARATORA_VECTOR
__interrupt void ComparatorA()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
定时器B中断函数
多中断源:CC1~6 TB
******************************************************************************/
#pragma vector=TIMERB1_VECTOR
__interrupt void TimerB1()
{
//以下为参考处理程序,不使用的中断源应当删除
switch ((TBIV))
{
case 2:
//捕获/比较1中断
//以下填充用户代码
break;
case 4:
//捕获/比较2中断
//以下填充用户代码
break;
case 6:
//捕获/比较3中断
//以下填充用户代码
break;
case 8:
//捕获/比较4中断
//以下填充用户代码
break;
case 10:
//捕获/比较5中断
//以下填充用户代码
break;
case 12:
//捕获/比较6中断
//以下填充用户代码
break;
case 14:
//TBIFG定时器溢出中断
//以下填充用户代码
break;
}
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
定时器B中断函数
中断源:CC0
******************************************************************************/
#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB0()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
不可屏蔽中断函数
******************************************************************************/
#pragma vector=NMI_VECTOR
__interrupt void Nmi()
{//可能不适合f449芯片
//以下为参考处理程序,不使用的中断源应当删除
if((IFG1&OFIFG)==OFIFG)
{
//振荡器失效
IFG1 &= ~OFIFG;
//以下填充用户代码
}
else if((IFG1&NMIIFG)==NMIIFG)
{
//RST/NMI不可屏蔽中断
IFG1 &= ~NMIIFG;
//以下填充用户代码
}
else //if((FCTL3&ACCVIFG)==ACCVIFG)
{
//存储器非法访问
FCTL3 &= ~ACCVIFG;
//以下填充用户代码
}
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
/*****************************************************************************
基本定时器中断函数
******************************************************************************/
#pragma vector=BASICTIMER_VECTOR
__interrupt void BasTimer()
{
//以下填充用户代码
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
595。h
void STCLK_Hi(void)
{
//P4.1管脚输出高电平 锁存信号
P4OUT |= BIT1;
return;
}
void STCLK_Lo(void)
{
//P4.1管脚输出低电平 锁存信号
P4OUT &= ~(BIT1);
return;
}
void DataOut(unsigned char nValue)
{
int i;
for(i = 0;i < 8;i++)
{
P4OUT &= ~(BIT2);//移位信号 时钟低电平
if ((nValue & 0x80) )
{
P4OUT |= BIT0;//输出高电平
}
else
{
P4OUT &= ~(BIT0);//输出低电平
}
P4OUT |= BIT2;//移位信号,时钟高电平,上升沿有效
nValue <<= 1;
}
return;
}//p40数据,p41锁存,p42移位
void byte_0fhc595_out(unsigned char dta)
{
//用户可以根据需要来放置显示程序,如LCD,LED,Digital-LED....
STCLK_Lo();
DataOut(dta);
STCLK_Hi();
}
key。h
//******************************************************************************
#define KEYDELAY 60 /*首键延迟次数*/
#define KEYLOOP 5//0 /*连续键间隔次数,需小于KEYDELAY*/
#define keyio 0xf0 //定义按键IO口,Px0-Px3 IO口.
//IO初始化
void IoInit(void)
{ //按键
P2DIR=0xf0;//p20--p23输入
P2OUT=0X00;
// P2IE=0X0f;//p20--p23中断开
P2IE=0;//关闭P2口中断
P2IES=0x0f;//p20--p23HtoL中断
P2IFG=0;//清除p2中断标志位
//led
P1OUT=0;
P1DIR=BIT1+BIT2+BIT3;
P1OUT=BIT1+BIT2+BIT3;
//hc595IO
P4DIR |= BIT1+BIT2+BIT0;//P4_012设置为输出
}
#define k1 keyset
#define k2 right
#define k3 add
#define k5 sub
#define keyset (P2IN&BIT0)
#define right (P2IN&BIT1)
#define add (P2IN&BIT2)
#define sub (P2IN&BIT3)
//---------------------------------------------------------------------------//
unsigned char key_bak; //上次按键值,初值只要不属于键盘扫描值中的 就可以
unsigned char key_temp;//键值临时存放变量
unsigned char key_old; //按下键的年龄
unsigned char key_data;//存放键值
unsigned char key_ok; //有有效键按下的标志 1为有,处理键值后 置0
void KeyScan(void) //键扫描
{
// unsigned char sccode,recode;
// KEYPIN_L = KEYPIN_L|0x0f; // P1低四位为列线输入 //
// KEYPIN_H = KEYPIN_H&0x0f; // P1高四位为行线发全零扫描码 //
// if ((KEYPIN_L&0x0f) != 0x0f)
if( (keyset==0)||(right==0)||(add==0)||sub==0)
{//本次扫描有键按下
key_temp = 0;
if(keyset==0)
key_temp=0x18;
else if(right==0)
key_temp=0x14;
else if(add==0)
key_temp=0x12;
else if(sub==0)
key_temp=0x11;
//以上完成本次扫描键值
if (key_temp == key_bak)
{//和上次扫到的相同
key_old++;//年龄老化+1 如果不释放,就1次有效,把此句//掉就可以
if (key_old==KEYDELAY) //
{//老化到头(死了),当做有按了一次(重活一生)
key_ok=1;//按键有效标志(新生命开始)
key_data=key_temp;//fnKeyCode(key_temp); //键解码
key_old=KEYDELAY-KEYLOOP; //以后重复的年龄老化初值不在是0,加快以后的重复速度
}
}
else
{//和上次扫到的不同
key_data=key_temp;//新键值放到key_data中
key_old=0;//老化年龄=0
key_bak=key_temp;//保存本次扫描码
key_ok=1; //置有 有效按键标志
}
}
else
{//本次扫描无键按下
key_bak=0;//老键值=0;避免松开后再按同一键
key_old=0;//老化年龄=0//key_ok=0;
}
}
lcd。h
const unsigned char digit[10] =
{
0xEB, /* "0" LCD segments a+b+c+d+e+f */
0x60, /* "1" */
0xC7, /* "2" */
0xE5, /* "3" */
0x6C, /* "4" */
0xAD, /* "5" */
0xAF, /* "6" */
0xE0, /* "7" */
0xEF, /* "8" */
0xED /* "9" */
};
//******************************************************************************
//清LCD屏
//bit tmp;
void LcdClr(void)
{ unsigned char i;
for (i=0; i<31; i++)
{
((char*)(0x0091))[I] = 0x00; // CLR LCDMEM
}
}
//******************************************************************************
//LCD初始化
void LcdInit(void)
{ LCDCTL = LCDON + LCD4MUX + LCDSG0_2; // LCD on, 4-Mux, segments S2-S33
BTCTL = BTFRFQ1; // LCD clock freq is ACLK/128
P5SEL = 0xFC; // Select P5.2-7 as Com and Rxx
LcdClr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -