71-72-73 - 键盘驱动程序设计

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)深入浅出操作系统 - 目录

1. 问题一

  • 计算机已经接入了键盘,为啥按键没反应?

1.1 键盘的本质

键盘是一种计算机外部设备
键盘与计算机的通信(数据交互)需要借助 中断 完成

在这里插入图片描述

1.2 键盘驱动步骤

  1. 使能主8259A引脚 IRQ1(启用键盘中断)
  2. 编写中断服务程序,并注册到中断向量表( 0x21号中断

在这里插入图片描述

1.3 编程实验:键盘中断

【参看链接】:71-72-73 - 键盘驱动程序设计 / 71 / 00一次键盘输入

在这里插入图片描述

2. 问题二

  • 为什么键盘中断只能发生一次?如何获取键盘按键的值?

2.1 键盘工作原理简介

在这里插入图片描述

2.2 键盘扫描码(键位信息)

  • 处理器接收到键盘中断后,从0x60端口读取键盘扫描码
  • 扫描码 指的是硬件电路对键位的编码
    • Make Code:按下键时产生的扫描码
    • Break Code:释放键时产生的扫描码
    • Break Code = Make Code + 0x80

2.3 小贴士

  • C语言中的函数是怎么返回值的?
  • 通过AX寄存器返回

在这里插入图片描述
注:
在这里插入图片描述

2.4 端口数据读取

在这里插入图片描述

注释:in al, 21H ;表示从21H端口读取一字节数据到al

2.5 编程实验:读取键盘扫描码

【参看链接】:71-72-73 - 键盘驱动程序设计 / 71 / 01读取键盘扫描码

在这里插入图片描述

2.6 思考

  • 键盘扫描码可以直接使用吗?扫描码代表键位上的字符吗?
  • 扫描码不是字符编码

2.7 常用编码区别

  • 扫描码 Scan Code
    与键盘厂商相关,不同厂商的扫描码可能不同
  • 虚拟键码 Key Code
    键盘按键统一标准码(键盘厂商无关)
  • ASCII码
    常用字符的统一编码(键盘按键无关)

3. 键盘驱动设计

  1. 建立扫描码,虚拟键码,ASCII码之间的映射
  2. 解析扫描码,处理常用组合键(Shift,Capslock,等)
  3. 用4字节表示:键盘操作结果:动作 | 扫描码 | 虚拟键码 | ASCII
    • 键盘输入a字符:
      • 按下:0x 01_1E_41_61( 动作|扫描码|虚拟键码|ASCII
      • 释放:0x001E4161
    • 键盘输入A字符:
      • 按下:0x011E4141
      • 释放:0x001E4141

3.1 键盘驱动主要功能

  • 处理主键盘按键
    字符按键,功能按键,Shift,CapsLock
  • 处理数字键盘按键
    字符按键,Shift,NumLock
  • 处理特殊字符
    Pause Break

3.2 深入键盘扫描码

  • 普通按键:1字节(按键扫描码)
  • E0扩展按键:2字节(0xE0 + 按键扫描码)
  • E1扩展按键:6字节(Break Pause)
  • E2扩展按键:……

3.3 关键体力活:建立映射表

在这里插入图片描述

3.4 键盘驱动关键逻辑

在这里插入图片描述

  • 常规键盘中存在Shift,CapsLock,NumLock与其它键的组合操作;因此处理逻辑中,首次判断这几个特殊键是否同时被按下。

在这里插入图片描述

  • 编程实验

【参看链接】:71-72-73 - 键盘驱动程序设计 / 72

在这里插入图片描述

3.5 思考

  • 如何判断按键是否属于数字小键盘?数字小键盘上的按键有什么特殊之处?

3.6 数字小键盘键位判断

  • 因为数字小键盘上的键位功能并不唯一,有可能带 0xE0 前缀,所以需要配合 完整扫描码 进行判断。

在这里插入图片描述

3.6.1 编码前的考虑

Shift键:同一个键位可能表示不同功能
CapsLock键:默认字母大小写控制
NumLock键:小数字键盘启动控制

  • 当前按键的编码必须结合Shift,CapsLock和NumLock按键的状态来计算

3.6.2 数字小键盘的特殊之处

默认情况下NumLock处于关闭状态
默认情况下按键不代表数字字符,代表特殊功能
NumLock打开后,可使用Shift控制键位的意义

  • 专用映射表:

在这里插入图片描述

3.6.3 数字键盘键位编码

在这里插入图片描述

3.7 普通键位编码

在这里插入图片描述

3.8 编程实验:键盘键位编码

【参看链接】:71-72-73 - 键盘驱动程序设计 / 73

在这里插入图片描述

3.9 思考

  • 内核对按键事件进行编码后,如何处理?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值