精华内容
下载资源
问答
  • /*按键扫描函数*/#define key_port P1unsigned char Keyscan(void){unsigned char temp;temp = key_port;temp &=0xf0;if(temp != 0xf0){ //检测按键是否被按下delay_ms(5);temp = key_port;temp &= 0xf0;if...

    /*按键扫描函数*/

    #define key_port P1

    unsigned char Keyscan(void){

    unsigned char temp;

    temp = key_port;

    temp &=0xf0;

    if(temp != 0xf0){ //检测按键是否被按下

    delay_ms(5);

    temp = key_port;

    temp &= 0xf0;

    if(temp != 0xf0){  //再次确认按键是否被按下

    switch(temp){

    case 0xe0:

    return '1';

    break;

    case 0xd0:

    return '2';

    break;

    case 0xb0:

    return '3';

    break;

    case 0x70:

    return '4';

    break;

    default:

    break;

    }

    }

    }

    }

    有四个按键,使用的是P1口高四位,

    满意回复

    224d4401bfba9bba40c85bd5428a756a.png+10

    明显的BUG,

    不是每个回路都有返回值

    编译应该都有警告的

    c783651f346ef30cdd23bac078f98e29.gif+5

    把return改为给一个变量赋值,在最后返回变量的值比如

    switch(temp){

    case 0xe0:

    num=1;

    ...

    c783651f346ef30cdd23bac078f98e29.gif+5

    好吧,我更新的有点慢,不妨贴出你的判断的函数来分析下

    224d4401bfba9bba40c85bd5428a756a.png+5

    基础问题没有搞清楚

    每个回路(条件分支)都必须返回一个明确的值,

    你这明显只考虑了有按键正确按下的情况返回值是正确的,没有按键按下呢,返回的其实是未 ...

    dad5cea0184d7ec5b3653f0da115659a.gif+5

    KEIL的switch编译有时候出现莫名奇妙的问题,试用

    if()

    {}

    else if ()

    {}

    else if()

    {}

    else

    {}

    代替看看?

    224d4401bfba9bba40c85bd5428a756a.png+5

    cfc9af83d57df4058fb6f88cd7474aea.gif+2

    40f6f45d80456974affb3b83a42dc4c3.png+2

    没有按键,返回扫描到的初始键值,另外,建议放到定时器中,使用状态机。

    e8f0e28fceff3ed43815b0a249451fd6.gif+2

    每个端口都有接按键的高低电平检测的话,只要检测该端口不就好了吗??

    还需要用switch case吗

    731d3ac020c8d279d2a7a23b1f616f02.png+2

    建议用状态机写按键扫描函数

    展开全文
  • 单片机按键扫描函数

    千次阅读 2020-01-16 14:02:27
    按键扫描(支持连续按) 检测按键IO口的高低电平 u8 KEY_Scan(void) { if(KEY按下) { delay_ms(10);//延时10-20ms 消蚪 if(KEY确实按下) { return KEY_Value; } return 无效值; } } 按键扫描(不...

    按键扫描(支持连续按)

    检测按键IO口的高低电平

    u8 KEY_Scan(void)
    {
    	if(KEY按下)
    	{
    		delay_ms(10);//延时10-20ms 消蚪
    		if(KEY确实按下)
    		{
    			return KEY_Value;
    		}
    		return 无效值;
    	}
    }
    

    按键扫描(不支持连续按)

    检测高低电平的变化(上升沿,下降沿)

    u8 LEY_Scan(void)
    {
    	static u8 key_up = 1;
    	if(key_up&&KEY按下)
    	{
    		delay_ms(10);//延时消抖
    		key_up=0;//标记这次key已经按下
    		if(KEY确实按下)
    		{
    			return KEY_Value; 
    		}
    		else if(KEY 没有按下)key_up=1;
    		return 没有按下; 
    	}
    }
    

    按键扫描(二合一)

    传入参数mode 如果mode=1则支持连续按

    u8 KEY_Scan(u8 mode)
    {
    	static u8 key_up=1;
    	if(mode ==1 )key_up=1;//支持连续按
    	if(key_up&&KEY按下)
    	{
    		delay_ms(10);//延时消抖
    		key_up=0;//标记这次key已经按下
    		if(KEY确实按下)
    		{
    			return KEY_Value; 
    		}
    		else if(KEY没有按下)key_up=1;
    		return 没有按下;
    	}
    }
    
    展开全文
  • 按键扫描函数——消抖

    千次阅读 2019-03-14 12:10:45
    函数主要完成了扫描按键是否被按下,由于手速的问题,当按键被按下会持续一小段时间的高电平或者低电平,所以需要消抖。这里也完成了消抖的功能,按键如果被按下了则函数返回值为1,相反,函数返回值为0,则表示为...

    此函数主要完成了扫描按键是否被按下,由于手速的问题,当按键被按下会持续一小段时间的高电平或者低电平,所以需要消抖。这里也完成了消抖的功能,按键如果被按下了则函数返回值为1,相反,函数返回值为0,则表示为被按下。

     

    int scan_s1(void)
    {
       if(s1==1)   //s1=1表示S1被按下
      {
           delay(100);//延长很小一段时间
           if(s1==1)   //S1还是等于1,表示的确被按下了(消抖)
           {
                while(s1==1);//等待s1抖动完成,直到s1=0表示回到了未按下的状态。
                return 1;//条件不满足,表示s1被松开了,则退出并返回1;
            }
      }
     return 0;
    }

     

    展开全文
  • 4*4矩阵键盘扫描函数

    2012-09-04 16:33:20
    51单片机4*4矩阵键盘扫描函数,需要放进C51主函数中运行。
  • 4x4键盘扫描函数(王)

    2011-04-14 15:53:58
    在C8051F310上的4*4键盘扫描代码 以前写的
  • 谁能帮我解释一下这个程序中的这个(键盘扫描函数,使用行列反转扫描法)0主要是对cord_l=P3&0xf0; //读入行线值return(cord_h+cord_l);//键盘最后组合码值这俩句不太明白,希望能得到各位详细一点的解答,还有...

    谁能帮我解释一下这个程序中的这个(键盘扫描函数,使用行列反转扫描法)0

    主要是对cord_l=P3&0xf0; //读入行线值

    return(cord_h+cord_l);//键盘最后组合码值

    这俩句不太明白,希望能得到各位详细一点的解答,还有那个行列反转扫描法什么理解,哎,小弟自学的, 挺难的!谢了各位!

    #include <reg52.h>//包含头文件

    #define uchar unsigned char

    #define uint unsigned int

    unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
    0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

    uchar keyscan(void);

    void delay(uint i);

    void main()

    {

    uchar key;

    P2=0x00;//1数码管亮 按相应的按键,会显示按键上的字符

    while(1)

    {

    key=keyscan();//调用键盘扫描,

    switch(key)

    {

    case 0x7e:P0=dofly[0];break;//0 按下相应的键显示相对应的码值

    case 0x7d:P0=dofly[1];break;//1

    case 0x7b:P0=dofly[2];break;//2

    case 0x77:P0=dofly[3];break;//3

    case 0xbe:P0=dofly[4];break;//4

    case 0xbd:P0=dofly[5];break;//5

    case 0xbb:P0=dofly[6];break;//6

    case 0xb7:P0=dofly[7];break;//7

    case 0xde:P0=dofly[8];break;//8

    case 0xdd:P0=dofly[9];break;//9

    case 0xdb:P0=dofly[10];break;//a

    case 0xd7:P0=dofly[11];break;//b

    case 0xee:P0=dofly[12];break;//c

    case 0xed:P0=dofly[13];break;//d

    case 0xeb:P0=dofly[14];break;//e

    case 0xe7:P0=dofly[15];break;//f

    }

    }

    }

    uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法

    {

    uchar cord_h,cord_l;//行列值

    P3=0x0f; //行线输出全为0

    cord_h=P3&0x0f; //读入列线值

    if(cord_h!=0x0f) //先检测有无按键按下

    {

    delay(100); //去抖

    if(cord_h!=0x0f)

    {

    cord_h=P3&0x0f; //读入列线值

    P3=cord_h|0xf0; //输出当前列线值

    cord_l=P3&0xf0; //读入行线值

    return(cord_h+cord_l);//键盘最后组合码值

    }

    }return(0xff); //返回该值

    }

    void delay(uint i)//延时函数

    {

    while(i--);

    }

    展开全文
  • [原创]键盘扫描码大全对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时...
  • 按键扫描函数 —— KEY_Scan(u8 mode)`

    千次阅读 多人点赞 2020-08-17 17:01:28
    按键扫描函数 —— KEY_Scan(u8 mode)` STM32F407 首先强调的是,上键默认为低电平,下键、左键和右键默认为高电平。即上键按下时,默认电平从低电平变为高电平,产生一个上升沿信号,下键、左键和右键任意一个按下...
  • STM32按键扫描代码

    2018-10-25 14:47:55
    扫描独立按键,具有软件滤波机制,具有按键FIFO。可以检测如下事件: 1、按键按下;2、按键弹起;3、长按键;4、长按时自动连发;5、组合按键
  • 键盘扫描函数HD7279

    2014-12-17 20:37:47
    键盘扫描函数HD7279,#define HD7279_RESET 0xa4 //复位 #define HD7279_TEST 0xbf //测试 #define HD7279_RLC 0xa3 //循环左移 #define HD7279_RRC 0xa2 //循环右移 #define HD7279_RL 0xa1 //左移 #define HD7279_...
  • 51单片机矩阵键盘扫描程序详解#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换#define KeyPort P1sbit LATCH1=P2^2...
  • 矩阵键盘的键值返回(在没有按任何键时, * 函数返回值为16,只有在按下按键的瞬间返 * 回的键值才是你真正按下按键的键值,正是这样才能实现长按连续加或减)
  • 基于STM32F030R8Tx使用HAL实现按键扫描功能,支持多键,单键功能,配合CSDN博客的学习存档例程,欢迎下载
  • 在程序内部有说明,已通过实际的检测证明可用
  • 支持连按型:以WK_UP按键为例,由于WK_UP按下后,会在IO口检测到高电平,设计思路是:当按键扫描函数检测到WK_UP为低电平,不会判断WK_UP已经按下,只有检测到WK_UP口为高电平时,才会判断已经按
  • 单片机——按键扫描

    2020-07-31 18:38:02
    按键扫描,我想应该是比较简单的单片机应用了,但是有时候看起来简单的东西反而不好写。 本文拿大部分人觉得简单的按键扫描聊聊我工作至今对于软件结构的理解。嗯,对的,是结构,不是架构,暂时不敢提架构这个词。 ...
  • STM32学习笔记之按键扫描

    千次阅读 2020-08-01 21:48:59
    STM32学习笔记之按键扫描的代码解析(F4)
  • stm32的按键扫描[操作寄存器+库函数]

    千次阅读 2016-08-30 21:15:47
    本例将实现stm32的按键扫描功能。   操作寄存器   stm32的I/O口作为输入使用时,是通过读取GPIOx -> IDR 寄存器的内容来读取I/O口状态的。   IDR寄存器各位描述如下:   由于systick不能像库函数那样方便的产生...
  • } /** * @brief 扫描按键函数 * @param 无 * @retval 独立按键扫描的详细过程: * 第一步:平时没有按键被触发时,按键的自锁标志和去抖动延时计数器一直被清零。 * 第二步:一旦有按键被按下,去抖动延时计数器...
  • keyscan按键扫描例程

    2020-06-25 17:03:09
    基于STM32F030R8Tx使用HAL库实现扫描按键键值处理,键值事件类型有短按事件,短按松开事件,长按事件,长按松开事件等
  • 经典按键扫描程序算法实现方式 算法实现函数(来源于网络) unsigned char Trg; unsigned char Cont; void KeyRead( void ) { unsigned char ReadData = P1^0xff; // 注解1 Trg = ReadData & (ReadData ^ ...
  • 矩阵按键扫描

    2019-12-24 23:53:06
    void keyscan() // 键盘扫描程序函数 { uchar temp;//P2端口中转变量 uint num=20;//键值 P2=0xfe; if(P2!=0xfe)//第一行 { Delay(20);// 延迟20ms if(P2!=0xfe) { temp=P2&...
  • STM32的按键扫描

    2021-03-28 15:50:14
    key.c #include "key.h" #include "SysTick.h" /************************************************************...* 函数功能 : 按键初始化 * 输 入 : 无 * 输 出 : 无 ******************************************
  • 3.STM32F4按键扫描函数

    2017-08-17 15:05:00
    //按键处理函数 //返回按键值 //mode:0,不支持连续按;1,支持连续按; //0,没有任何按键按下 //1, KEY0 按下 2, KEY1 按下 3, KEY2 按下 4, WKUP 按下 WK_UP //注意此函数有响应优先级,KEY0>KEY1>KEY2...
  • 一种矩阵按键扫描方法,很简略

    千次阅读 2019-04-22 10:10:44
    去年大一比赛,因为时间问题,还有程序得现场手打,找老师要过他的程序,这种矩阵按键的确挺好用的,而且代码量不大。当时比赛4个小时,各种底层驱动还要自己手打,时间还是挺紧张的,当时功能要求都勉强写完了。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,466
精华内容 14,986
关键字:

按键扫描函数