打印
[技术问答]

PS2键盘解码(可以IO模拟)

[复制链接]
1106|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DreamofOven|  楼主 | 2016-2-28 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/**************1602部分******************/
sbit lcden=P1^2;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit psdat=P3^4;
sbit psclk=P3^3;
/*char code Tab[]={'0','1','2','3','4','5','6','7','8',
'9','A','B','C','D','E','F'};*/
char code Tab[]="0123456789abcdef";
uchar key[3];
uchar numbit,keyv,keynum,m,n,o,p,q,r;
void delay(uint z) //延时子程序
{
  uint x,y;
  for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}

void write_com(uchar com)//定义一个带参数的写命令子程序
{
lcdrs=0; //1602的rs为0时,接收命令,为1时接收数据
P0=com;//把void write_com(uchar com)中的COM中的数据给P0口
delay(2);
lcden=1;
delay(2);
lcden=0;
delay(2);
}


void init_1602()//定义一个初始化子程序
{
lcden=0;
lcdrw=0;
write_com(0x38);//调用 write_com子程序并把0x38赋给P0口,显示模式打开
write_com(0x0f);//调用 write_com子程序并把“开显示,显示光标,光标闪烁”指令码赋给P0口
write_com(0x06);//调用 write_com子程序并把“地址指针加1,整屏不移动”指令码赋给P0口
write_com(0x80);//数据指针初始化,让指针指向最左端,显示从第一行开始
write_com(0x01);//调用 write_com子程序并把"清零指"令码赋给P0口
}

void write_dat(uchar dat)//定义一个带参数的写数据子程序
{
lcdrs=1; //1602的rs为0时,接收命令,为1时接收数据
P0=dat;//把void write_shu(uchar shu)中的COM中的数据给P0口
delay(2);
lcden=1;
delay(2);
lcden=0;
delay(2);
}

/******************/

void main()
{
init_1602();
IT1=1;//接P3^3,所以用外部中断1,用下降沿IT1=0是用低电平
EX1=1;// 打开外部中断1。
EA=1;//打开总中断
while(1)
     {
   if(keynum==3)
     {
    keynum=0;
    m=key[0]/16;
    n=key[0]%16;
    o=key[1]/16;
    p=key[1]%16;
    q=key[2]/16;
    r=key[2]%16;
  write_com(0x80);
     write_dat(Tab[m]);
     write_dat(Tab[n]);
  write_dat(Tab[o]);
  write_dat(Tab[p]);
  write_dat(Tab[q]);
  write_dat(Tab[r]);
  }

  }
}
void int1() interrupt 2
{
if((numbit>0)&&(numbit<9))
  {
   keyv=keyv>>1;
   if(psdat)
     keyv=keyv|0x80;
  }
  numbit++;
     if(numbit>10)

  {
  numbit=0;
  key[keynum]=keyv;
  keynum++;
  }
}


沙发
zwwoshi| | 2016-3-17 14:51 | 只看该作者
谢谢分享

使用特权

评论回复
板凳
dongnanxibei| | 2016-3-17 19:34 | 只看该作者
随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。1981年IBM推出了IBM PC/XT键盘及其接口标准。该标准定义了83键,采用5脚DIN连接器和简单的串行协议。实际上,第一套键盘扫描码集并没有主机到键盘的命令。为此,1984年IBM推出了IBM AT键盘接口标准。该标准定义了84~101键,采用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设有8个主机到键盘的命令。到了1987年,IBM又推出了PS/2键盘接口标准。该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。市面上的键盘都和PS/2及AT键盘兼容,只是功能不同而已。

使用特权

评论回复
地板
dongnanxibei| | 2016-3-17 19:35 | 只看该作者
物理连接
一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock(时钟脚)、Data(数据脚)、+5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data(数据脚)都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。

使用特权

评论回复
5
Micachl| | 2016-3-20 21:43 | 只看该作者
以前用FPGA的时候用vhdl写过ps2的程序

使用特权

评论回复
6
ofsummer| | 2016-3-27 20:57 | 只看该作者
现在还有人玩ps2吗,用USB都可以实现了

使用特权

评论回复
7
DreamofOven|  楼主 | 2016-3-29 21:05 | 只看该作者
PS2的解码程序这么简单吗,我记得挺复杂的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

178

帖子

0

粉丝