基础功能:通过按键实现点阵上点的移动,按键时有按键音
附加:在矩阵键盘中增加功能按键,并实现组合按键的操作:功能按键+组合按键1实现点阵的开和关;功能按键+组合按键2实现按键音的开和关
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
delay(1000);//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
flag = 1;
// s_c++;
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
// if(KeyValue == 0) //判断是否出现功能按键
// {
// KeyValue = 255;
// GPIO_KEY = 0x0f;
// while(GPIO_KEY != 0x0f)
// {
// GPIO_KEY = 0x0f; //判断组合按键
// switch(GPIO_KEY & 0x07)
// {
// case(0x03): KeyValue = 16;break; //组合按键1
// case(0x05): KeyValue = 17;break;
// }
// if(KeyValue > 16 && KeyValue < 18) break;
// }
// }
}
}
}
将S1设为功能键,两个组合按键分别设为S2、S3
后面加上了判定位ledflag和singflag
void Int0() interrupt 0 //外部中断 0 的中断函数
{
delay(1000); //延时消抖
if(flag == 1)
{
delay(1000);
flag = 0;
if(KeyValue == 16)
{
ledflag = ~ledflag;
}
}
}
void Int1() interrupt 2 //外部中断 1 的中断函数
{
delay(1000); //延时消抖
if(flag == 1)//读取按键是否按下
{
delay(1000);//延时10ms进行消抖
flag = 0;
if(KeyValue == 17)
{
singflag = ~singflag;
}
}
}
不加组合按键的其他程序都是对的,加了组合按键后,按下S1,点阵的点就不移动了,且没有按键音
有没有能人看看到底哪错了