查表法矩阵键盘

发布者:明石轩最新更新时间:2012-08-06 来源: 51hei关键字:查表法  矩阵键盘  反转法 手机看文章 扫描二维码
随时随地手机看文章
//p1口外接3*4矩阵键盘,其中p1^0不用置1,常用读出键值方法有
//“查表法”和“反转法”。查表法程序最为简短,但是稍多占用
//一点存储空间;反转法的程序执行速度最快,只是要求接口是
//双向的。
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F,
~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//共阳极LED代码与共阴极正好相反,所以阴极码取反
uchar num;
uchar keyscan();
/*void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--); 
}*/
void main()
{ 
 P0=table[0];
 while(1)
 { 
    num=keyscan();
    if(num!=16)
    P0=table[num];
  
 
 } 
}
uchar keyscan()
{
 uchar code table1[3][4]=
  {//0xee,0xde,0xbe,0x7e,
   0xed,0xdd,0xbd,0x7d,
   0xeb,0xdb,0xbb,0x7b,
   0xe7,0xd7,0xb7,0x77};
  uchar temp1=0xfd,temp2,i,j; //如果是3*4则只需将初值temp1改变p1^0不用置1并改变表值
  for(i=0;i<4;i++)//扫描低四位//如果3*4键盘i<3也可
  {  P1=temp1;       //输出一行0
   temp2=P1;       //马上读入P1口状态
   if((temp2&0xf0)!=0xf0)//如果有键按下
   {
    for(j=0;j<4;j++)//就扫描高四位                 j=0 j=1  j=2  j=3  
   {
    if(temp2==table1[i][j])//查表              i=0  0   1    2  3
     return i*4+j;    //查到了就返回键的值        i=1  4   5    6  7
   }                  //             i=2  8   9    10  11
   }        //                        i=3  12   13   14 15
  else temp1=_crol_(temp1,1);        //
          //                             i*4+j
  }
  return 16;        //没有查到,返回键松开的代码
}   
关键字:查表法  矩阵键盘  反转法 引用地址:查表法矩阵键盘

上一篇:小玩LED点阵之-翻页显示
下一篇:中断法串口通信

推荐阅读最新更新时间:2024-03-16 13:04

89C52矩阵键盘的识别
我所见过的矩阵键盘一般有两种识别方法:扫描法和线反转法。以4X4矩阵键盘为例,扫描法是依次将每一行置为0,然后读取列的状态,这样就可以通过四次扫描将整个矩阵键盘的按键状况辨别出来,这个方法所需的代码量比较长;而线反转法则显得比较简洁,它通过先将4行全部置0(0xf0),然后读列的状态,接着,将列全部置0(0x0f),读行的状态,通过(行|列)就能确定整个行列的状态了。扫描法比线反转法占用更多的程序储存空间(Program Space),但占用的更少的数据储存空间(Data Space)。 程序如下 扫描法: #include reg52.h #define uchar unsigned char #define u
[单片机]
51单片机学习笔记,4*4矩阵键盘
今天学习了下矩阵键盘, 4*4, 分别代表0~F这16个数字 我们按了哪个键就显示到数码管上 看完郭老师讲解原理后就自己动手写了,郁闷的是 在keil软件中,我在switch-case语句中 少了个冒号,竟然编译通过! 结果当然不正确了,然后我再keil中调试代码,那更郁闷了,P3口在扫描到第2行键盘时就 会复位成0xff,怎么赋值都没用,其实是没写冒号啊! 调了半天都不行,最后不得不将STC89C52RC换上仿真芯片SST89E516,在线调试后才发现的错误, 然后参考书上的代码才调试成功的,表示无语~~~ mark下 C代码 #include reg52.h #include MY51.H
[单片机]
51单片机学习笔记,4*4<font color='red'>矩阵键盘</font>
4*4矩阵键盘的扫描原理
初学者肯定要经历的一个实验就是4*4矩阵键盘的代码编写,大部分都是在学校里面,有现成的实验箱,基本不需要自己动脑子。上次遇到一个哥们,他说他用的是8031的实验箱,我当时就晕了。8031是8051的前身,那个芯片连ROM都没有,可以想象我们的学校都在拿什么教育祖国的花朵。废话少说,先上图: 对初学者来说这篇文章会有点难,可以先研究一下如何用51单片机点亮一个发光二极管和基于CPLD-EPF10K10LC84-4(84)的交通灯设计。首先要说明的一点,矩阵键盘的动态扫描确实略显复杂,不可能就是读一个端口数据,然后马上就出来结果。这需要对依次每一行的按键进行扫描、判断,然后得出结果。如上图所示,先扫描第一行,也就
[单片机]
4*4<font color='red'>矩阵键盘</font>的扫描原理
单片机矩阵键盘的实现
行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 列线输入端P1.0~P1.3通过电阻接正
[单片机]
单片机<font color='red'>矩阵键盘</font>的实现
课程设计:矩阵键盘扫描(汇编)
//比较简单的汇编矩阵键盘扫描程序 //P2口高四位接列线,第四位接行线 //源程序和proteus仿真我一打包,地址: http://proteus.5d6d.com/thread-9013-1-1.html ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV P2,#0F0H ;给列送高电平 LCALL DELAY ;延时,使电路稳定下来 MOV R4,00H MOV A,P2 ;取P2口的值 ANL A,#0F0H ;屏蔽行线的影响 CJNE A,#0F0H,L ;如果有键按下,就跳转到L DESPLAY:
[单片机]
课程设计:<font color='red'>矩阵键盘</font>扫描(汇编)
手把手教学51单片机 | 第五课 独立键盘 矩阵键盘
编码键盘 电脑的键盘 非编码键盘 (1)硬件消抖 (2)软件消抖 独立键盘 线与的关系 先给IO口高电平 用一个if检测IO口高低电平,若按键按下IO口为0(1&0=0)没按下则继续保持高电平 按键在闭合和断开开始 触电会存在抖动的现象 2.矩阵键盘 #include reg52.h #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7
[单片机]
手把手教学51单片机 | 第五课 独立键盘 <font color='red'>矩阵键盘</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved