


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机系统中 PS/2 键盘驱动程序设计摘 要分析 PS/2 协议;介绍 PS/2 标准健盘的其次套扫描码和命令集,并给出在单片机系统中支持PS/2 健盘的硬件连接方式和利用Keil C51 语言实现的驱动程序设计及局部代码。该驱动程序可以便利地移植到其他单片机或嵌入式系统中。关健词 PS/2 协议 PS/2 健盘 单片机 驱动程序在单片机系统中,经常使用的键盘都是专用键盘。这类键盘都是单独设计制作的, 本钱高,连线多,且牢靠性不高。这些问题在那些要求键盘按键较多的应用系统中显得更加突出。与此相比,在 PC 系统中广泛使用的 PS/2 键盘具有价格低、通用牢靠,且使用的连线少(仅使用 2 根信
2、号线)的特点,并可满足多数系统的要求。因此,在单片机系统中应用 PS/2 键盘是一种很好的选择。本文在分析 PS/2 协议和 PS/2 键盘工作原理与特点的根底上,给出在 AT89C51单片机上实现对 PS/2 键盘支持的硬件连接方法以及驱动程序的设计实现。PS/2 协议现在 PC 机广泛承受的 PS/2 接口为 mini - DIN 6 引脚的连接器。其引脚如图 1所示。740)this.width=740“border=undefinedPS/2 设备有主从之分,主设备承受 female 插座,从设备承受 male 插座。现在广泛使用的 PS/2 键盘鼠标均工作在从设备方式下。PS/2 接
3、口的时钟与数据线都是集电极开路构造的,必需外接上拉电阻。一般上拉电阻设置在主设备中。主从设备之间数据通信承受双向同步串行方式传输,时钟信号由从设备产生。从设备到主设备的通信当从设备向主设备发送数据时,首先会检查时钟线,以确认时钟线是否是高电平。假设是高电平,从设备就可以开头传输数据;否则,从设备要等待获得总线的把握权,才能开头传输数据。传输的每一帧由 11 位组成,发送时序及每一位的含义如图 2 所示。740)this.width=740“border=undefined每一帧数据中开头位总是为 0,数据校验承受奇校验方式,停顿位始终为 1。从设备到主设备通信时,从设备总是在时钟线为高时转变数
4、据线状态,主设备在时钟下降沿读人数据线状态。主设备到从设备的通信主设备与从设备进展通信时,主设备首先会把时钟线和数据线设置为“恳求发送”状态。具体方式为:首先下拉时钟线至少 100 us 来抑制通信,然后下拉数据线“恳求发送”,最终释放时钟线。在此过程中,从设备在不超过 10us 的间隔内就要检查这个状态。当设备检测到这个状态时,将开头产生时钟信号。此时数据传输的每一帧由 12 位构成,其时序和每一位含义如图 3 所示。740)this.width=740“border=undefined与从设备到主设备通信相比,其每帧数据多了一个 ACK 位。这是从设备应答接收到的字节的应答位,由从设备通过
5、拉低数据线产生,应答位 ACK 总是为。主设备到从设备通信过程中, 主设备总是在时钟为低电寻常转变数据线的状态,从设备在时钟的上升沿读入数据线状态。PS/2 键盘的编码与命令集PS/2 扭盘的编码现在 PC 机使用的 PS/2 键盘都默认承受其次套扫描码集。该扫描码集可参考文献1。扫描码有两种不同的类型:通码(make code)和断码(break code)。当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机。依据键盘按键扫描码的不同,在此可将按键分为如下几类:第一类按键,通码为 1 字节,断码为 OxFO+通码形式。如 A 键,其通码
6、为 Ox1C,断码为 OxFO Ox1C, 其次类按键,通码为 2 字节 0 xEO + 0 xXX 形式,断码为OxEO+OxFO+OxXX 形式。如 right ctrl 键,其通码为 OxEO 0 x14,断码为 OxEO OxFO 0 x14, 第三类特别按键有两个,print screen 键通码为 OxEO 0 x12 OxEO Ox7C, 断码为 OxEO OxFO Ox7C OxEO OxFO 0 x12; pause 键通码为 Ox El 0 x14 0 x77 OxEl OxFO 0 x14 OxFO 0 x77,断码为空。组合按键的扫描码发送依据按键发生的次序,如以下面挨
7、次按左 SHIFT+A 键:1 按下左 SHIFT 键,2 按下 A键,3 释放 A 键,4 释放左 SHIFT 键,那么计算机上接收到的一串数据为 0 x12 Ox1C OxFO Ox1C OxFO 0 x12, 在驱动程序设计中,就是依据这样的分类来对不同的按键进展不同处理的。PS/2 键盘的命令集主机可以通过向 PS/2 键盘发送命令来对键盘进展设置或者获得键盘的状态等操作。每发送一个字节,主机都会从键盘获得一个应答 0 xFA“重发 resend“和“回应 echo”,命令例外)。下面简要介绍驱动程序在键盘初始化过程中所用的指令(具体键盘命令集见参考文献1): OxED 主机在本命令后
8、跟随发送一个参数字节,用于指示键盘上 num lock, caps lock, scroll lock led 的状态; OxF3 主机在这条命令后跟随发送一个字节参数来定义键盘机打的速率和延时; OxF4 用于在当主机发送 OxF5 制止键盘后,重使能键盘。PS/2 键盘与单片机的连接电路PS/2 键盘与 AT89C51 单片机的连接方式如图 4 所示。Pi. 0 接 PS/2 数据线,P3.2 (INTO)接 PS/2 时钟线。由于单片机的 P1,P3 口内部是带上拉电阻的,所以 PS/2 的时钟线和数据线可以直接与单片机的 P1,P3 相连接。740)this.width=740“bor
9、der=undefined4 驱动程序设计驱动程序使用 Keil C51 语言,Keil uVision2 编程环境。PS/2 104 键盘驱动程序的主要任务,是实现单片机与键盘间 PS/2 通信,以及将接收到的按键扫描码转换为该按键的键值 KeyVal,供给应系统上层软件使用。单片机与健盘间 PS/2 通信的程序设计在 PS/2 通信过程中,主设备(单片机)是在时钟信号为低时发送和接收数据信号的。由于单片机到键盘发送的是指令,需要键盘回应,所以这局部程序承受查询方式;而单片机接收键盘数据时,数据线上的信号在时钟为低时已经稳定,所以这局部程序承受中断方式,且不需要在程序中加人延时程序。健盘扫描
10、码转换程序设计由于键盘扫描码无规律可循,因此由键盘扫描码获得相应按键的键值(字符键为其 ASCII 值,把握键如 Fl,CTRL 等为自定义值),只能通过查表的方式。由于按键的三种类型及局部按键对应着两个键值(如 A 键的键值依据 CAPS 和 SHIFT 键状态有 0 x41 (A)和 Ox61(a)两种),因此综合考虑查表转换速度和资源消耗,设计中使用 4 个键盘表:键盘扫描码转换根本集和切换集kb-plain_map NR_ KEYS与 kb- shift- map NR_ KEYS;包含 EO 前缀的键盘扫描码转换根本集和切换集 kbe0_plain_mapN 又 KEYS与 kbe0
11、_ shift-map NR_ KEYS。PS/2 104 键盘按键扫描码最大值为 0 x83,所以设置 NR_ KEYS 为132。全部四个键盘表的定义均为如下形式:KB_ MAP MAKE CODE = KEYVAL,假设扫描码对应的按键为空,如 KB_MAP0 x00,则定义相应键值为 NULL-KEY(0 x00)。以下是键盘扫描码根本集的局部代码实例: kb_plain_mapNIZKEYS =NULL- KEY; Ox2C; Ox6B; 0 x69;Ox6F;Ox3O;0 x39;NULL_KEY;/扫描码 Ox4O-Ox47刀对应按键 空,逗号,K,I,0,0,9,空/对应键值
12、0 x00,”k”,”i”,”o”,”0”,”9”,0 x00;如此设计键盘转换表的另一个好处在于,以后如需扩展支持有 ACPI, Windows 多媒体按键键盘时,只需要将键表中相应处修改即可。如 ACPI power 按键通码为 OxEO 0 x37,修改 kbeO _ plain- map 0 x37 = KB _ACPI_PWR 即可。特别按键 PAUSE 使用单独程序处理,假设接收到 OxEl 就转入这段程序;而 print screen 键则将其看作是两个通码分别为 OxEO 0 x12 和 OxEO Ox7C 的“虚键,的组合键来处理。在驱动程序中声明如下全局变量:led-sta
13、tus 其 bit0 一 scroll lock led 关 0、开 1; bitl 一 num lock led 关为。,开为 1; bit2 一 caps lock led 关为 0, 开为 1; bit3-bit?总是。;agcs_status 记录左右 shift ctrl gui alt 状态,bit0 一左 shift 键,bitl 一左。trl 键,bit2 一左 gui 键, bit3 一左 alt 键,bit4- 右 shift 键,bit5 一右 ctrl 键,bit6 一右 gui 键,bit7 一右 alt 键,相应键按下则对应位为 I,释放为。EO_FLAG 接到Ox
14、EO 置 1; El FLAG 接收到 OxEl 置 1; FO-FLAG 接收到 OxFO 置 1。按键键值通过Keyval 供给应上层使用。PS/2 键盘扫描码键值转换程序 ps2_codetrans流程如图 5 所示。第一类按键的扫描码键值转换程序代码:if (FO-FLAG) t/接收扫描码为断码switch (mcu_revchar)/处理把握键case 0 x11:agcs_status& = OxF7;break;/左 alt 释放case 0 x12:agcs_status & =0 xFE; break; /左 shift 释放case 0 x14:agcs_status&=
15、OxFD; break;/左 ctrl 释放case 0 x58:if (1e 走 status&0 x04)le 走 status&二 0 x03; /caps lock 键else led_statusl =0 x04; ps2_ledchange;break;case 0 x59; agcs_status&二 OxEF;break;/右 shift 释放case 0 x77:if (led status&0 x02 )led_status& = 0 x05; /num lock 键else led_status =0 x02; ps2_ledchange;break;case Ox7E;
16、 if(led_status&0 x01) led_status&=0 x06; /scroll lock 键else led_statusI =0 x01; ps2_ledchange;break;default; break;FO-FLAG = 0;lse /接收扫描码为通码if (1e 走 status 衣 0 x04) caps flag=1;else caps-flag 二 0; if (led-status & 0 x02) num_flag=1;else num-flag 二 0;if (scga_status&0 x11) shift flag=1;else shift fla
17、g=0;刀扫描码键值转换if(capsflag=shift-flag)1(!num_flag) KeyVal=b_plain_mapmciLrevchar;else KeyVal 二 kb-shift mapmcu_revcha;switch (mcu-revchar) /处理把握键或状态键case 0 x11: agcs_statusl 二 0 x08;/左 alt 按下case 0 x12: ages-status二 0 x01;/左 shift 按下case 0 x14: ages-status二 0 x02;/左 ctrl 按下case 0 x59:agcs_status二 0 x10
18、;/右 shift 按下default: break;740)this.width=740“ border=undefined其次类按键的扫描码键值转换程序与上相像。要留意的是在退出该程序段时对EO- FLAG 和 FO_FLAG 标志的清 0。PAUSE 键的处理程序:假设接收到 OxEl,置 El-FLAG= 1,然后顺次将后续接收到的 7 个字节数据和PAUSE 的通码后 7 个字节比较,全都则返回 KeyVal =KB PAUSE。在比较完全部 7 个字节后去除 El_ FLAG 标志。键盘初始化程序 kb_init流程: 上电后,接收键盘上电自检通过信号 0 xAA,或者自检出错信号
19、 OxFC。单片机接收为 OxAA,进人下一步,否则,进展出错处理。 关 LED 指示,单片机发送 OxED,然后接收键盘回应 0 xFA,接着发送 0 x00接收 O xFA, 设置机打延时和速率。单片机发送 0 xF3,接收 0 xFA,发送 OxOO(250ms,2. Ocps),接收 OxFA, 检查 LED,发送 0 xED,接收 0 xFA,发送 0 x07 开全部 LED),接收 OxFA。发送 0 xED,接收 0 xFA,发送 0 x00(关 LED),接收 OxFA,允许键盘发送 OxF4,接收 0 xFA,键盘 LED 转变 ps2_ledchange函数流程:发送 0 xED 接收 0 xF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新建年产六氟磷酸锂30000吨项目可行性研究报告写作模板-备案审批
- 倒置万能材料显微镜项目投资可行性研究分析报告(2024-2030版)
- 中国MOCV未来发展趋势分析及投资规划建议研究报告
- 2025年中国水分活度表行业市场发展前景及发展趋势与投资战略研究报告
- 2021-2026年中国自行式铲运机市场深度分析及投资战略咨询报告
- 中国微波炉电商行业市场供需预测及投资战略研究咨询报告
- 2025年中国沐浴布行业市场发展前景及发展趋势与投资战略研究报告
- 中国汽车门开度限位器市场运行态势及行业发展前景预测报告
- 燃气具成套项目投资可行性研究分析报告(2024-2030版)
- 立体微粉抛光砖项目投资可行性研究分析报告(2024-2030版)
- 《0~3岁婴幼儿语言发展与教育》课件03不同阶段婴幼儿的语言发展特点
- 一站到底课件
- 《基础护理学》给药课件
- 代牧牛羊合同模板
- 绘本故事三只小猪盖房子课件
- 《WPS办公应用职业技能等级》课件-1. WPS初级-文字
- 感术行动专项考核试题及答案
- 抗日战争与中国的文化自觉
- 江苏省淮安市2023-2024学年八年级下学期期末数学试卷(含答案详解)
- 国家开放大学本科《商务英语4》一平台机考真题及答案(第二套)
- 玻璃窑炉维修与保养考核试卷
评论
0/150
提交评论