这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】如何实现单片机用一个I/O采集多个按键信号--from嗷呜

共19条 1/2 1 2 跳转至

【转载】如何实现单片机用一个I/O采集多个按键信号--from嗷呜

工程师
2022-11-03 20:11:14     打赏

如何实现单片机用一个I/O采集多个按键信号

使用模数转换(ADC)的特点就可以实现单片机用一个I/O采集多个按键信号。

一、单片机的I/O口检测按键简说

我们知道,一般情况下单片机的一个I/O口作为普通I/O口的话,只能检测识别一个按键。

日常设计中,如果碰到按键数量较多的话,会采用行列式键盘,例如最常见的4X4矩阵键盘,这样可以实现用8个I/O口检测16个按键。

微信图片_20221103200917.jpg

还有就是键盘接口,典型的是我们计算机上用的键盘,其采用PS/2接口,现在一般计算机上用的是USB接口的键盘。

另外还有使用串口或者IIC、SPI接口的键盘芯片,这些使用常见的串口、IIC、SPI通信协议实现。

但是这些都一个以上的I/O口,不是真正的用多个按键。

微信图片_20221103200950.jpg

那么有没有更简单的办法,使用更少的I/O口资源检测更多的按键呢?

二、基于模数转换的AD键盘

我们知道按键检测实际上是检测连接按键的端口的高低电平值,在单个I/O口检测单个按键时,只是简单的判断连接按键的端口的电平是高电平(+5V)还是低电平(0V)。那么是否可以通过电平的微小变化来检测按键是否被按下呢?

下图为一个A/D键盘的原理图,从图中可以看出,当不同的按键被按下时,ADC端点处的电压不同,通过判断不同的电压值就可以判断出是那个按键被按下。

微信图片_20221103201019.jpg

对于具有AD转换功能的单片机来说,直接接到一个AD通道即可。对于没有AD转换功能的单片机,可采用一个AD转换模块。

对于这种按键,有以下缺点:

1、对于同一点处的电压值,A/D多次采样的结果不可能完全相同。

2)、电阻的误差。电阻值由于电阻的精度和环境温度的原因,误差较大,所以A/D键盘各个按键点的分压不准确。

3)、为尽量减少误差,可以采取增加电阻精度、增加温度补偿等方法,另外在软件处理时候要注意消除按键抖动等因素,还要对实际转换值和标准值给出误差补偿。

4)、如果按键按下,经过A/D转换,若实际转换值在允许误差范围之内(需要实际测量各点电压,并计算各点电压平均值),则认为按键按下,否则程序不响应。

5)、实际试验过程中,还要考虑电阻的累积误差,选用精度越高的电阻,可分辨的按键数目越多。


转载自网络,如有侵权,联系删除。



专家
2022-11-03 23:41:54     打赏
2楼
写的好,学习和参考

高工
2022-11-04 00:34:50     打赏
3楼

谢谢分享


专家
2022-11-04 01:35:21     打赏
4楼

感谢楼主的分享,很实用了。


高工
2022-11-04 04:34:35     打赏
5楼

感谢楼主的分享,很实用了。


专家
2022-11-04 07:07:42     打赏
6楼

非常感谢您的分享


专家
2022-11-04 08:24:46     打赏
7楼

学习了


院士
2022-11-04 08:26:48     打赏
8楼

感谢分享


专家
2022-11-04 08:43:56     打赏
9楼

谢谢分享


院士
2022-11-04 08:44:48     打赏
10楼

学习学习


共19条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]