智能车学习(七)——按键矩阵的实现
一、原理说明
就是按键矩阵代码书写的一个说明,就是讲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表示没有按下去,否则就返回对应的按键值。
智能车学习(七)——按键矩阵的实现的更多相关文章
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- 智能车学习(二十三)——浅谈心得体会
因为毕竟是竞赛,跟学校挂钩,没办法开源代码和算法完成思路,所以不能详细写太多,如果可以等价交换的话,应该还是可以向领导申请一下的. 在厦大信科通信系,参加这个比赛,大家都觉得性 ...
- 智能车学习(十八)——电机学习
一.C车电机选择 1.摘要: 因为C车模在四轮车的优势是有两个电机,可以进行主动差速,劣势是电机太弱了....所以如何选择电机,就是个钱的问题了,电机多一点,就比较好选,但是C车电机跑多了就 ...
- 智能车学习(二十二)——浅谈速度控制
一.经典PID控制 使用遇限反向PID会比较适合有加减速的车子,使用变速积分适合跑匀速的车子.然后这种方法的条件下,一定要尽可能缩短控制周期.. 二.PID加棒棒控制 针对 ...
- 智能车学习(二十)——浅谈C车硬连接与软连接
一.为何要追求软连接? 车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大 ...
- 智能车学习(十七)——舵机学习
一.舵机的结构 舵机简单的说就是集成了直流电机.电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元.能够利用简单的输入信号比较精确的转动给定角度的电机系统.舵机安装了一个电位器(或 ...
- 智能车学习(十一)——陀螺仪学习
一.学习说明 感觉就是配置I2C通信,然后直接移植51代码... 二.代码分享: 1.头文件: #ifndef I2C_GYRO_H_ #define I2C_GYRO_H_ /*********** ...
- 智能车学习(八)——菜单的实现
一.代码分享 1.头文件 #ifndef __MENU_H #define __MENU_H /***********宏定义************/ //页面声明 typedef enum Menu ...
- 智能车学习(六)——OLED屏幕使用
一.代码展示 1.头文件: #ifndef OLED_H_ #define OLED_H_ extern unsigned char Draw[]; extern const unsigned cha ...
随机推荐
- centos 7 升级后yum install出现Exiting on user cancel
centos 7 升级后yum install出现Exiting on user cancel centos 7.x升级后用yum install进行安装时经常出现Exiting on user ca ...
- MySQL\MariaDB 多线程复制初探
背景: MariaDB 在10.0.5就已经支持了并行复制的功能,即从库多线程复制的功能.MySQL最先在5.6.3中支持.目前暂时没有用MySQL5.6的版本,故暂时只对MariaDB进行一些说明, ...
- percona-toolkit 之 【pt-heartbeat】说明
背景: MySQL的架构中,Master-Slave是目前最受欢迎的,用的也最多,但是对于主从的延迟一般都是按照他自己的状态[Seconds_Behind_Master]来查看的,最近看了[不要用该值 ...
- nyoj133_子序列_离散化_尺取法
子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给定一个序列,请你求出该序列的一个连续的子序列,使原串中出现的所有元素皆在该子序列中出现过至少1次. 如2 8 ...
- Spring+SpringMVC+Mybatis 多数据源整合(转)
转载自:http://blog.csdn.net/q908555281/article/details/50316137 目录(?)[-]拷贝所需jar拷贝jar文件需要的jar文件入下图所示因为我的 ...
- spring mvc 重定向问题
(1)我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的.我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我要跳转到列表页面,不需要传递参数,列表 ...
- 【leetcode】Text Justification(hard) ☆
Given an array of words and a length L, format the text such that each line has exactly L characters ...
- LeetCode 231 Power of Two
Problem: Given an integer, write a function to determine if it is a power of two. Summary: 判断一个数n是不是 ...
- IOS - 内购
内购的五种产品类别 •非消耗品(Nonconsumable)买了就有,头衔,功能 –指的是在游戏中一次性购买并拥有永久访问权的物品或服务.非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用 ...
- [Android Pro] 通过包名启动应用
Intent intent = packageManager.getLaunchIntentForPackage(WEIXIN_PKGNAME); intent.setFlags(Intent.FLA ...