一般按键信号都是高低电平,对于每一个按键信号单片机都需要一个IO口进行采集,这种按键采集方式比较简单,但是占用的单片机IO口比较多。

如果按键非常多,例如键盘,可以采用行列阵列方式进行信号采集。这种方式仅需要少量IO口即可采集大量的按键信号。例如7个IO口可以最多采集3*4=12个按键信号。

但是这种采集方式的编程比较复杂,再加上按键防抖等考虑因素,程序更加复杂,初学者不容易掌握。

本文给大家分享一种按键信号的采集方法,可以用一个IO口采集多个按键信号,不仅电路简单,而且编程比较容易实现。

该方法只用一个IO可以采集多个按键,用的是IO口的AD功能。当不同的按键按下时,单片机AD口采集到的电压值不一样,于是就能区分出来是哪个按键按下了。即使是两个按键同时按下,也能根据电阻并联之后的电阻值算出输入到单片机的电压值,依据这个电压值也能识别出是哪两个按键按下。是不是很简单呢?

理论上这种方法用一个IO口可以采集几十几百个按键,但是考虑到电阻值的误差、上拉电源电压的误差、单片机AD采样的误差,在实际应用时,一个IO口采集的按键信号数量一般不会超过10个。

使用这个方法必须注意:

(1) 必须用恒定已知的上拉电源,例如板内的稳压5V。

(2) 如果按键比较多,电路中所用电阻建议用1%高精度电阻。

(3) 编程识别按键值时要用AD值区间范围来判定具体哪个按键按下了,不要用固定的AD值判定,原因就是前述提到的各种误差。

(4) 如果单片机的IO口足够多,仍然建议用前述简单的一个IO采集一个按键的方式。

对于这个按键采集方法,大家有什么想法没?欢迎大家留言,指教。

按键防抖_单片机用一个IO口采集多个按键信号相关推荐

  1. 一个IO口控制多个按键方法

    使用注意:   ADC测到的电压值只是大约的范围,例如假如上面K1算得1.0V,那么实际可能是在0.9V-1.1V之间波动:   电路中的电阻应合理计算,使各按键对应的电压值均匀分布在 0-DVCC之 ...

  2. 74HC245_键盘与8段数码管共有一个IO口_控制步进电机【Protues】

    完成功能: 数码管显示 '键盘输入角度-实际运动角度-运动状态-速度等级'初始显示 "Ent Act P 3" 键盘控制 步进电机 左转 右转 暂停 加减速 键盘输入0~9 ENT ...

  3. 单片机的单个IO口可以发送数据吗_关于51单片机各个引脚它的功能你了解多少?...

    对于40引脚双列直插51单片机各个引脚功能情况分析. P0端口一默认是开漏准双向IO口,没有输出没有驱动能力,要做逻辑输出要在外部接上拉电阻. P0端口除了作为普通的输入输出功能,还可以用来当做数据总 ...

  4. 单片机一个IO口如何控制两个发光二极管LED

    单片机工程师在面试的过程中,经常会碰到一些相同的问题,笔者总结了十个提问率较高的问题,供大家参考.现在我们来分析单片机工程师常遇面试问题之一:一个单片机IO口如何控制两颗LED? 将两颗LED命名为D ...

  5. 一个普通IO口检测两个按键的方法

    一个普通IO口检测两个按键的方法 (图一) (图二) 1 如图一所示: 当MCU供电为5V时候: IO口低电平电压范围:0-1.5V: IO口高电平电压范围:3.5-5.0V: 使用注意事项: 1.所 ...

  6. 5个IO口实现25个按键的扫描,他做到了!堪称一绝!

    排版整理:晓宇 转自:芯片之家 在做项目(工程)的时候,我们经常要用到比较多的按键,而且IO资源紧张,于是我们就想方设法地在别的模块中节省IO口,好不容易挤出一两个IO口,却发现仍然不够用,实在没办法 ...

  7. 单片机两个IO口控制三个LED灯

    在项目中经常会遇到单片机IO口资源不够用的情况,那么如何让单片机的IO口利用最大化呢,这里分享一下用单片机两个IO口控制三个LED灯的几种方法. 方法一:      S1和S2分别接单片机两个IO口, ...

  8. 51单片机8255扩展c语言,51单片机8255A扩展IO口

    <51单片机8255A扩展IO口>由会员分享,可在线阅读,更多相关<51单片机8255A扩展IO口(23页珍藏版)>请在人人文库网上搜索. 1.一个芯片可扩展多个并行I/O口 ...

  9. 5个IO口扫描25个按键的解决方法(转帖)

    转帖来源:http://www.ouravr.com/bbs/bbs_content_all.jsp?bbs_sn=854599 在做项目(工程)的时候,我们经常要用到比较多的按键,而且IO资源紧张, ...

最新文章

  1. kafka环境安装及简单使用(单机版)
  2. 重磅 | 一场你从未见过的数据中心盛会
  3. Flutter 实例 - 加载更多的ListView
  4. 点评互联网创业的“南派”和“北派”
  5. SQL 必知必会·笔记3过滤数据
  6. 这一次,苹果、Google、微软选择了统一战线!
  7. SU插件情报局 | 坯子助手工具详解
  8. 四合一小说漫画听书视频网站源码 带采集
  9. 字体设计 css_设计好CSS字体堆栈的三个步骤
  10. python抓取网站数据并图形化显示(二)
  11. 在linux上通过yum安装JDK
  12. 毕业几年LINUX 驱动研发工作心得分享
  13. java具名参数_Spring jdbc具名参数使用方法详解
  14. 科普文章-另一个视角解读计算机编码 修订版
  15. 5G技术构成:透过eMBB、mMTC、uRLLC三大应用场景从通信技术根源出发
  16. Ubuntu关闭软件更新器开机提醒弹窗
  17. SCU 4437 Carries 想法题
  18. 丹麦公司发布MR显示器,酷似全息投影
  19. 186、项目超过255个摄像机怎么分配IP地址
  20. 基于DirectShow和FFmpeg的USB摄像头监控软件

热门文章

  1. 【安全漏洞】Struts2漏洞集合总结
  2. linux migrations病毒守付进程分析
  3. 设计模式C++实现(4)——单例模式
  4. 【Let‘s Encrypt】 too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limit
  5. Git push error: Unable to unlink old (Permission denied)
  6. 计算字符串的实际长度
  7. 先序序列为a、b、c、d的不同二叉树的个数是多少(卡特兰数)
  8. 1107 Social Clusters (30 分)【难度: 中 / 知识点: 并查集】
  9. C语言易错题集 第二部
  10. raise IOError('The file is not exist!')