|
楼主 |
发表于 2013-3-30 00:46:02
|
显示全部楼层
longwu537 发表于 2013-3-29 23:48
那你问题出在哪啊?还有没看明白P1OUT-=0x0f;
P1OUT-=temp1;这两句也没看到消抖 ...
你再看看这这个程序#ifndef HL_KEY
#define HL_KEY
#include "msp430f5525.h"
#define uchar unsigned char
uchar key_vol;
uchar key_map[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
void DelayMs(uchar a) //1ms延时函数
{
int i;
for(i = a;i>0;i--)
__delay_cycles(1000);
}
uchar check_KEY() //检查是否有键按下
{
P1DIR=0Xf0; //定义PI.0~3为输入,P1.4~7为输出模式
// P1OUT=0X00;
uchar row,col,temp1,temp2;
P1OUT-=0x0f;
if(P1OUT||0X00)
{
DelayMs(20);
if(P1OUT||0X00)
{
temp1=0x80;
for(row=0;row<4;row++)
{
// P1OUT-=0x0f;
if(P1OUT&temp1!=0)
{
// P1OUT&=temp1;
// temp1>>=1;
if(P1IN&0X0f<0X0f)
{
temp2=0x08;
for(col=0;col<4;col++)
{
if((P1IN&temp2)==0x00)
{
key_vol=key_map[row*4+col+1];
}
temp2>>=1;
}
}
}
temp1>>=1;
}
// else
// key_vol=key_map[0];
}
}
else
key_vol=key_map[0];
return(key_vol);
}
#endif |
|