数电实验之--PS2键盘接口控制器设计.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数电实验之--PS2键盘接口控制器设计

数字电路实验报告 ---------PS2键盘接口控制器设计 姓名:赵岩琨 班级:05101 学号:050024 班内序号:24 日期:200PS2键盘接口控制器设计实验任务设计一个PS/2键盘接口控制器。1、必做 按照PS/2键盘接口标准设计一个控制器,接收PS/2键盘发送的数据,用数码管显示接收到的键值(只显示0~9,a~z,部分不便用数码管显示的字符可自行设定显示方式,接收到其他键值则不显示)。选做:用8×8点阵做显示屏,显示所有按键的键值。二、实验所用仪器及元器件数字系统与逻辑设计实验开发板PS2键盘直流稳压电源硬件说明1、PS/2键盘PS/2键盘具有六脚mini-DIN连接器,如图1所示。其中只有四个脚有意义,分别是:CLOCK(时钟脚),DATA(数据脚),+5V(电源脚)和GROUD(电源地),其余两个脚为保留脚。键盘和开发板只要保证四个有意义的脚接正确就可以了。数据和时钟脚都是集电极开路的,所以它们通常保持高电平(逻辑1)并且很容易被拉到低电平(逻辑0),并且在接这两个管脚的设备必须有一个大的上拉电阻,虽然在本实验中不需要焊接硬件电路,但了解这一点还是有必要的。 图一 PS/2键盘的Mini-DIN连接器在具体的实验过程中,PS/2键盘通过CLOCK管脚来控制通信方向并且充当本次实验的一个时钟管脚,DATA管脚用来收发数据,本实验中主要使用它来发送数据,每按下一个键,DATA管脚发送一个数据帧,具体格式如表一所示1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇检验1个停止位总是逻辑11个应答位仅用再主机对设备的通讯中 表一 PS/2键盘扫描码DATA管脚传输的数据是指对特定的符号的编码,采用第二套扫描码集所规定的扫描码集编码。分为通码和断码,通码是指按键接通时所发出的8位编码,断码是指按键断开时发出的16位编码。如按下A,DATA管脚就发送“1C”8位编码,当松开A时,DATA管脚发送“F01C”16位编码。本实验为了降低难度只读取了通码的8个数据位,忽略了其他数据。2 数字系统与逻辑设计实验开发板本次实验主要使用了开发板的数码管部分和点阵显示部分,数码管在以前的实验中已经使用过许多次,基本功能都已掌握,这里不做过多说明。点阵显示模块点阵由8行8列一共64个发光二极管组成,如图2所示,对外一共有16个管脚,RW1~ROW8,COL1~COL8,分别控制8行8列,点阵一个点亮的条件是,该点所在的行为高电平,所在的列为低电平。由于采用点阵显示模块一次只能显示一行或者一列,所以要采用快速扫描方法扫描各行,利用人眼的视觉暂留现象顺利显示字母。三、硬件流程图按键按键数据处理SW1拨在高位数码管显示点阵显示四、软件流程及实现方法软件部分主要由三部分(四个进程)构成第一部分: 按键信息的获取,由于PS/2键盘由DATA管脚串行发送数据,但我们需要的是并行数据来进行数据处理,所以首先要进行串并转换获得我们需要的数据,具体实现代码如下: if(psclkevent and psclk=0) then if(psdat=0 and read_ctr=0)then read_ctr=1; counter=0000; elsif (read_ctr=1) then if counter1001 then counter=counter+1; data_temp(7 downto 0)=data_temp(8 downto 1); data_temp(8)=psdat; else read_ctr=0; getdat=data_temp(7 downto 0); counter=0000; end if; end if; end if;上述代码中采用了PS/2键盘的时钟频率作为软件的频率,目的是使接受信号的频率与发送信号的频率一致 read_ctr的作用是判断psdata的逻辑0是我们所需要的数据,还是发送数据前的0(在发送数据前会将DATA 管脚的点评拉低)读取数据时我们只要8位数据位,每次读取一位数据,采用压栈的方式存进data_temp中,

文档评论(0)

bodkd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档