⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 449的键盘程序(带连击键处理).txt

📁 MSP430框架程序。适用于MSP430F449
💻 TXT
📖 第 1 页 / 共 2 页
字号:

     } 
     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 + -