第十三届蓝桥杯准备(3)---独立键盘和矩阵键盘(写法和键盘的短按长按)

本文指导了如何在使用中断和while循环的键盘控制中,实现独立键盘的长按和短按检测,以及矩阵键盘的简化判断,特别关注了S7按键的处理方法,并提供定时器的使用建议。适合有一定基础并想理解中断驱动数码管显示的同学。
摘要由CSDN通过智能技术生成

本文适合有一定键盘基础且采用中断方式进行数码管显示,并且采取while()函数进行松手检测的同学阅读。

独立键盘的长按和短按(因为矩阵键盘只有四个键,所以可以写四个while函数进行判断),以下只写出S7按键的长短按(通过定时器),并假定1s为长按,其他键可以以此推之:

void scankey()

{unsigned char yi=0; %%长按键只进行一次判定

if(P30==0)  %%S7

{

flagnum=0;flag=0;yi=0;  %%相应判断条件初始化

while(P30==0)

{if(flag==1&&yi==0){yi=1;   }  %%%%长按

}

if(flag==0){       }  %%%短按

}

if(P31==0) %%S6

{

while(P31==0);

}

if(P32==0)  %%S5

{

while(P32==0);

}

if(P33==0)  %%S4

{

while(P33==0);

}

}

定时器部分:(假设中断为2ms)if(++flagnum==500){flagnum=0;flag=1;}

矩阵键盘的长按和短按(因为矩阵键盘有多个个键,所以考虑用一个while函数进行判断),以下假定1s为长按:

void scankey()

{unsigned char key,hang,lie,keyvalue,yi=0;

P3=0X0F;P42=0;P44=0;key=P3&0X0F;

if(key!=0x0f)

{

Switch(key)
{ case 0x0e: hang=4;break;

case 0x0d: hang=3;break;

case 0x0b: hang=2;break;

case 0x07: hang=1;break;

   }

}

P3=0XF0;P42=1;P44=1;P36=P42;P37=P44;key=P3&0xf0;

If(key!=0xf0)

{

Switch(key)

{

case 0xe0: lie=4;break;

case 0xe0: lie=3;break;

case 0xe0: lie=2;break;

case 0xe0: lie=1;break;

}

Keyvalue=lie*4+hang-1;

P3=0X0F;P42=0;P44=0;key=P3&0X0F; %%松手检测

flagnum=0;flag=0;yi=0;

while(P3!=0X0F)

{if(flag==1&&yi==0){ switch(keyvalue){case  :   break;   }   }  %%长按

}

If(flag==0){ switch(keyvalue){case  :   break;   }  }   %%短按

}

}

  定时器部分和独立键盘一样,要记住把主函数while(1)里的内容放到按键while中。

写的有点乱,希望对大家有帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值