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

📄 键盘键值显示在液晶上.c

📁 MSP430开发板413演示程序 MSP430开发板413演示程序
💻 C
字号:

//******************************************/
#include <msp430x44x.h>
char speed = 1;
char key_val;
unsigned char key_Map[12] ={    //设置键盘逻辑键值与程序计算键值的映射
                           1,2,3,10,4,5,
                           6,0,7,8,9,11
                           };


/******************************************************
   数据定义
*****************************************************/
const unsigned char NUM_LCD[16]={
                0x7B, 0x12, 0x4f, 0x1f, 0x36,  //'0'~ '4'
		0x3d, 0x7d, 0x13, 0x7f, 0x3f,  //'5' ~ '9'
		0x77, 0x7c, 0x69, 0x5e, 0x6f,  // '6'~ 'E'
		0x65};                         // F"

void delay(unsigned long v)
    {
        while(v!=0)v--;
    }

char Keyj(void)
    {	
    P1DIR = 0x0E;  // set p1.1~p1.3 设置为输出模式
    P1OUT = 0x00;  // p1.1~p1.3 输出值清零
    return(P1IN &  0xf0 ) ;
    }

/*********************************************
* Check_Key(),检查按键,确认键值
*********************************************/
void check_Key(void){
    unsigned char row ,col,tmp1,tmp2;
    // tmp1用来设置P1OUT的值,使P1.1~P1.3中有一个为0
    tmp1 = 0x08;
    for(row=0;row<3;row++){
        P1OUT |= 0x0E;                          // p1.1~P1.3=1
        P1OUT -= tmp1;                          // P1.1~p1.3中有一个为0
        tmp1 = tmp1/2;                          // tmp1 右移一位
        if ((P1IN & 0xf0) < 0xf0){              // 是否P1IN的P1.4~P1.7中有一位为0
           tmp2 = 0x80;                         // tmp2用于检测出那一位为0
           for(col =0;col<0x04;col++){          // 列检测
              if((P1IN & tmp2)==0x00){          // 是否是该列
                key_val =key_Map[ row*4 +col] ; // 获取键值
                return;                         // 退出循环
              }
              tmp2 /= 2;                        // tmp2右移
           }
        }
    }
}



/******************************************/
void main(void)
{
   char i;
   WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
    FLL_CTL0 |= XCAP14PF;                 // Configure load caps
    LCDCTL = 0XFD;
    BTCTL = BTFRFQ1;                      // STK LCD freq
    P5SEL = 0xFC;                         // Common and Rxx all selected
    for(i=0;i<20;i++)
      LCDMEM[i]= 0;

    while(1)
     {                             //循环
     if(Keyj()!=0xf0)
           delay(300);
     if(Keyj()!=0xf0)
           {
            check_Key();
            LCDMEM[3]= NUM_LCD[key_val ];
            LCDMEM[1]= NUM_LCD[key_val ];
            LCDMEM[2]= NUM_LCD[key_val ];
           }
     }

}

⌨️ 快捷键说明

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