📄 keyh.txt
字号:
unsigned char nP10,nP11,nP12,nP13;
unsigned char key_Flag;
unsigned char key_val;
void init_Port(void)
{
//将P1所有的管脚设置输入方式
P1DIR=0x00;
P1SEL=0x00;
P1DIR |=BIT0;
P1DIR |=BIT1;
P1DIR |=BIT2;
P1DIR |=BIT3;
//输出低电平
P1OUT=0X00;
//将中断寄存器清零
P1IE=0;
P1IES=0;
P1IFG=0x00;
//中断使能 下降沿
P1IE|=BIT4;
P1IES|=BIT4;
P1IE|=BIT5;
P1IES|=BIT5;
P1IE|=BIT6;
P1IES|=BIT6;
P1IE|=BIT7;
P1IES|=BIT7;
_EINT();//打开中断
}
void Delay(void)
{
int i;
for (i=1200;i>0;i--);
}
int KeyProcess(void)
{
//key_val=0;
// key_Flag=0;
//P1.4输出低
P1OUT&=~(BIT0);
P1OUT|=BIT1;
P1OUT|=BIT2;
P1OUT|=BIT3;
nP10=P1IN & BIT4;
if (nP10==0) key_val=0;
nP11=(P1IN &BIT5)>>1;
if (nP11==0)key_val=1;
nP12=(P1IN &BIT6)>>2;
if (nP12==0) key_val=2;
nP13=(P1IN &BIT7)>>3;
if (nP13==0) key_val=3;
//P1.5输出低电平
P1OUT|=(BIT0);
P1OUT&=~BIT1;
P1OUT|=BIT2;
P1OUT|=BIT3;
nP10=P1IN & BIT4;
if (nP10==0) key_val=4;
nP11=(P1IN &BIT5)>>1;
if (nP11==0) key_val=5;
nP12=(P1IN &BIT6)>>2;
if (nP12==0) key_val=6;
nP13=(P1IN &BIT7)>>3;
if (nP13==0) key_val=7;
//P1.6输出低电平
P1OUT&=~(BIT2);
P1OUT|=BIT0;
P1OUT|=BIT1;
P1OUT|=BIT3;
nP10=P1IN & BIT4;
if (nP10==0) key_val=8;
nP11=(P1IN &BIT5)>>1;
if (nP11==0) key_val=9;
nP12=(P1IN &BIT6)>>2;
if (nP12==0) key_val=10;
nP13=(P1IN &BIT7)>>3;
if (nP13==0) key_val=11;
//P1.7输出低电平
P1OUT&=~(BIT3);
P1OUT|=BIT0;
P1OUT|=BIT1;
P1OUT|=BIT2;
nP10=P1IN & BIT4;
if (nP10==0) key_val=12;
nP11=(P1IN &BIT5)>>1;
if (nP11==0) key_val=13;
nP12=(P1IN &BIT6)>>2;
if (nP12==0) key_val=14;
nP13=(P1IN &BIT7)>>3;
if (nP13==0) key_val=15;
P1OUT =0X00;//恢复以前值
//读取个管脚状态
nP10=P1IN& BIT4;
nP11=(P1IN& BIT5)>>1;
nP12=(P1IN& BIT6)>>2;
nP13=(P1IN& BIT7)>>3;
while (nP10==1 && nP11==1 && nP12==1 && nP13==1&&key_Flag == 0)
{
//等待松开按键
key_Flag =1;
}
return key_val;
}
/*int keyScan(void)
{
for(;;)
{
//读取各管角状态
nP10=P1IN&BIT0;
nP11=(P1IN&BIT1)>>1;
nP12=(P1IN&BIT2)>>2;
nP13=(P1IN&BIT3)>>3;
//是否有键按下
if(nP10==0||nP11==0||nP12==0||nP13==0)
{
//有键按下,进行键盘处理
key_val=KeyProcess();
}
else return -1;//没输入
return key_val;
}
}*/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR()
{
//P1IFG=0x00;
//Delay();
// KeyProcess();
if(P1IFG&BIT4)
{
P1IFG&=~(BIT4);
Delay();
KeyProcess();
}
if(P1IFG&BIT5)
{
P1IFG&=~(BIT5);
Delay();
KeyProcess();
}
if(P1IFG&BIT6)
{
P1IFG&=~(BIT6);
Delay();
//if(key_Flag == 1)
// {
KeyProcess();
// }
}
if(P1IFG&BIT7)
{
P1IFG&=~(BIT7);
Delay();
KeyProcess();
//if(key_Flag == 1)
//{
// key_val=KeyProcess();
//}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -