登录/注册

如何采用51单片机实现PS2键盘的设计?PS2键盘的引脚图介绍

PS/2接口是一种PC兼容型计算机系统上的接口,可以用来连接键盘及鼠标。区别于现在流行的USB口,即以前所谓的5针圆口,主板后面的插槽里都有预留的PS2接口,这种键盘/鼠标属于即插即用型,不用再装驱动。

更多

要使用51单片机实现PS2键盘接口设计,需理解PS2接口规范及其通信协议。以下是详细步骤和引脚介绍:

PS2键盘引脚定义(6针Mini-DIN接口)

引脚 名称 描述 连接要求
1 DATA 键盘→单片机的串行数据线 接单片机IO口+上拉电阻
2 NC 空脚(不连接) 悬空
3 GND 地线(0V) 接单片机GND
4 VCC 电源(+5V) 接单片机+5V电源
5 CLK 键盘→单片机的时钟信号线 接单片机IO口+上拉电阻
6 NC 空脚(不连接) 悬空

关键连接:只需连接VCC、GND、DATA、CLK四根线。DATA和CLK需接4.7kΩ上拉电阻至VCC。


硬件连接示例(51单片机)

// Proteus/实际电路连接示意
VCC  → +5V电源
GND  → 单片机GND
DATA → P3.0 (或任意IO口,例:sbit PS2_DATA = P3^0)
CLK  → P3.2(使用INT0中断,sbit PS2_CLK = P3^2)

通信协议核心

  1. 双向同步串行通信(默认由键盘主导)
  2. 数据传输格式(11位/帧)
    • 1起始位(0) + 8数据位(LSB在前) + 1奇偶校验位 + 1停止位(1)
  3. 时序
    • 时钟频率:10~20kHz(周期50~100μs)
    • 数据在CLK下降沿有效

软件设计步骤(C语言代码框架)

1. 初始化设置

sbit PS2_DATA = P3^0;
sbit PS2_CLK  = P3^2;

void PS2_Init() {
    IT0 = 1;      // INT0下降沿触发
    EX0 = 1;      // 使能INT0中断
    EA  = 1;      // 开总中断
    PS2_CLK = 1;  // 初始化高电平(上拉)
    PS2_DATA = 1; // 初始化高电平(上拉)
}

2. 中断服务程序(接收数据)

volatile unsigned char byte_buf = 0; // 存储8位数据
volatile bit data_ready = 0;         // 数据就绪标志
unsigned char bit_cnt = 0;            // 位计数器

void INT0_ISR() interrupt 0 {  // CLK下降沿触发
    if (bit_cnt > 0 && bit_cnt < 9) {
        // 从低到高移入数据(LSB first)
        byte_buf >>= 1;             
        if (PS2_DATA) byte_buf |= 0x80;
    }
    bit_cnt++;

    if (bit_cnt == 11) {      // 收到11位(含起始/停止位)
        bit_cnt = 0;
        data_ready = 1;       // 置位数据就绪标志
    }
}

3. 主循环处理扫描码

void main() {
    PS2_Init();
    while(1) {
        if (data_ready) {
            data_ready = 0;
            Process_Scancode(byte_buf); // 处理键值
        }
        // 其他任务...
    }
}

4. 扫描码处理示例

void Process_Scancode(unsigned char scode) {
    // 典型扫描码示例:
    switch(scode) {
        case 0x1C: P1 = 0xA0; break; // 'A'键点亮LED
        case 0x32: P1 = 0x50; break; // 'B'键动作
        case 0xF0: // 键释放码(需后续处理)
        default: break;
    }
}

关键注意事项

  1. 扫描码类型
    • 通码(Make):按键按下时发送(如'A'键通码0x1C)
    • 断码(Break):按键释放时发送(通码前加0xF0)
  2. 特殊键处理
    • 扩展键(如方向键)以0xE0开头(两字节扫描码)
    • 状态键(Shift/Ctrl)需保持状态标志
  3. 去抖动:硬件滤波电容(10~100nF)或软件延时

调试技巧

  1. 用示波器/逻辑分析仪监测CLK/DATA时序
  2. 初始阶段使用串口输出接收到的扫描码(十六进制)
  3. 参考标准PS/2扫描码表(如'Enter'=0x5A, 'Space'=0x29)

完整实现需结合具体需求扩展键值映射、组合键处理等功能,建议查阅《PS/2键盘接口技术规范》获取完整扫描码表。

求一种基于STM32的PS2游戏手柄智能小车设计方案

和PS2游戏手柄 。元旦节期间,组装起来,但是没有设计电路和单片机。元旦节后回公司时间比较多,于是在这期间我就了解了一下制作PS2游戏手柄的过程

2022-01-05 07:51:57

USB1口数据线上的PS2键盘有问题该怎么解决

在A40i核心板的USB1口的数据线上,通过WIT122U芯片实现一个PS2接口。在该PS2接口上接

2021-12-31 06:08:42

如何用SH69P04单片机实现USB和PS2端口的MOUSE设计

基于SH69P04单片机实现USB和PS2端口的MOUSE设计

2021-01-27 07:27:09

实例制作一个51单片机连接PS2键盘讲解

实例制作一个51单片机连接PS2键盘讲解(

资料下载 佚名 2021-07-22 12:11:41

单片机扩展PS2标准微机键盘的技术

单片机扩展PS2标准微机键盘的技术说明。

资料下载 姚小熊27 2021-04-08 15:11:41

使用单片机实现PS2键盘输入1602液晶显示的C语言程序免费下载

本文档的主要内容详细介绍的是使用单片机实现PS2

资料下载 佚名 2021-03-26 15:27:00

使用51单片机进行PS2键盘解码实验的C语言程序免费下载

本文档的主要内容详细介绍的是使用51单片机进行PS2

资料下载 佚名 2019-08-26 17:30:00

通用键盘鼠标模拟包括USB和PS2的程序详细说明

本文档的主要内容详细介绍的是通用键盘鼠标模拟包括USB和PS2的程序详细说明。

资料下载 佚名 2019-04-12 18:28:00

PS2键盘接口驱动电路的设计

PlayStation 2,简称PS2,是日本sony(Sony)旗下的索尼电脑娱乐SCEI(Sony Computer Entertainment Inc.),于2000年3月4日推出的家用型128位游戏主机。

2019-11-21 07:04:00

如何使用ps2键盘

做一些额外的事情来让它发送到ps2键盘时钟和数据?我在VHDL编程,我决定检查是否ps数据和时钟都有任何结果。所以这就是我的工作。---开始代码

2019-07-18 09:47:35

Verilog模拟PS2协议的实现

PS2协议读键盘值相当简单嘛,比模拟SPI、I2C简单多了...下面介绍

2019-07-12 06:55:49

请问资料里的PS2鼠标实验能用不?

淘宝网上卖的STM32F103的开发板。我们要做个ARM单片机控制光电鼠标的实验,请问资料里的PS2鼠标实验能用不?(就是要可以记录移动和点击然后在TFT上显示)还有就是

2019-07-11 04:35:01

使用FPGA驱动采用PS2接口的pc键盘

PS2接口,则使用标准的TTL电平,那么我们今天就使用FPGA来解码驱动一个采用PS2接口的pc

2019-04-28 06:06:49

51单片机PS2键盘的控制设计

本电路原理图如下图所示,PS2接口的1脚接P3.4,用来接收串行的键码信号,5脚接P3.3(INTl),是时钟信号,每当5脚从高电平变成低电平时,都会引起单片

2019-04-19 15:14:50

如何在芯片CY8C20xx6A上制作PS2键盘CapSense?

我想建立一个键盘64键PS2的CAPSENSE沟通,但我只做了芯片CY8C2039 6A一样!感谢 以上来自于百度翻译 以下为原文I wanted to build a keyboard

2019-03-15 12:05:18
7天热门专题 换一换
相关标签