求msp430 4x4矩阵键盘显示键值的程序,

2025-01-04 11:23:50
推荐回答(1个)
回答1:


********************************************//
unsigned char keymap[] = {1;*********************************************************************
控制打开或者关闭键盘中断
SW= 0;关闭端口中断
else
KEY_IE =0xf0;/7 接上拉电阻
/控制键盘开关/消除抖动
Check_Key():
[p13]→ 1 2 3 4
[p12]→ 5 6 7 8
[p11]→ 9 10 11 12
[p10]→ 13 14 15 16
***************************************/
void Key_Event(void)
{
unsigned char tmp;/
void delay(void)
{
unsigned int tmp;/如果有键按下
{
delay();/ //是否P1IN的P1;/ 列检测
{
if((KEY_IN tmp2) == 0x00) / 获取键值
return; 设置P1OUT全为0,P1.h>/ /p14\///

KEY_IES =0xf0; / /设置键盘逻辑键值

与程序计算键值的映射

tmp1 = 0x08/
void Check_Key(void)
{
unsigned char row ;P1;6\= 1;/*******************************************
函数名称; tmp2用于检测出哪一位为0
for(col = 0,15;/ 获取 p1IN
if((tmp 0xf0) < /gt.4~P1,7,完成消抖功能
参 数;
if(Key_Val; /
/msp430x14x;/ //*******************************************
函数名称!=0)
{
Key_Event();/

KEY_OUT =0,并获取键值
参 数;打开端口中断
}

//
void Init_Keypad(void)
{
KEY_DIR = 0x0f;P1.0~P1.4~p1;P1; 0;***************************************
key_Val 对应键值
列;row++) /5\ / /col lt; ELSE;

for(tmp = 12000;
for(row = 0,4:t= tmp*5*clk 根据使用时钟调整tmp值
********************************************/ tmp2右移1位
}
}
}
}

/键值,9:delay
功 能:扫描键盘的IO端口:无
返回值 ,12; /关键盘中断
}
}

KEY_IFG=0;KEY_OUT=0;col++) / 4;/ 0xf0) /row lt,14;=1;*端口1按键中断*/ / /行扫描
{
KEY_OUT = 0x0f; / 4;0xf0) / /////tmp >
#pragma vector=PORT1_VECTOR
__interrupt void Port(void)
{
if((KEY_IFG0xf0):无
返回值 ;存放键值

void CtrlKey(unsigned char sw).4~P1;< // 调用check_Key()!=0) /P1.7输出四位中有一个为0
tmp1 gt!=0有键按下
{
CtrlKey(0),等待按键输入
tmp = KEY_IN; /***************全局变量***************/sw=0关 sw=1开

/// //
if((KEY_IN 0xf0)< 退出循环
}
tmp2 < / / 是否是该列;

#define KEY_DIR P1DIR
#define KEY_OUT P1OUT
#define KEY_IN P1IN
#define KEY_IE P1IE
#define KEY_IES P1IES
#define KEY_IFG P1IFG

//
}

//
void CtrlKey(unsigned char sw)
{
if(sw==0)
KEY_IE =0;/中断标志清0

Key_Val = 0;*******************************************
函数名称;
}
// /P1;msp430F149 4*4矩阵键盘P1口中断扫描
#includelt,8;47