精华内容
下载资源
问答
  • I/O 口变为低电平则说明按键按下。 矩阵按键 行列描述法: 先送一列为低电平,其余几列全为高电平(此时我们确 定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电 平(这时我们又确定了行数)...

    独立按键

    独立按键的一端接地,另一端与单片机的某个 I/O 口相连, 开始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是否变为 低电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平, 程序一旦检测到 I/O 口变为低电平则说明按键被按下。

    矩阵按键

    行列描述法:
    先送一列为低电平,其余几列全为高电平(此时我们确 定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电 平(这时我们又确定了行数),则我们便可确认当前被按下的键是哪一行哪一列 的,用同样方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。当然我们也可以将行线置低电平,扫描列是否有低电平。从而达到整个键盘的检测。

    线翻转法:
    使所有行线为低电平时,检测所有列线是否有低电平,如果 有,就记录列线值;然后再翻转,使所有列线都为低电平,检测所有行线的值, 由于有按键按下,行线的值也会有变化,记录行线的值。从而就可以检测到全部 按键。

    行列描述法的列子

    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    #define GPIO_DIG P0
    #define GPIO_KEY P1
    
    
    u8 Key_value;	//用来存放读取到的键值
    
    
    u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
    
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能		   : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
    	while(i--);	
    }
    
    /*******************************************************************************
    * 函 数 名         : KeyDown
    * 函数功能		   : 检测有按键按下并读取键值
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    int Key_down(void)
    {
    	char a=0;
    	GPIO_KEY=0x0f;
    	if(GPIO_KEY!=0x0f)//读取按键是否按下
    	{
    		delay(1000);//延时10ms进行消抖
    		if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
    		{	
    			//测试列
    			GPIO_KEY = 0xF0;
    			switch(GPIO_KEY)
    			{
    				case(0xe0): Key_value = 0;break;
    				case(0xd0): Key_value = 1;break;
    				case(0xb0): Key_value = 2;break;
    				case(0x70): Key_value = 3;break;
    			}
    			//测试行
    			GPIO_KEY = 0x0F;
    			switch(GPIO_KEY)
    			{
    				case(0X0e): Key_value = Key_value;break;
    				case(0X0d): Key_value = Key_value+4;break;
    				case(0X0b): Key_value = Key_value+8;break;
    				case(0X07): Key_value = Key_value+12;break;
    			}
    			
    		}
    	}
    	while((a<50)&&(GPIO_KEY!=0x0f))	 //检测按键松手检测
    	{
    		delay(100);
    		a++;
    	}
    }
    
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {	
    
    	while(1)
    	{	
    		Key_value = Key_down();		   //按键判断函数
    		GPIO_DIG=~smgduan[Key_value];	  //
    	}		
    }
    

    按键消抖

    使用延时函数来消抖,延时10ms来进行消抖。delay(1000);相当于10ms。

    展开全文
  • 判断按键是否按下去了!

    千次阅读 2014-04-04 16:39:54
    其实很简单,就是在 POUMENU的 OnPopup 的事件上面的代码即可 其中 VK_LCONTROL 为键盘左边的CTRL键。 常用的键的nVirtualKeyCode值是: VK_SHIFT: 任何一个Shift键 VK_LSHIFT: 左边的那个 ...

    在一些较为特殊的软件中。

    比如,人事软件A/B账的问题。会涉及到一些特殊的功能(例如:必须按住键盘左Ctrl键,再按鼠标右键。这样才出现菜单,否则不出现)而只是让公司的人知道而让查厂人员不知道,就需要隐藏或是另定义过程的功能,这样,就皆大欢喜了


    下面是以必须按住键盘左Ctrl键,再按鼠标右键。这样才出现菜单来作例子;

    使用 GetKeyState(nVirtualKeyCode) 函数就可以达到目的了;


    procedure Tfrm_SendKQData_Main.PM_1Popup(Sender: TObject);
    begin
      if not ((integer(GetKeyState(VK_LCONTROL)) and integer($80))<>0 ) then Abort;
    end;


    其实很简单,就是在 POUMENU的 OnPopup 的事件下上面的代码即可


    其中 VK_LCONTROL 为键盘左边的CTRL键。


    常用的键的nVirtualKeyCode值是:
    VK_SHIFT: 任何一个Shift键
    VK_LSHIFT: 左边的那个
    VK_RSHIFT

    VK_CONTROL: 任何一个Ctrl键
    VK_LCONTROL
    VK_RCONTROL

    VK_MENU: 任何一个Alt键
    VK_LMENU
    VK_RMENU

    展开全文
  • 怎样判断键盘是否按键按下

    万次阅读 2012-07-23 01:25:46
    一般情况我们边写程序需要在程序运行中判断是否用户按下了键盘的键,比如任意键退出的实现,那么怎样实现这个功能呢?有人可能想到C++中的Meaasge中用case判断,太麻烦了,或者用kbhit()函数,这个函数不错,...

    一般情况下我们边写程序需要在程序运行中判断是否用户按下了键盘的键,比如按任意键退出的实现,那么怎样实现这个功能呢?有人可能想到C++中的Meaasge中用case判断,太麻烦了,或者用kbhit()函数,这个函数不错,但是这个函数有时候还是不太好用,如果在while(!kbhit())中有很大一个循环,猜下会有什么结果?这里推荐一种判断的方法,采用API函数GetAsyncKeyState(),具体参数解释,老规矩见MSDN,具体实现如下:

    我们可以在文件头定义:#define KEY_DOWM(vk_c) (GetAsyncKeyState(vk_c)&0x8000?1:0)

    这样我们可以在程序循环中直接使用KEY_DOWN(/*按键值*/)来判断某个键是否被按下。
    比如KEY_DOWN("A")来判断A键有没有被按下,如果被按下返回一个true。

    bool quit = false;
    while(!quit)
    {
        if(KEY_DOWN(VK_ESCAPE) quit=true;
        //Do SomeThing
    }

    在这个循环中,当你按下Esc键,循环退出;
    vk_c是一个虚拟键值,比如VK_ESCAPE是Esc键的虚拟键值。

    这样就实现了判断是否有键盘键被按下的功能,试试吧。

    展开全文
  • 易语言程序键盘按键测试_按下某键,利用循环、多项选择语句测试键盘按键是否按下
  • 代码中有紧接着的两个独立的if语句,两个if分别判断两个按键是否按下是不是下面的if不会被执行?
  • 条件判断语句假如我们要检查屏幕上某个点是否为黑色,进而让按键精灵执行其他语句,这就需要不断地去检测。要让按键精灵为我们检测,可以利用条件判断语句不断地去验证。下面是“控制命令”上的辅助区域。下面针对上...

    条件判断语句

    假如我们要检查屏幕上某个点是否为黑色,进而让按键精灵执行其他语句,这就需要不断地去检测。要让按键精灵为我们检测,可以利用条件判断语句不断地去验证。

    下面是“控制命令”上的辅助区域。

    下面针对上图着重解释一些相关概念:

    表达式:其实就是算式,不过这个算式突破了中学数学里面仅仅是数字之间的计算,它的运算因子和结果中还可以是字符串或布尔值(布尔值的个数只有两个,就是真和假),甚至是没有任何计算的单个变量或数字、字符。这里是重要的内容,请竖起耳朵。

    数字之间的计算:有基本的带括号的加减乘除四则运算,也可借助VBS提供的函数,实现三角函数、对数、绝对值等等复杂的计算。这个是中学的知识。

    字符串的计算:字符串就是一串字符(废话),虽然不能用加减乘除,但可以串接、拆分。比如表达式"wa"

    & "haha"的结果为"wahaha"。

    布尔值的计算:用常识来理解这个什么布尔值吧。布尔值就是真或假。什么地方才谈得上真假呢,当然是判断的时候。举个例子:“1+1=3”这个表达式为假,“1+1=2”表达式为真;“1+1>3”为假,“1+1<3”为真;“1+1=2并且1+2=3”为真,“1+1=2或者1+1=3”也为真。布尔值非常重要,按键精灵的条件判断就是检查接受判断表达式的布尔值。

    没有计算的表达式:就是单个的数字、字符串或变量,表达式的运算(实际上没有运算)结果就是这个数字、字符串或变量。

    各种计算之间的关系:数字、字符串、布尔值这些看似毫不相干的东东,都统一在数字这个概念上。我们平时说的数字化,其实就是将现实中的东西描述成有一定结构关系的数字,然后用计算机处理这些数字。

    字符是人类的语言,数字计算机是无论如何无法理解的。但我们可以把字符编号,通过程序告诉计算机。比如我们现在的计算机通用的字符编号就告诉计算机:回车符编号为13、A编号为65、a编号为97、1编号为49(注意:这里是字符1,要加引号同数字1相区别,比如var="1"和var=1是完全不同的),这其实就是大名鼎鼎的ASCII码(点击查询)。

    布尔值是真或假,也是和数字有密切关系的。在按键精灵中,真(vbTrue)可以用不是0的值来表示,假(vbFalse)就用0来表示。注意:这里的vbTrue和vbFalse的两头没有加引号,表明它们不是字符串,也不是数字,而是一个其它的值,名字就叫布尔值。

    取值为真:就是上面说的vbTrue,可以用非0数字来代替。

    执行后面的语句:就是按键精灵执行判断语句之后,“条件结束”之前的语句,这也是我们要求按键精灵判断的目的所在。

    循环执行:就是按键精灵重复执行判断语句之后,“循环执行”之前的语句。当条件不再满足时(vbFalse),就不再执行循环中的名字。循环中间的一条或多条语句被称为“循环体”。

    整个语句连起来可以读成:如果表达式xxx为真(成立),那么就执行后面的语句(循环执行)。

    有了条件判断语句后,就可以使按键精灵具有一定的智力。我们可以让它监视某些值或某些点的颜色,当这些值或点色满足你的要求后,就让按键精灵采取进一步行动,否则就再判断或干其它的。

    第七课:子程序

    我们如果要按键精灵执行相同或相似的程序,可以用子程序先写在一边,然后让按键精灵在需要的时候去找到它,执行它里面的语句。比如上一课的那个例子,我们让按键精灵执行的动作都是移动到某一个点,然后点击,再等待1秒。可以看出除了第一步有一些数据上的区别外,其他的都一模一样。为了让脚本变短,更容易写正确,我们可以把相同的功能写到一个子程序里,让子程序根据情况进行操作。请先看下面写好的脚本:

    如果(50,50)的颜色等于 #0 则

    (VBScript)语句 x=100

    (VBScript)语句 y=100

    调用子程序 mysub

    条件结束

    如果(50,50)的颜色等于 #ffffff 则

    (VBScript)语句 x=200

    (VBScript)语句 y=200

    调用子程序 mysub

    条件结束

    脚本停止运行

    子程序 mysub

    鼠标移到 x,y

    左键单击

    延时1000毫秒

    子程序结束,回到调用处

    值得注意的是,在子程序之前有一个语句叫脚本停止运行,这是比较重要的一句,脚本到此就停止了,不再往下执行,然后根据循环的设置,决定是否开始下一次的执行。

    从脚本长度来看,似乎并没有缩短,但你想想,要是需要子程序执行的内容多了,或者要判断的窗口多了,这一课讲得例子就很能节约篇幅了。子程序的更重要好处还在于让脚本的逻辑清晰,一次编写多次使用。修改的时候就更惬意了,只需要改动子程序这一处地方,就可以得到一个全新功能的脚本。

    当然,用不用子程序还全靠个人喜好,你完全可以用Goto

    标识,语句找到相关的语句,然后再这些语句执行完以后跳回。不过跳回的地方是固定的,不如子程序根据实际情况变化。如本例中,子程序执行完后回到的调用处有两个。

    展开全文
  • 实验目的 按键的硬件原理 按键的编程知识 按键1控制LED灯亮,再一次,灭,再一次,亮 按键2控制LED八个灯,同时亮,同时灭; if—else语句 switch语句
  • 1. if(K10 == 0) 2. { 3. __delay_ms(TWOKEY_DELAY); //两个按键按下的时间差,要小于这个延时,否则判断为单个按键按下 4. if(K10 == 0) 5. { 6. if(K7 == 0) 7. { 8. TX_D...
  • 第1章 按键长短实验(提升) 1.1 实验简介 按键长按与按键短在很多产品中都需要应用到,在我们生活中,例如:手机开关机用到的就是...假设,定时器定时10ms中断一次,在中断函数中,判断按键是否按下,如果按下
  • 在实际开发中,我们往往需要知道哪个按钮被选中了,才能进行一步的操作。例如对于一组单选按钮,只有一个选项能被选中,最好的办法是将这组按钮作为参数传入一个函数,通过函数返回值判断哪个按钮被选中了。但遗憾...
  • 摘要 腾兴网为您分享:mysql判断SQL语句是否执行成功的方法,中国体育,智慧党建,月星家居,虚拟按键等软件知识,以及闪点卡密,proxycap,大众车联网,平顶山软件,人格测试,ok支付,美图秀秀还原神器,exe程序加密...
  • 判断是否按下鼠标按钮的时候并按下了CTRL,SHIFT等键方法如下:获取是否按下什么鼠标按键相对简单:通过e.Button == MouseButtons.Left,通过MouseButtons枚举就可以判断,如果还要求判断是否按了功能键,如Ctrl及SHIT键等...
  • JS中判断鼠标按键的问题。IE左键是window.event.button=1右键是window.event.button=2中键是window.event.button=4没有按键动作window.event.button=0Firefox左键是event.button=0右键是event.button=2中键是event....
  • js判断键盘按键

    2011-09-05 21:53:17
    以前在网上看书的时候,总是希望能有一个功能,当"->"方向键时,可以自动跳转到一章,今天终于实现了这个功能,顺便也掌握了js中判断键盘按键的方法.权以此文志之!   判断方法: 在填写表单时,习惯性会按下...
  • 实现的是:按下任意按键,返回按键的名称 根据参考资料1 1.方法 OnGUI() 函数的时间Event方法 using UnityEngine; using System.Collections; public class example : MonoBehaviour { void OnGUI() { Event...
  • 按键精灵txt判断

    2019-10-01 15:18:54
    句子 = "度阿斯达娘阿婶是大的百度知道" 词 = "百度知道" MyPos = Instr(句子, 词) If MyPos > 0 Then TracePrint "找到" Else TracePrint "没找到" End If   (3)读取TXT文件指定某一行的...
  • 按键判断的几种方法

    2013-08-09 11:18:00
    1.利switch.....case 语句,由于switch语句可以判断离散值,所以可以用来判断按键 eg:switch(P1) { case 0xfe:delay(); if(P1=0xfe) ...
  • 按键按下时一般会产生如图8-10所示的电平 电平会有一个抖动的过程,所以要加一个延时函数消除抖动 程序目的:实现将num加2 typedef unsigned int uint; uint num; void delayms(uint xms)//延时函数 { uint i,j; ...
  • 如何用一个语句来判读如"X"键是否处于按下状态,VB中有判读按键电位的语句么(提供个C语言语句也可以) 尝试编写连发时想到的,keypress,keydown,keyup只能模拟键盘操作;gelastkey也不能判断键盘状态[img=...
  • /*记录按键按下时间 时间小于1.5S,按键为短;时间大于1.5S,按键为长按*/ volatileunsignedintkey1_timing =0; /*记录两次短之间的时间间隔*/ ...
  • 一、顺序语句: 按照代码顺序从上往执行所有的代码就是顺序语句。int i = 10; //声明变量的语句 ;//空语句 System.out.println("Hello World!"); //输出语句 //简答的顺序语句 System.out.println("A"); System....
  • 原标题:C语言教学(九-上)if else判断语句今天讲if else判断语句,简单理解就是进行条件判断,如果条件达到则执行if 里或else里的语句。... 运行结果 先定义了一个整数变量a=1,然后if语句判断a是否=1,如果等...
  • 按键

    2018-07-19 17:41:00
    机械弹性开关,当按键按下时,1和2,3和4导通 低电平按下,高电平断开 要消除抖动 5ms~10ms 硬件消除是RC 软件消除是if语句delay_ms(); 按键按下,加下拉电阻,key_up,读到的是高电平,GPIO_Mode_IPD ,下拉...
  • FPGA按键消抖

    千次阅读 2021-01-02 21:19:13
    KEY_S0:判断按键是否按下,如果是,转移到状态 KEY_S1; KEY_S1:10ms 后再次判断按键是否按下,如果是,转移状态到 KEY_S2,否则继续回到 KEY_S0; KEY_S2:判断按键是否抬起,如果是,转移状态到 KEY_S3 KEY_S1:...
  • 模式:单击按键时,返回一次有效键值;长按时也只返回一次有效键值。这样可以有效地排除因不小心长按带来的返回多次有效按键,进而执行多次按键处理程序。2. 长按模式: 单击按键时,返回一次有效按键;长...
  • 矩阵按键

    千次阅读 多人点赞 2018-11-22 13:44:57
    逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键按下。 如P...
  • 还有个事件的type属性,这个经过测试键盘事件返回字符2,鼠标返回字符2,可以根据这个再进行判断反会的是键盘事件还是鼠标事件。 # <Button-1>:鼠标左击事件 # <Button-2>:鼠标中击事件 # <...
  • 按键程序

    2020-01-05 21:58:16
    按键判断标准,当按键的一端接地时未按下时端口为1按下时端口为0(上拉模式),当一端接高电平时未按下时为0按下时为1(下拉模式), 当识别到按键按下时再加上一端10—20ms的延时防止误触,其中按键模式分为连续...
  • 这种新的按键扫描思想并不复杂,你需要定义一个 1ms 的定时器,在定时器中判断按键状态,如果按键按下,则按键的检测按下次数 加一,最后将 按键的检测按下次数 乘以 1ms 则可以得到按键按下时间,如果检测到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,867
精华内容 8,346
关键字:

判断按键是否按下的语句