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

📄 keypad.c

📁 I2c details for MSP430
💻 C
字号:

#include <msp430x11x1.h>
/*
;-------------------------------------------------------------------------------
; Name: i2c_ir_keypad.c
; Func: Key pad scanning
; Ver.: 1.1
; Date: June-2005
; Auth: Thomas Kot
;       MSP430
;       Texas Instruments Inc.
; Rem.: Build with IAR EW V4.3A
;-------------------------------------------------------------------------------
*/

extern void INIT_IIC(void);
extern void INIT_COM(void);
extern char RAM[16];


const int key_code[16] = {  0xFC,0x03,      // key code represents the key pressed
                            0xF0,0x0F,
                            0xF3,0x0C,
                            0xF2,0x0D,
                            0xF1,0x0E,
                            0xE9,0x16,
                            0xED,0x12,
                            0xE1,0x1E};


void delay(unsigned int delay_time)         // delay_timer = number of 1ms
{
  unsigned int delay_counter;

  delay_time *= 1600;
  for (delay_counter = 0; delay_counter < delay_time; delay_counter++)
  _NOP();
}


void check_key_press(void)
{
  char i,key_check;
  if ((P2IN & 0X02) != 0X02)                // single test key
  {
    if (( TACCTL1 & CCIE ) == CCIE)         // check if I2C and IR routine not activated
      if (( P2IE & 0X01) == 0X01)
      {
        _DINT();                            // disable interrupt
        delay(30);                          // delay 30ms for key debounce

        for (i = 0; i < 1; i++)             // check which key is pressed in Port2
        {
          key_check = 0x01;
          key_check <<= i+1;
          if ((P2IN & key_check) != key_check)
          {
            RAM[1] = key_code[2*i];
            RAM[2] = key_code[2*i + 1];
            P1OUT |= 0x02;
          }
        }
        _EINT();
      }
    for (i = 0; i<30; i++)
    {
      delay(33);                            // delay 1sec
      if ((P2IN & 0X02) == 0X02)            // single test key
        break;
    }

    while ((P2IN & 0X02) != 0X02)           // ONE KEY TEST
    {
      delay(33);                            // delay 0.1sed
      delay(33);
      delay(33);
      P1OUT |= 0x02;
    }
  }
}


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog

  DCOCTL  = DCO2 + DCO1;
  BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0;
  BCSCTL2 = DIVS_3 + DCOR;                  // DCO with ext resistor, 8MHz
                                            // SMCLK = 8MHz / 8

  INIT_IIC();                               // Init I2C setting in i2c_isr.s43
  INIT_COM();                               // Init the setting in iic_ir_common.s43



  P1DIR &= ~0xF8;                           // P1.7,6,5,4,3 as input
  P2DIR &= ~0x0E;                           // P2.1,2,3 as input

  _EINT();

  while(1)
  {
    while(( P1OUT & 0X02) == 0X02) ;        // wait until data fetched
    check_key_press();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -