AD按键-矩阵按键:
原理:利用数组分压+AD采集;
优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来);可备用作为AD基准输入。
缺点:不能做成组合按键(或者电阻要精确选择);且离IO口越近优先级越高。按键的识别收到精度的影响(消兜:抖动时间几毫秒到几十毫秒,所以连续读4次(每次8ms)直到读到值都相同。按键的识别是靠AD值的容差范围而非具体的AD值来识别)。基准电压的获得(IO或TL431)
参考http://www.ednchina.com/ART_46350_11_0_OA_6f4d5e96.HTM
http://blog.sina.com.cn/s/blog_7a9b7c4c0100sohh.html
http://wenku.baidu.com/link?url=-vUPz14ryQnsrXNIJdfbOn1qw1JsJqIFRG9VUhxbaGjy80GEzZz8judHw1WRubzAsb-KOUzGfZQ-zVpOKu2PVH-SvRerysWsd-F_kTzivwS
--------------------------矩阵按键程序---------------------------------------------
矩阵键盘是否接上拉电阻:网友说法对于哪些弱上拉驱动能力弱的准3态IO的需要加,为了抗干扰也需要加;否则就不需要加。
/**************************************************************
*按键的键值分布图:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
***************************************************************/
/**************************************************************
* 功能:P3外接4×4按键, 按照查表法读出键值,使用时需要添加延时消抖动
* 返回:按键值0~15/如无键按下, 返回16
***************************************************************/
/*uchar keyscan(void)
{
uchar code K_Tab[4][4] = {
0xee, 0xde, 0xbe, 0x7e, //扫描码为0xfe时(仅第一行为0)第一行4列4个按键可能按下时的值
0xed, 0xdd, 0xbd, 0x7d, //扫描码为0xfd时(仅第二行为0)第二行4列4个按键可能按下时的值
0xeb, 0xdb, 0xbb, 0x7b,
0xe7, 0xd7, 0xb7, 0x77};
uchar temp1 = 0xfe, temp2, i, j;
for(i = 0; i < 4; i++)
{ //扫描低四位
P3 = temp1; //输出一行0
temp2 = P3; //马上就读入
if((temp2 & 0xf0) != 0xf0) //如果有键按下
{
for(j = 0; j < 4; j++) //就扫描高四位
if(temp2 == K_Tab[i][j]) //查表
return i * 4 + j; //查到了就返回按键的数值
}
else temp1 = _crol_(temp1, 1);//非51的循环移位处理:(uchar)~(1<<i)
}
return 16; //没有查到,返回按键松开的代码
} */ //呵呵,实质性的语句不过9行,就是这么简练!
/**************************************************************
* 功能: 按照反转计算法读出键值(IO必须是双向的或能切换),不用循环结构
* 输出:按键值0~15/如无键按下, 返回16
***************************************************************/
uchar keyscan(void)
{
uchar temH, temL,hang,lie;
uchar key_value;
P3 = 0xf0;
if(P3 != 0xf0)
{
delay(5); //消抖
if(P3 != 0xf0) //的确是有按键被按下
{
P3 = 0xf0; temH = P3; //低四位先输出0;读入,高四位含有按键信息
P3 = 0x0f; temL = P3; //然后反转输出0;读入,低四位含有按键信息
switch(temH) {
case 0xe0: lie = 0; break;
case 0xd0: lie = 1; break;
case 0xb0: lie = 2; break;
case 0x70: lie = 3; break;
default: lie = 16;//按下的不是上述按键,就当是没有按键
}
switch(temL)
{
case 0x0e: hang = 0; break;
case 0x0d: hang = 1; break;
case 0x0b: hang = 2; break;
case 0x07: hang = 3; break;;
default: hang = 16;//按下的不是上述按键,就当是没有按键
}
retrun (hang -1)*4 + lie;
}
}
}
定时器的消抖法(裸奔程序):初始化keyvalue=一个不可能存在的值。
1当有按键按下时(keyolder),启动定时器定时10MS(systick),然后退出;
2定时到后置位Flag_10MS,并读按键值keynew
3if((Flag_10MS)&&(keyoder==keynew)) keyvalue=keynew;
4键值使用:
if(keyvalue!=一个不可能存在的值)
{
....
}
AD按键-矩阵按键:的更多相关文章
- AD按键-矩阵按键-独立按键:
原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...
- 【C51】单片机独立按键与矩阵按键
独立按键 首先既然是检测输入,对于当然要用到拉电阻,来检测引脚电平变化变化.51单片机中,除了P0口外,P2,P3,P4都是内置上拉电阻的准双向IO口,一般 的 51 P0引脚都外接了上拉电阻,当然也 ...
- 智能车学习(七)——按键矩阵的实现
一.原理说明 就是按键矩阵代码书写的一个说明,就是讲K5到K7先输出高电平,而K1和K4则调成上拉输入,如果检测到K1到K4有一个变为0,说明有按键按下去,立刻进行转换,是的K1到K4设置为输出高电平 ...
- C51 原创电子琴 (蜂鸣器/计时器/中断/矩阵按键)
需求分析 用C51的16个矩阵按键当作两个八度的琴键 按下时发出相应音调的声音,静态数码管显示相应音符的数字. 为了解锁更多曲目,两个多的琴键设计成#4,显示时加上小数点 下图分别为1和#4的显示,其 ...
- C51 矩阵按键 个人笔记
矩阵按键 电路 每个按键一端和同行一端相连(JP4的高4位),另一端和同列一端相连(JP4的低4位) 判断按键是否按下: 法一:逐行扫描 for(int i = 8 ; i>3 ; i-- ) ...
- 【.NET 与树莓派】矩阵按键
欢迎收看火星卫视,本期节目咱们严重探讨一下矩阵按键. 所谓矩阵按键,就是一个小键盘(其实一块PCB板),上面有几个 Key(开关),你不按下去的时候,电路是断开的,你按下去电路就会接通.至于说有多少个 ...
- C#控制键盘按键(大小写按键等)的代码
将代码过程较好的代码段做个记录,如下的资料是关于C#控制键盘按键(大小写按键等)的代码.using System;using System.Collections.Generic;using Syst ...
- MCU 51-4 独立按键&编码按键
独立按键: 按键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动的过程,抖动必须清除. 按键按下一次,数码管数值加1: #include<re ...
- 矩阵按键的试验---verilog
矩阵键盘的试验,采用三段式状态机处理方法. 难点在于检测状态机中:按键消抖以后逐列检测. 电路图: 代码 /********************************Copyright***** ...
随机推荐
- win7win8一键取得超级管理员权限
win7win8有时会出现删除不了文件的情况,弹窗提示需要某某权限,下面为解决办法: 在普通帐户中快速获得最高的权限: 新建一个.txt文本,将下面的代码复制粘贴到文件中,另存为或重命名为.reg文件 ...
- caffe: test code for Deep Learning approach
#include <stdio.h> // for snprintf #include <string> #include <vector> #include &q ...
- JavaScript的事件绑定及深入
事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定 (DOM2 级模型).现代事件绑定在传统绑定上提供了更强大更方便的功能. 一.传统事件绑定的问题传统事件绑定有内联模型 ...
- 二十四种设计模式:享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...
- 017. ADO.NET Connection和command及DataReader
ADO.NET主要包括Connection , command , DataReader, DataSet, DataAdapter5个对象, 通过这5个对象可以对数据库进行查询, 添加, 修改及删除 ...
- gnu-software
gnu coreutils https://www.gnu.org/software/coreutils/manual/coreutils.html#toc_Printing-text 目录列表 ht ...
- jmeter制造安全证书
对安全性有要求的网站一般使用https来加密传输的请求和响应.https离不开证书,关于证书不在多说.Apache的HttpClient支持https, 下面是官方的样例程序,程序中使用了my.sto ...
- exp命令ORACLCE10G导出ORACLE11G的数据1455错误
异常:1455 解决: 命令:exp youruser/password@192.xxx.x.xx:1521/orcl owner=youruser file=c:\export.dmp trigge ...
- FileReader 基本介绍
转自:http://blog.csdn.net/zk437092645/article/details/8745647 用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步 ...
- JST(JavaScript Trimpath)前端模板引擎简介
JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...