news 2026/6/11 20:40:08

8088单板机监控程序解读(六)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
8088单板机监控程序解读(六)

8088kit用户手册资源-CSDN下载

监控程序显示按键扫描程序是8列6行 KEYTAB是37个按键,是否一致?

结论是:不完全一致,但这是由具体硬件设计和软件效率共同决定的合理取舍。

简单来说,KEYTAB中的 37 个表项(扫描码 0-36)定义了一组逻辑键值。而按键扫描程序通过8列 x 6行的矩阵扫描,产生了一个最大 48 个的物理位置空间。37 个逻辑键被“放置”在这 48 个物理位置中的 37 个上,其余位置为空。

下面进行详细分析。

1. 核心矛盾:48个物理位置 vs 37个逻辑键值

  • 扫描程序产生物理位置8列 × 6行 = 48个唯一的位置编码。程序只负责检测“哪个位置的按键被按下了”,并返回一个 0-47 之间的数字,这个数字我们称之为物理扫描码

  • KEYTAB定义逻辑功能KEYTAB表有 37 个表项,索引从 0 到 36。它将前 37 个物理扫描码(0-36)映射为具体的功能码(如0AH代表数字键 A,10H代表功能键 IP)。物理扫描码 37-47 在表中没有对应项

这种“物理扫描码多,逻辑键值少”的现象,在电子设计中非常普遍。设计者会为一个最大支持 48 键的矩阵预留资源,但根据实际产品需求,只安装其中的 37 个按键。

2. 物理矩阵分析:8列 x 6行的证据

软件扫描逻辑证实了这是一个8列 x 6行的矩阵。

  • 外层循环 (8列)MOV CL, 8DEC CL以及JNZ KCOL构成了一个明确的 8 次循环。ROL BH, 1指令将列扫描位掩码从00000001B逐次左移,遍历00000010B,00000100B... 直到10000000B,正好对应 PC0 到 PC7 八根列线。

  • 内层循环 (6行)MOV CH, 6将内层循环计数器设为 6,表明对每一列,程序会检查 6 行。IN AL, DX读取的行状态寄存器PORT0的低 6 位(D0-D5)对应了行线状态。

所以,SCAN1函数返回的AH寄存器值(我们称之为物理扫描码)的计算方式如下:
物理扫描码 = 当前列号 × 6 + 当前行号

由于列号范围是 0-7,行号范围是 0-5,因此物理扫描码的范围是0 到 (7×6 + 5) = 47

3. 逻辑映射分析:37个按键的真相

KEYTAB表有 37 个表项,但并不意味着只有 37 个按键。KEYTAB负责将物理扫描码转换为逻辑内部码。

  • 映射逻辑KEYTAB是一个数组,物理扫描码n直接作为索引,对应的逻辑内部码就是KEYTAB[n]

  • 占用情况

    • 有效按键KEYTAB[0]KEYTAB[35]都定义了非0xFF的值,表示 36 个有效按键。

    • 特殊功能KEYTAB[36]被定义为0x40,这个值被系统用作“检测到串口数据”的特殊标志,并非一个物理按键。

    • 保留位置KEYTAB[4]KEYTAB[5]的值为0xFF,表示在物理扫描码 4 和 5 的位置上没有安装按键,或者是被禁用的预留位置。

    • 未使用区域:物理扫描码37-47对应的 11 个位置,在KEYTAB中没有定义。这进一步说明,这些物理位置在硬件上没有被使用。

4. 不一致背后的设计原因

  1. 硬件预留:设计一块支持 48 键的通用键盘电路板,成本几乎相同。但可以根据产品定位,选择只安装 37 个按键(如 32个数字/功能键 + 几个特殊键),这是一种经济高效的设计策略。

  2. 简化软件:对软件而言,无论硬件装了 37 个还是 48 个按键,扫描8x6矩阵的逻辑是固定且最优的。通过一个统一的查询表KEYTAB,软件可以优雅地处理“空洞”(未安装按键的位置,返回0xFF即可忽略)。

  3. 效率至上:使用列号 × 6 + 行号生成连续的物理扫描码,再通过KEYTAB直接查表,是 8088 这种简单 CPU 上能实现的最快、最高效的按键处理算法。

总结

  • 扫描程序 (8x6):定义了硬件键盘矩阵的物理能力,可以识别 48 个不同的按键位置。

  • KEYTAB(37项):定义了当前产品上实际安装的 36 个物理按键 + 1 个特殊功能的逻辑功能

  • 一致性体现在:软件通过KEYTAB表,完美地将 37 个逻辑键值,映射到了 48 个物理位置中的 37 个位置上。对于没有映射的物理位置,KEYTAB中虽然没有项,但程序逻辑会通过范围判断将其忽略,确保了系统的稳定。

所以,48个物理位置与37个逻辑键值并不矛盾,它们是硬件能力和产品定义之间的一种平衡。这是一个非常经典且高效的嵌入式按键处理方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 20:40:07

PowerToys中文版:让Windows效率飞升的终极本地化工具箱

PowerToys中文版:让Windows效率飞升的终极本地化工具箱 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾经面对满屏的英文软件界面感到…

作者头像 李华
网站建设 2026/6/11 20:38:53

实战指南:如何高效使用Python通达信数据接口进行专业金融分析

实战指南:如何高效使用Python通达信数据接口进行专业金融分析 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据获取领域,Python通达信数据接口MOOTDX为量化交易者…

作者头像 李华
网站建设 2026/6/11 20:38:53

BUCK 纹波 100mV 正常吗?别只怪电感,看看续流二极管与布局

摘要:BUCK 电路纹波 100mV,换了大电感纹波依旧?不是电感选型问题,而是 续流二极管(或同步整流 MOSFET)的寄生参数​ 与 高频电流环路布局​ 在作祟。本文解析开关电源纹波的真正来源。一、问题描述&#xf…

作者头像 李华
网站建设 2026/6/11 20:35:53

实验室操作防护规范检测数据集VOC+YOLO格式7122张12类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):7122标注数量(xml文件个数):7122标注数量(txt文件个数):7122标注类别…

作者头像 李华
网站建设 2026/6/11 20:34:06

imx6ull开发板,Buildroot 无线网卡 rtl8188eu

一、 Buildroot 勾选的安装清单:1. wireless tools2. libssl.so.1.1 ( wpa_supplicant v2.7 工具 依赖 libssl.so.1.1 )Buildroot 安装 wireless tools:Target packages -> wireless toolsBuildroot 安装 libssl.so.1.1Target…

作者头像 李华
网站建设 2026/6/11 20:31:51

如何快速上手暗黑破坏神2存档编辑器:新手必备的完整操作指南

如何快速上手暗黑破坏神2存档编辑器:新手必备的完整操作指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2存档编辑器(d2s-editor)是一款基于Vue.js构建的免费开源工具&#xff…

作者头像 李华