用查表法写c语言程序,最简好用的反转法查表法c语言4x4矩阵键盘程序.doc

#include #define uint unsigned int

#define uchar unsigned char

/**************************************************************

* 名称:Key_Tab()

* 功能:P1外接4×4按键, 按照查表法读出键值

* 返回:按键值0~15/如无键按下, 返回16

***************************************************************/

uchar Key_Tab(void)

{

uchar code K_Tab[4][4] = {

0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d,

0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77};

uchar temp1 = 0xfe, temp2, i, j;

for(i = 0; i < 4; i++) {    //扫描低四位

P1 = temp1;               //输出一行0

temp2 = P1;               //马上就读入

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);

}

return 16;                  //没有查到,返回按键松开的代码

}   //呵呵,实质性的语句不过9行,就是这么简练!

;----------------------------------------------------------------------------------------

/**************************************************************

* 名称:KeyRvs()

* 功能:P1外接4×4按键, 按照反转法读出键值

* 输出:按键值0~15/如无键按下, 返回16

***************************************************************/

uchar KeyRvs(void)

{

uchar temH, temL, key;

P1 = 0xf0; temH = P1;//低四位先输出0;读入,高四位含有按键信息

P1 = 0x0f; temL = P1;//然后反转输出0;读入,低四位含有按键信息

//-----------------------------------------------------

//两次读入的时间间隔,必须尽量的小,以尽量避免按键状态发生变化

//有些人给出的程序,就没有注重这些,有些程序甚至还有间隔几个毫秒的!

//要知道,按键是会抖动的,夜长梦多,真不知道读出些什么!

//呵呵,做而论道给出的这个程序,读键的准确性最高。

//-----------------------------------------------------

switch(temH) {

case 0xe0: key = 0; break;

case 0xd0: key = 1; break;

case 0xb0: key = 2; break;

case 0x70: key = 3; break;

default: return 16;//按下的不是上述按键,就当是没有按键

}

switch(temL) {

case 0x0e: return key;

case 0x0d: return key + 4;

case 0x0b: return key + 8;

case 0x07: return key + 12;

default: return 16;//按下的不是上述按键,就当是没有按键

}

}//本程序虽然稍多几行,但是没有循环,还可以提前返回,所以执行的速度最快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值