博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智能车学习(七)——按键矩阵的实现
阅读量:6844 次
发布时间:2019-06-26

本文共 3072 字,大约阅读时间需要 10 分钟。

一、原理说明

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

 

二、基于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表示没有按下去,否则就返回对应的按键值。

转载地址:http://ykdul.baihongyu.com/

你可能感兴趣的文章
戛纳电影节百花齐放,中国明星衣着品味紧跟时尚前沿
查看>>
TensorFlowPlayground好玩的tensorflow入门神器
查看>>
mysql 存储emoji表情
查看>>
总结--Java思维脑图
查看>>
深入了解Flex布局
查看>>
10年测试总监经验分享,你与优秀工程师的距离!
查看>>
HBase(印象笔记)及DML操作
查看>>
最长公共前缀
查看>>
同是ZooKeeper,你和架构师的理解差在哪里?
查看>>
你的心情如何?镜头「读脸」读出你的心情与隐私之间
查看>>
【更新指南】BarTender正式迎来2019 R2重大版本更新!
查看>>
2019年在哪里找好的高层次人才扶持政策?
查看>>
解决代码报红:Cannot resolve symbol 'xxx'
查看>>
第71节:Java中HTTP和Servlet
查看>>
Linux开源CommunityBridge平台 提供资金、安全以及人员三项关键
查看>>
Python爬虫入门教程 5-100 27270图片爬取
查看>>
Day1:html和css
查看>>
开源如何在云上存活?
查看>>
Android 网络基础之 HTTP
查看>>
ES6实现继承
查看>>