历史上的今天
今天是:2025年06月09日(星期一)
2020年06月09日 | 单片机矩阵键盘的使用之读取键盘
2020-06-09 来源:elecfans
矩阵键盘的使用在单品机的学习当中十分广泛,可是对于许多新手,包括本人有时也是搞不明白,昨天晚上和今天早上的思考和同行们的讨论,终于有了点头绪,所以想记录下读取键盘的思路。
下面就以按下S16键来讲解其思路:
首先:
P3的高位P3.4~P3.7输出为0,低位P3.0~P3.3输出为1;即P3=0x0F,当按下S16键后(有消抖动过程),P3.3的值为0,则P3的值更新为0x07;
其次:
P3的高位P3.4~P3.7输出为1,低位P3.0~P3.3输出为0;即P3=0xF0,当按下S16键后(有消抖动过程),P3.4的值为0,则P3的值更新为0xE0;
最后将两个值相加得P3=0xE7;
在keyscan()函数(假设我们的键盘扫描程序为unsigned char keyscan())返回其键盘的值供后续的程序调用,通常会有一个switch块根据其返回值来确定输出的是哪一个数值。
下面提供一段KeilC51语言的代码来解释一下:
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
uchar keyscan( void ) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行列值中间变量
P3 = 0x0f; //行线输出全为0
cord_h = P3 & 0x0f; //读入列线值
if( cord_h != 0x0f ) //先检测有无按键按下
{
delay( 100 ); //去抖
if( cord_h != 0x0f )
{
cord_h = P3 & 0x0f; //读入列线值
P3 = cord_h | 0xf0; //输出当前列线值
cord_l = P3 & 0xf0; //读入行线值
return( cord_h + cord_l );//键盘最后组合码值
}
}
return( 0xff ); //返回该值
}
首先把P3的口赋值为0x0f,同时把P3和0x0f赋值给cord_h(行的数值),倘若有按键按下,那么P3的值就会改变,随后cord_h的只也会随之变化,经过消抖之后记录cord_h的值,
即cord_h = P3 & 0x0f;
(若以S16为例,那么P3.3的值变为0,所以cord_h的值就会变为0x07;)
接下来:P3 = cord_h | 0xf0;
意在不改变P3的第四位,把P3的高四位赋为高电平,那么P3=0x0f7;
到了关键的一步:
cord_l = P3 & 0xf0;我当初以为cord_l=0xf0呢,结果就和程序运行的不一样喽,最后还是问了我的同行(非常感谢刘伟同志!指点迷津!),其实在第二个if语言内,S16已经被按下了的,所以P3的值立刻就变为0x0e的了,以至于cord_l=0x0e,最后返回行和列的和return( cord_h + cord_l );(0xe7)。这才是最终对的结果,各位看官懂了吗?O(∩_∩)O哈哈~
史海拾趣
|
据外电报道,手机制造商摩托罗拉周一表示,公司将把其汽车电子业务部以10亿美元的价格出售给德国的一家轮胎公司大陆公司,这样摩托罗拉就可以更加专心致志地把重点放在发展通讯技术上。 这个拥有4500名员工的部门去 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 2006年,在消费类电子产品制造继续快速发展的带动下,中国MCU市场依旧保持了较好的发展势头,增长率继续维持在25%以上的高水平。从应用领域来看,一方面,消费电子产品仍是中国MCU市场需求的主 ...… 查看全部问答> |
|
模数转换后的8路二进制数用7段译码显示器输出电路---要硬件的 模数转换后的8路二进制数用7段译码显示器输出电路---要硬件的。。。。。。。。。。。。。。急急急,我作的毕业设计急用,哪位高手指点指点,发个图过来啊谢谢了… 查看全部问答> |
|
因为eewrold每个帖子指数限制是1万字,只能切开分几个帖子,顺便说下,这个字数限制实在是没理由。 LTIB (Linux Target Image Builder)是飞思卡尔公司开发的一个工具,用于简化嵌入式bsp开发的工具,基本上就是一些脚本加上预先制作成功交叉工 ...… 查看全部问答> |
|
我用数据线连接mobile的USB口和电脑的USB口。想用串口通信的方法,写程序让这两个设备通信,这样可行吗?用CreateFile函数,但我不知道具体到哪一个串口。一个一个的试过了也没有成功接收到数据。手机上面的那个USB口我怎么才能知道是哪个口呢?电 ...… 查看全部问答> |
|
知名公司招聘硬件产品工程师,要求有硬件电路设计经验,熟练使用各种电子测试设备。 如下jd,有意者可咨询alice Job Title Hardware PE (Shanghai) Roles and Responsibilities 1. This position will be to work as a member of ...… 查看全部问答> |




