当前位置:首页 > 单片机 > 单片机
[导读] ;----------------------------------------------------------------------------------------P1口外接4×4按键, 常用的读出键值的方法有“查表法”和“反转法”。查表法的程序最为简短,但是稍多占用

;----------------------------------------------------------------------------------------
P1口外接4×4按键, 常用的读出键值的方法有“查表法”和“反转法”。
查表法的程序最为简短,但是稍多占用一点存储空间;反转法的程序执行速度最快,只是要求接口是双向的。
下面分别给出了使用查表法和反转法读取键值的程序。
;----------------------------------------------------------------------------------------
#include
#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;//按下的不是上述按键,就当是没有按键
}
}//本程序虽然稍多几行,但是没有循环,还可以提前返回,所以执行的速度最快
;----------------------------------------------------------------------------------------

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着电脑科技的飞速发展,作为电脑输入设备的重要组成部分,键盘的种类和功能也在不断演变。其中,机械键盘以其出色的手感、长久的使用寿命和高度个性化的特点,深受众多电脑用户的喜爱。而机械键盘的核心——键盘轴,更是决定键盘使用体...

关键字: 电脑 键盘 机械

键盘包括编码键盘和非编码键盘两种。编码键盘带有能够自动识别按键的硬件电路,当按键被按下闭合时,硬件可以提供按键的编号(也被称“键值”),这种键盘使用方便,但是硬件复杂,价格相对较高。非编码键盘不附带按键识别电路,需要利用...

关键字: 键盘 人机交互 编码键盘 非编码键盘

自俄乌冲突爆发之后,以苹果、戴尔、三星等为代表的科技企业,纷纷暂停了自己在俄罗斯当地的相关业务。在被这些企业断供之后,俄罗斯当地遇到了“以键盘为代表的PC外设出现缺货”的困扰。

关键字: PC 键盘

英国里士满2022年7月11日 /美通社/ -- 2022年7月11日,高性能电子产品压力传感触控用户界面的领先创新者Peratech公司宣布,其全系列压力传感技术将应用于最新的联想Legion 7i和7(16...

关键字: 联想 键盘 TE IO

上海2022年6月9日 /美通社/ -- 近期,雪碧视觉形象更新换代,以更加简洁清爽的白绿配色酷爽再出发,旋即发起了一场具有里程碑意义的全球营销活动"Heat Happens"(燥不可挡 酷爽以对)。...

关键字: BSP APP 大屏 键盘

摘要:为了实现智能仪表的人机交互功能,提出了一种采用具有串行接口的键盘显示驱动芯片TML638来对LED数码管及键盘进行管理的设计方案,给出了TM1638与单片机STC11F02进行接口的具体硬件设计方案和软件设计思想。

关键字: TM1638 数码管 键盘 智能仪表 显示电路

在这篇文章中,小编将为大家带来小米米物智能语音键盘的相关报道。

关键字: 米物智能语音键盘 键盘 智能

树莓派400(Raspberry Pi 400)将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 树莓派400 树莓派 键盘

8 月 20 日雷蛇发布了 Razer Productivity Suite 生产力套装。这是一套次世代、适用于办公环境的生产力工具,其中包含 Razer Pro Click 无线鼠标、Razer P

关键字: 雷蛇 鼠标 键盘

前言 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入 A 字母时,操作系统期间发生了什么吗」? 那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输入输出设备」的,等...

关键字: 操作系统 键盘
关闭
关闭