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

📄 键盘扫描.cpp

📁 用于MSP430的键盘模块的扫描程序
💻 CPP
字号:
#include <msp430x44x.h>

int digit[10]={0XD7,0X14,0XCD,0X5D,0X1E,0X5B,0XdB,0X15,0XDF,0X5F};
int key_val;
int key_map[12]={1,2,3,10,4,5,6,0,7,8,9,11};

void inti_lcd()
{
P4DIR |= 0X03;
P3DIR = 0XFF;
P3OUT = 0X00;
P4OUT = 0X03;
P4OUT = 0X00;
}

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;
for(col =0;col<4;col++)
{         			// 列检测
if((P1IN & tmp2)==0x00)
{          			// 是否是该列
key_val =key_map[ row*4 +col] ; // 获取键值
return;                         // 退出循环
}
tmp2 /= 2;                      // tmp2右移 
}
}
}         
}

void display()
{
if (key_val<10) P3OUT = digit[key_val];
else if(key_val==10) {P3OUT = 0X00;}
else if(key_val==11) {P3OUT = 0XFF;}
P4OUT = 0X02;
P4OUT = 0X00;
}

void delay()
{
int i;
for(i=0xff;i>0;i--);
}

void delay2()
{
unsigned long i;
for(i=0x0fff;i>0;i--);
}

void main()
{
WDTCTL = WDT_ADLY_250;
IE1 = WDTIE;
P1DIR = 0X0E;		//设置输入输出方向
P1OUT = 0X0E;		//设置P1.1-P1.3输出为1
inti_lcd();


_EINT();
while(1)
{
_BIS_SR(CPUOFF);
_NOP();
}
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer()
{
if ((P1IN & 0x0f)==0xff) return;
else
{
delay();
check_key();
display();
}
}

⌨️ 快捷键说明

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