当前位置: 首页 > news >正文

基于单片机技术的按键扫描电路分析

摘 要: 单片机应用技术被广泛应用于各种智能控制系统中,是电子信息类专业学生必修的一门专业课。在单片机端口信息输入模块中,按键是主要元器件之一,笔者主要介绍矩阵键盘的电路设计及控制程序编写,分析了单片机端口连接按键的电路形式以及一个并行 IO 端口控制矩阵键盘的算法程序。所分析的软硬件系统,可用于学生自学参考资料,有助于学生进一步理解与学习。
关键词: 单片机;矩阵电路;程序
单片机应用技术是高职院校电子信息类专业课程之一。单片机是把 CPU 、存储器、中断系统、输入输出接口电路等集成在一块硅片上的微型计算机,有 4 位、 8 位、 16 位等。在工业控制领域广泛应用,如机器人应用、校园门禁系统、空调面板控制等。本文主要分析 STC89C51 单片机,它是一款 8 位单片机处理芯片,单片机端口按键电路设计,一般有独立按键、矩阵键盘,独立按键应用于按键数量较少的系统,矩阵键盘应用于按键数量较多的系统,如计算器应用电路。下面主要分析矩阵按键硬件电路及软件算法。

1 矩阵按键电路设计

按键是电子电路实验常用元器件之一,种类较多,应用于单片机外围接口复位电路、外部中断信号输入电路等。能仿真的集成开发平台中大部分都含有按键。单片机系统常用Proteus 仿真软件设计硬件电路,共 16 个按键,采用 4 4列模式,按键一端共行,另外一端共列,使用单片机 P3 端口连接行和列,低四位控制行,高四位控制列 。每个按键可代表任意需要显示的字符。具体电路如图 1 所示。
为显示按键值,本系统采用 LCD1602 液晶显示屏作为显示器件。LCD1602 为字符型液晶屏,共 2 行,每行可显示16 个字符 。控制端口连接单片机 P2^0 P2^1 P2^2 三个引脚,数据端 D0 D7 连接单片机 P1 端口,由于是仿真电路 LCD1602 电源端电路省略。具体电路如图 2 所示。

2 矩阵按键电路驱动程序分析

矩阵按键扫描算法较多,本文介绍其中的一种。单片 机 启 动 后 主 程 序 工 作 流 程: 首 先 初 始 化 LCD1602 ,然 后 调 用 按 键 扫 描 子 函 数, 如 有 按 键 按 下 进 行 显示 。按键值可以初始化为二维数组 a[4][4]={{ 1 ’, 4 , 7 , # },{ 2 , 5 , 8 , 0 } , {‘ 3 , 6 , 9 , * },{ A , B , C , D }} 。按键扫描子函数,首先假设 P3=0XF0 ,即高四位等于 1 ,低四位等于 0 ,经查看电路,可验证, 147# 任意一个按键按下,P3^4 将会变为低电平; 2580 任何一个按键按下, P3^5 会变为低电平;369* 任意一个按键按下, P3^6 将会变为低电平;ABCD 任意一个按键按下, P3^7 将会变为低电平。因此,当 P3=0XF0,只要有按键按下,读取 P3 端口值,就能确定是哪一行。同理,假设 P3=0X0F ,按照上述算法,能够确定列值。
按键扫描函数如下:
keyscan()
{ unsigned char h,l,key;
if(P3!=0x0f)
{
switch(P3&0x0f)
{
case 0x0e:l=0;break;
case 0x0d:l=1;break;
case 0x0b:l=2;break;
case 7:l=3;break;
}
P3=0xf0;
switch(P3&0xf0)
{
case 0xe0:h=0;break;
case 0xd0:h=1;break;
case 0xb0:h=2;break;
case 0x70:h=3;break;
}
key=a [h][l];
}
else
key=0;
return (key);
}
运行显示界面如图 3 所示。

3 结 语

近年来,仿真技术发展快速,在专业模拟教学、实践教学中应用广泛,推动了教育教学改革。本文采用 51 单片机分析了按键扫描电路,利用硬件仿真平台设计了矩阵按键电路,分析了其设计原理及程序算法,有助于帮助学生自主学习单片机 IO 端口的应用方法,提高自身编程能力。

相关文章:

  • 缠中说禅李彪08年“假死”具体原因探讨
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • centos7安装mqtt服务端
  • vue中数组出现__ob__: Observer属性,导致不能正确使用问题解决
  • 一个人的开发团队:前后端与调动AI
  • 怎样才能更好地保护个人账号的安全
  • Linux库概念及相关编程(动态库-静态库)
  • Kafka-服务端-网络层-源码流程
  • Flink ProcessFunction不同流异同及应用场景
  • SeekBar设置自定义thumb图片的时候显示不全问题
  • 马斯克宣布xAI将在8月份推出Grok-2大模型 预计年底推出Grok-3
  • Spring Boot 创建定时任务
  • 带安全启动—Ubuntu系统—手动安装Nvidia驱动
  • 三菱PLC 6行程序实现8电机顺序启动逆序停止
  • 亚信安全:《2024云安全技术发展白皮书》
  • nodejs实现webservice问题总结
  • REST架构的思考
  • socket.io+express实现聊天室的思考(三)
  • SOFAMosn配置模型
  • Vue.js源码(2):初探List Rendering
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 入门到放弃node系列之Hello Word篇
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信小程序实战练习(仿五洲到家微信版)
  • Java性能优化之JVM GC(垃圾回收机制)
  • 选择阿里云数据库HBase版十大理由
  • # Java NIO(一)FileChannel
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (转载)OpenStack Hacker养成指南
  • .Net CF下精确的计时器
  • .net core 控制台应用程序读取配置文件app.config
  • .net framework4与其client profile版本的区别
  • .NET 使用 XPath 来读写 XML 文件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET企业级应用架构设计系列之结尾篇
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET运行机制
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @Documented注解的作用
  • @RequestMapping处理请求异常
  • [14]内置对象
  • [20170713] 无法访问SQL Server
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [ajaxupload] - 上传文件同时附件参数值
  • [BUUCTF 2018]Online Tool(特详解)
  • [C++] vector list 等容器的迭代器失效问题
  • [C++参考]拷贝构造函数的参数必须是引用类型