zoukankan      html  css  js  c++  java
  • 智能车学习(七)——按键矩阵的实现

    一、原理说明

          就是按键矩阵代码书写的一个说明,就是讲K5到K7先输出高电平,而K1和K4则调成上拉输入,如果检测到K1到K4有一个变为0,说明有按键按下去,立刻进行转换,是的K1到K4设置为输出高电平,然后读取K5到K7为上拉输入,然后再读取到为0的点,通过这两个数据就能确定按下了那个按键。

    image

    二、基于KVL25代码书写:

    1、头文件

    #ifndef __KEYSQUARE_H
    #define __KEYSQUARE_H
    
    
    /***********宏定义************/
    
    #define keySquare_K1 PTD7
    #define keySquare_K2 PTD6
    #define keySquare_K3 PTD5
    #define keySquare_K4 PTD4
    #define keySquare_K5 PTD3
    #define keySquare_K6 PTD2
    #define keySquare_K7 PTD1
    
    #define Keynum1 1
    #define Keynum2 2
    #define Keynum3 3
    #define Keynum4 4
    #define Keynum5 5
    #define Keynum6 6
    #define Keynum7 7  
    #define Keynum8 8
    #define Keynum9 9
    #define Keynum10 10
    #define Keynum11 11
    #define Keynum12 12
    /*****************************/
    
    
    /***********函数神经***********/
    
    int keyBoard_get(void);
    
    /*****************************/
    
    
    
    #endif

    2、源文件

    #include "include.h"
    #include "common.h"
    #include "OLED.h"
    #include "gpio.h"
    #include "KeySquare.h"
    #include "lptmr.h"
    
    
    int keyBoard_get(void) 
    {  
       unsigned char tempdata=0x00;
       unsigned char bdata=0x00;
       int keyNum=0;
       
       //设置为输入,用于检测   
       gpio_init (keySquare_K1, GPI , 1);
       gpio_init (keySquare_K2, GPI , 1);
       gpio_init (keySquare_K3, GPI , 1);
       gpio_init (keySquare_K4, GPI , 1);
       
       //设置为上拉
       port_init_NoALT(keySquare_K1,PULLUP );
       port_init_NoALT(keySquare_K2,PULLUP );
       port_init_NoALT(keySquare_K3,PULLUP );
       port_init_NoALT(keySquare_K4,PULLUP );
       
       //设置为输出
       gpio_init (keySquare_K5,GPO , 0);
       gpio_init (keySquare_K6,GPO , 0);
       gpio_init (keySquare_K7,GPO , 0);  
      
       lptmr_delay_us(4);
       tempdata  = gpio_get(keySquare_K1);
       tempdata += gpio_get(keySquare_K2) << 1;
       tempdata += gpio_get(keySquare_K3) << 2;
       tempdata += gpio_get(keySquare_K4) << 3;
       if(tempdata != 0xff)
        {
           bdata = (tempdata << 4) | 0x00;
                
           gpio_init (keySquare_K1, GPO , 0);
           gpio_init (keySquare_K2, GPO , 0);
           gpio_init (keySquare_K3, GPO , 0);
           gpio_init (keySquare_K4, GPO , 0);
                
           gpio_init (keySquare_K5,GPI , 1);
           gpio_init (keySquare_K6,GPI , 1);
           gpio_init (keySquare_K7,GPI , 1);
           
           //上拉 
           port_init_NoALT(keySquare_K5,PULLUP);
           port_init_NoALT(keySquare_K6,PULLUP);
           port_init_NoALT(keySquare_K7,PULLUP);
    
           lptmr_delay_us(4);
                           
           tempdata =  gpio_get(keySquare_K5);
           tempdata += gpio_get(keySquare_K6) << 1;
           tempdata += gpio_get(keySquare_K7) << 2;
           bdata    += tempdata;
           switch(bdata)
           {
               case 230:  keyNum=Keynum1;    break;
               case 214:  keyNum=Keynum2;    break;
               case 182:  keyNum=Keynum3;    break;
               case 118:  keyNum=Keynum4;    break;
               case 229:  keyNum=Keynum5;    break;
               case 213:  keyNum=Keynum6;    break;
               case 181:  keyNum=Keynum7;    break;
               case 117:  keyNum=Keynum8;    break;
               case 227:  keyNum=Keynum9;    break;
               case 211:  keyNum=Keynum10;   break;
               case 179:  keyNum=Keynum11;   break;
               case 115:  keyNum=Keynum12;   break;
               default:     break;
           }
        } 
    
       return keyNum; 
    
    }

    三、使用说明

        使用的时候,在Main函数进行调用,每次会返回一个值,0表示没有按下去,否则就返回对应的按键值。

  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4912233.html
Copyright © 2011-2022 走看看