按键精灵如何检测键盘某个按键被按?以及相对应的 *** 作是什么?

按键精灵如何检测键盘某个按键被按?以及相对应的 *** 作是什么?,第1张

Rem 开始\x0d\x0aa = WaitKey()\x0d\x0aIf a = 65 Then \x0d\x0aCall a()\x0d\x0aEnd If\x0d\x0aIf a = 66 Then \x0d\x0aCall b()\x0d\x0aEnd If\x0d\x0aIf a = 67 Then \x0d\x0aCall c()\x0d\x0aEnd If\x0d\x0aGoto 开始\x0d\x0aSub a\x0d\x0a//子程序a的内容\x0d\x0a\x0d\x0aEnd Sub\x0d\x0aSub b\x0d\x0a//子程序b的内容\x0d\x0a\x0d\x0aEnd Sub\x0d\x0aSub c\x0d\x0a//子程序c的内容\x0d\x0a\x0d\x0aEnd Sub

本人只讲思路:(1)首先你要明确你的按键是上拉接法还是下拉接法;(2)要明确按键是输入设备,所以按键接在PA1上,你要根据按键硬件电路的上拉或下拉接法来确定PA1这个GPIO口的输入方式,按键硬件上是上拉接入,PA1就配置上拉输入,同理,下拉对应下拉;(3)然后写程序,首先写GPIO初始化程序:包括使能时钟、输入模式设置、速度设置、上下拉设置;(4)在写按键检测程序之前要明确检测上升沿还是检测下降沿:如果按键在硬件上是上拉接法,则按下按键会产生负脉冲按键信号,按键检测程序则检测下降沿即可。如果是下拉接法,则当按键按下则产生正脉冲按键信号,按键检测程序则检测上升沿即可。(5)根据(4)中所述,写按键检测上升沿或者下降沿的按键检测程序,并且在按键检测程序中应该采用延时程序实现10至20ms的延时处理按键的抖动,目的是为了消除按键产生的机械抖动,专业说法叫做按键的消抖。(6)在按键检测程序内部,当按键检测成功,则执行自己设定的变量自加1的这一行代码。以上六步就可以实现君所需功能。

此程序实现独立按键的检测功能,每次按下按键 key5 时,数码管最后一位显示的数 值加 1,按键同时响蜂鸣器 #include<reg52.h>sbit key5 = P1^4//独立按键 sbit P3_6 = P3^6//蜂鸣器控制端口 unsigned char code BitSet[8] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }//用于设置(低电平位选)数码管的位选信号,从低到高对应 8 个数码管 unsigned char code NumberCode[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, }//用于设置(共阴极)数码管的段选信号,从 0~f 共 16 个数值 void delay_ms(unsigned int n) { //软件延时函数,延时 n 毫秒 unsigned int i, jfor(i=ni>0i--) for(j=110j>0j--)} void beep(int n) { int i = nwhile(i>0) { P3_6 = 1delay_ms(1)P3_6 = 0delay_ms(1)i--} } void main() //喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //0.5 毫秒高电平 //0.5 毫秒低电平 { int num=0while(1) { P2=BitSet[7]//选择最低位的数码管 if(key5==0) //判断按键 key5 是否按下 { delay_ms(10)//延时重新判断按键是否按下,延时消除抖动 if(key5==0) { num++//每按下一次显示的数值加 1 beep(200)//喇叭响 200 毫秒 if(num==16) num=0while(!key5)//直到按键释放,按下时 key5==0,持续循环 } } P0=~NumberCode[num]} } // 2、 此程序实现独立按键的检测功能,key5 和 key6 每次按下按键时,数码管次低位和最 低位显示的数值加 1,按键同时响蜂鸣器 #include<reg52.h>sbit key5 = P1^4sbit key6 = P1^5sbit P3_6 = P3^6unsigned char code BitSet[8] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }//用于设置(低电平位选)数码管的位选信号,从低到高对应 8 个数码管 unsigned char code NumberCode[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, }//用于设置(共阴极)数码管的段选信号,从 0~f 共 16 个数值 void delay_ms(unsigned int n) { //软件延时函数,延时 n 毫秒 unsigned int i, jfor(i=ni>0i--) for(j=110j>0j--)} void beep(int n) { int i = nwhile(i>0) { P3_6 = 1delay_ms(1)P3_6 = 0delay_ms(1)i--} } void main() { int num=0, num2=0while(1) { P2=BitSet[6]//喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //0.5 毫秒高电平 //0.5 毫秒低电平 //选择最低位的数码管 if(key5==0) //判断按键 key5 是否按下 { delay_ms(10)//延时重新判断按键是否按下,延时消除抖动 if(key5==0) { num++//每按下一次显示的数值加 1 beep(100)//喇叭响 100 毫秒 if(num==16) num=0while(!key5) { P2=BitSet[6]//选择次低位的数码管 P0=~NumberCode[num]delay_ms(3)P2=0xff}} } P2=BitSet[7]//选择最低位的数码管 P0=~NumberCode[num2]delay_ms(3)P2=0xff//直到按键释放,按下时 key5==0,持续循环 P0=~NumberCode[num]delay


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10983706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存