基于单片机的PS2键盘设计.docx
- 文档编号:9015955
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:19
- 大小:231.73KB
基于单片机的PS2键盘设计.docx
《基于单片机的PS2键盘设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的PS2键盘设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机的PS2键盘设计
PS2键盘在单片机上的应用
摘要:
在嵌入式PC应用系统中,作为人机交互设备的键盘,往往采用结构简单按键少的矩阵键盘。
标准键盘虽然能直接与嵌入式PC机的PS/2接口相连,但是体积大,按键多,不能满足需求,本文提出用一种AT89C52单片机实现具有标准PS/2接口的矩阵键盘,具有便捷,实用的特点。
关键词:
PS/2接口,PS/2键盘,拨号键,AT89C52,LCD1602
Abstract:
PS/2interfaceisoneofthemostusefulmouseinterface.ItwasIBM’spatentnamedosulumbefore.Itisthededicateinterfaceofmouseandkeyboard.ThistextimpliedaplanusingPS/2tomakeasystem.PS/2tansmitthedatawhichwaspressed,andAT89C52receiveit,disposeditandtransmitittoLcd1602.Lcd1602discoverittomakeusknowwhichkeyhasbeenpressed.PS/2simulateaphone’sdialkeyboard.Thissystem’sfeatureisthecircuitissampleanduseful.
Keywords:
PS/2keyboard,AT89C52,LCD1602,PS/2interface,dialkeyboard
目录
1、前言1
2、整体方案设计2
2.1方案论证2
2.2方案比较3
3、单元模块设计4
3.1PS2键盘模块4
3.2单片机模块6
3.3LCD显示模块7
4、软件设计9
5、系统技术指标及精度和误差分析10
6、结论11
7、设计小结12
8、致谢14
9、参考文献14
附录1:
电路总图15
附录2:
仿真图16
附录3:
软件代码17
1、前言
单片机因其性价比高,处理能力强,且抗干扰能力好,在医疗器械、机电液控制、数据传输等各类工控系统和设备仪器中得到广泛应用。
一方面,在实际应用中,单片机经常需要将采集到的数据发送给PC机进行处理或保存等;另一方面,工控系统和设备仪器设计,因环境或软硬件资源的限制,也往往需要不同的通信接口。
比如,很多工控PC机的键盘接口因受恶劣环境不利于键盘的使用而处于闲置状态。
因此,设计一个具有通用性的PS/2键盘通信接口既方便PC机进行外设扩展,又丰富了单片机的接口资源。
单片机与PC机常用的数据通信协议为RS-232通信协议,传输数据格式是二进制,而单片机通过PS/2键盘协议传输的数据格式是ASCII码,可以直接以常用的文本文件和表格文件的形式进行处理和保存。
目前,单片机采用PS/2协议进行通信较多的是单片机接收PS/2键盘设备的数据,而以单片机做为键盘与PC机通信则较为少见。
本文的新颖之处主要表现为:
1.本文主要着眼于基于单片机的PS/2键盘通信模块的实现,本模块可通过RS-232、RS-485接口或数据总线从其它系统上获取要传给PC机的数据。
单片机把二进制数据转换成对应的键盘扫描码后上传给PC机。
本模块只需要简单的软硬件改动(甚至于有时不需要改动)就可以扩展大部分工控系统和设备仪器的通信功能,具有较大的通用性。
2.本文比较深入地分析了PC机与键盘之间相互通信的时序,并介绍了PC机开机自检时键盘模块需要响应的几个主要命令。
3.本模块在条形码扫描系统中进行了应用测试,实验证明了本模块具有较好的稳定性和可靠性,有较广泛的应用范围。
2、整体方案设计
本设计的整体思路是:
利用PS2键盘,通过AT89C52单片机接收PS2键盘的键值,并显示在LCD1602上,PS2键盘模拟电话的拨号键。
2.1方案论证
设计中采用了三个方案,具体的方案见方案一、方案二和方案三。
方案一:
普通键盘设计方案
采用普通的4X4键盘,通过键盘扫描得到键值,有单片机控制并显示在LCD上,优点是成本低,设计简单,缺点是键盘扫描效率不够且容易出错。
图2.1普通键盘整体方案一框图
方案二:
数码管显示设计方案
采用普通的PS2键盘,通过键盘扫描得到键值,由单片机控制并显示在数码管上,优点是成本低,设计简单,键盘自动扫描,自动识别,自动编码,有键按下时才发送数据,因此减轻了CPU的负担,缺点是数码管显示不直观。
图2.2PS2键盘整体方案一框图
方案三:
PS2键盘方案
见图2.2.利用PS2键盘设计,优点是键盘自动扫描,自动识别,自动编码,有键按下时才发送数据,因此减轻了CPU的负担,用LCD1602显示方便直观。
图2.3PS2键盘整体方案二框图
2.2方案比较
由于方案一采用的是4X4键盘,设计需要CPU不断的扫描键盘,占用了大量的CPU资源,方案二利用PS2键盘,有键按下时才发送数据,减轻了CPU的负担,但是用数码管显示不够直观,交互界面不够好,因此综合方案一和方案二的优点,本设计采用了方案三。
3、单元模块设计
集成温度传感器实际上是一种半导体集成电路,它是利用晶体管的b—e结压降的不饱和值Vbe与热力学温度T和通过。
3.1PS2键盘模块
PS2模块由PS2键盘和PS2接口组成,利用通信协议对PS2键盘进行操作,PS2通讯协议是一种双向同步串行通讯协议。
PS2键盘连线图如图所示:
图3.1PS2键盘连线图
PS2接口操作时序如下图所示:
图3.2时序图
PS2接口通信协议表如下表所示:
图3.3通信协议表
表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。
PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。
当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。
主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。
而PS/2设备则要配合PC机才能读到准确的数据。
具体连接步骤如下:
(1)等待时钟线为高电平。
(2)判断数据线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错。
(7)输出应答位。
(8)检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
(9)延时45μs,以便PC机进行下一次传输。
PS2键盘扫描方式:
键盘的处理器如果发现有键被按下释放或按住键盘将发送扫描码的信息包到计算机扫描码有两种不同的类型通码和断码,当一个键被按下或按住就发送通码,当一个键被释放就发送断码,每个按键被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以测定是哪个按键,每个键一整套的通断码组成了扫描码集有三套标准的扫描码集,分别是第一套、第二套、和第三套,所有现代的键盘默认使用第二套扫描码
虽然多数第二套通码都只有一个字节宽但也有少数扩展按键的通码是两字节或四字节宽这类的通码第一个字节总是为E0h
正如键按下通码就被发往计算机一样,只要键一释放断码就会被发送,每个键都有它自己唯一的通码,它们也都有唯一的断码,幸运的是你不用总是通过查表来找出按键的断码在通码和断码之间存在着必然的联系,多数第二套断码有两字节长它们的第一个字节是F0h,第二个字节是这个键的通码,扩展按键的断码通常有三个字节,它们前两个字节是E0h,F0h,最后一个字节是这个按键通码的最后一个字节。
我在下面列出了几个按键的第二套通码和断码。
3.2单片机模块
STC89C52单片机是Atmel公司生产的单片机,51的内核,具有处理能强、运行速度快、功耗低等优点。
最小系统包括单片机,电源,复位电路。
单片机接收PS2键盘的键值,并控制LCD的显示。
其系统框图如下图所示:
图3.4单片机控制系统框图
STC89C52单片机有4X8个IO口,其中P0口需外接上拉电阻,因此本次设计采用P1口作为PS2接口,P2口作为与LCD1602的接口,其电路图如下图所示:
图3.5单片机最小系统图
3.3LCD显示模块
LCD1602采用8位并行数据传输,其操作时序如下图所示:
图3.6LCD单片机图
LCD1602接口由8位数据线,电源地电源正,液晶显示偏压信号(VL),数据命令选择端(RS),读写选择端(RW)组成。
其接口信号说明如下图所示:
图3.7接口信号说明图
可以在1602的液晶显示偏压信号端接一个可变电阻,调节显示亮度,初始状态时,调至1602上面一排显示12个黑块为止,LCD1602电路图如下图所示:
图3.8LCD电路图
4、软件设计
1、主程序设计:
首先初始化IO口和键盘、LCD1602,然后接收按键的键值,并通过8位并行传输方式传送给LCD1602显示。
2、获取键值程序:
按照PS2键盘协议操作,键盘按下时发送通码,弹起时发送断码,在单片机中,将接收到的码字与第二套扫描码比较,得出键值。
本次设计共采用12个键,模拟电话的拨号键。
3、LCD显示程序:
首先初始化LCD1602端口和寄存器,然后接收单片机传送的数据,通过1602写操作时序显示接收到的数据。
4.1程序整体设计框图
5、系统技术指标及精度和误差分析
随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。
IBM推出PS2键盘接口标准。
该标准定义了84~101键,采用6脚mini-DIN连接器,用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。
本系统利用PS2键盘作为交互接口,操作方便,比普通键盘精度高,在机械键盘中需要考虑键盘去抖的问题,硬件去抖或软件去抖,但是在PS2键盘中不需要考虑键盘去抖,因为PS2键盘采用按键发送通码,弹起发送断码的方式,不易出错。
只要将接口连线处理好,单片机处理数据时不出错。
本次设计实现了软件的设计和电路设计和仿真,实现了系统功能,完成了系统设计指标:
按下一个键,准确的显示在LCD1602上。
6、结论
本系统采用第二套键盘扫描码,利用PS2键盘作为输入,准确度比普通键盘高,完成了系统的仿真图,电路图和程序设计,实现了系统的功能。
很多品牌机上采用PS/2口来连接鼠标和键盘。
PS/2接口与传统的键盘接口除了在接口外型、引脚有不同外,在数据传送格式上是相同的。
现在很多主板用PS/2接口插座连接键盘,传统接口的键盘可以通过PS/2接口转换器连接主板PS/2接口插座。
采用PS2键盘比普通键盘精度更高,使用更方便,USB即插即用,与USB相比,稳定性而言PS2比较好,但它不支持热拔插,因此在使用时需注意不能经常拔掉下PS2键盘。
7、设计小结
本次设计完成后,在效果上能完全达到原先设计的功能。
例如,通过按下按键“1”,能将数值“1”发送到LCD上显示驱动程序经KeiluVision3编译,在AT89C52上单片机通过,该模拟键盘接口可以作为一个接口模块嵌入到其他设备仪器和工程控制系统,增加了与PC机的通信途径。
在应用和测试结果分析中,该接口模块具有较高的可靠性与稳定性。
由于时间仓促和我们自身水平有限,本设计在功能上也只是完成了一些基本功能,对于电路的可靠性,稳定性等参数还未做过详细的测试。
仿真中出现的一些问题,也尚未解决。
8、致谢
在靳斌老师辛勤指导下,我与小组同学积极讨论和思考,完成本此课程设计,此次设计,使我们受益匪浅。
在此我要感谢电气信息学院提供这次课程设计的机会;感谢电气信息学院各位老师的帮助。
在这里我要特别感谢靳斌老师,在我们的设计过程中,至始至终都得到了靳斌老师的悉心指导,我们的设计才得以顺利完成。
9、参考文献
[1]张培仁.基于C语言编程MCS-51单片机原理与应用[M].北京:
清华大学出版社,2003.
[2]杨振江、杜铁军.流行单片机实用子程序及应用实例[M].西安电子科技大学出版社,2002.
[3]蔡美琴、张为民.MCS-51系列单片机系统及其应用(第二版)[M].北京:
高等教育出版社,2004.
[4]苏家健.单片机原理及应用技术[M].北京:
高等教育出版社,2004.
[5]C语谭浩强.言程序设计(第三版)[M].北京:
清华大学出版社,2005.
附录1:
电路总图
图附录1电路总图
附录2:
仿真图
图附录2仿真图
附录3:
软件代码
main.c:
#include
#include"KEY4x4_MODE.h"
#include
#include"type.h"
#include"lcd1602.h"
ucharDis_buffer[12]="0123456789*#";
ucharkey_flag=0;
voidmain()
{
ucharloca,key_value=0;
Init_1602();//初始化1602
while
(1)
{
key_value=Get_key();//键盘扫描
if(key_flag)
{
lcd_dis(Dis_buffer,key_value,loca++);//显示
key_flag=0;//标志位清零
}
}
}
Lcd1602.c:
#include
#include
#include"type.h"
#include"lcd1602.h"
voidInit_1602(void)//初始化
{
Lcd_write_CMD(0x38,0);
Lcd_write_CMD(0x38,1);//设置显示模式
Lcd_write_CMD(0x08,1);//显示关闭
Lcd_write_CMD(0x01,1);//清屏
Lcd_write_CMD(0x06,1);//光标从左向右移,文本不移
Lcd_write_CMD(0x0f,1);//显示开
}
voiddelay_ms(UCHARi)//延时ms级
{
unsignedintj;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
voidLcd_write_CMD(UCHARDATA_output,UCHARIf_Check)//写指令
{
if(If_Check)
Check_ifbusy();
RS_1602=0;
RW_1602=0;
DATA_out=DATA_output;
E_1602=1;
delay_ms
(1);
E_1602=0;//锁存数据
RS_1602=1;
RW_1602=1;
}
voidCheck_ifbusy(void)//读状态
{
DATA_out=0xff;
RS_1602=0;
RW_1602=1;
E_1602=1;
while(DATA_out&0x80)
{
E_1602=0;//这两句protues仿真必须加
E_1602=1;//
}
E_1602=0;
}
voidLcd_1602_Display(UCHAR*dis_p)//显示
{
UCHARi,len;//定义要放在前面
len=strlen(dis_p);
Lcd_Set_XY(0,0);
if(len>16)
{
for(i=0;i<16;i++)
{
Lcd_write_DATA(dis_p[i],1);
}
Lcd_Set_XY(0,1);
for(i=16;i { Lcd_write_DATA(dis_p[i],1); } } else { for(i=0;i { Lcd_write_DATA(dis_p[i],1); } } } voidlcd_dis(UCHAR*dis_p,UCHARi,UCHARlocation) { Lcd_Set_XY(location,0); Lcd_write_DATA(dis_p[i],1); } voidLcd_Set_XY(UCHARx,UCHARy)//设置显示的初始坐标 { x&=0x0f; y&=0x01; delay_ms (1); if(y) { Lcd_write_CMD(0X80+0X40+x,1); } else { Lcd_write_CMD(0X80+x,1); } } voidLcd_write_DATA(UCHARDATA_output,UCHARIf_Check)//写数据 { if(If_Check)Check_ifbusy(); RS_1602=1; RW_1602=0; DATA_out=DATA_output; E_1602=1; delay_ms (1); E_1602=0; delay_ms(1000); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 PS2 键盘 设计