利用系统外部中断做PS键盘信号接收

从复古到现代:PS2键盘协议在嵌入式系统中的重生与挑战 本文探讨了PS2键盘协议在嵌入式系统中的现代应用与挑战,特别是在单片机开发中的硬件极简和确定性响应优势。通过详细解析PS/2协议的硬件设计和通信机制,展示了其在工业控制、物联网终端等场景中的实际应用案例,并提供了单片机实现的实战技巧和优化方案。 阅读详情
 
#include <iom8v.h>
#include 
<macros.h>

/*-----------------*
* PC0 ------ DATA  *
* PD2 ------ CLOCK *
* PB0~7 --- LED1~8 *
*-----------------
*/


#define PC0          0
#define PC1          1
#define PC2          2
#define PC3          3
#define PC4          4
#define PC5          5
#define PC6          6
#define PC7          7

#define CUR_DATA (PINC & BIT(PC0) ? BIT(0) : 0x00)    //当前传送的DATA值
#define LED_DATA PORTB    //LED灯接口

void Device_Init(void)    //系统初始化
{
    Port_Init();
    
    
//stop errant interrupts until set up
    CLI(); //disable all interrupts

    MCUCR 
= 0x02;    //设置成INT0端口下降沿触发
    GICR  = 0x40;
    TIMSK 
= 0x00; //timer interrupt sources
    SEI(); //re-enable interrupts
 
//all peripherals are now initialized
}

void Port_Init(void)
{
    DDRB 
= 0xFF;
    DDRD 
= 0x00;
    DDRC 
&= ~BIT(PC0);
    PORTC 
= 0xFF;
    PORTB 
= 0xFF;
}


#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)
{
    
//external interupt on INT0    
    static UINT8 s_chData = 0;    //用来保存读取的数据

    
static UINT8 s_chCur_Bit = 0;    //用来计数,表示当前获取到第几位    
    if(s_chCur_Bit > 10)                //如果已经获取完整个数据
    {
        s_chCur_Bit 
= 0x00;          //计数器置零
        s_chData = 0x00;            //数据置零
    }

    
else if(s_chCur_Bit >= 1 && s_chCur_Bit <= 8)      //当前数据为有用位
    {
        s_chData 
|= CUR_DATA << (s_chCur_Bit - 1);      //因为数据是从最低位开始传输的
    }

    
if(s_chCur_Bit == 8)                                              //如果数据获取完整
    {
        LED_DATA 
= ~s_chData;                              //用LED灯显示结果
    }

    s_chCur_Bit
++;                       //计数器加一
}


void main()
{    
    Device_Init();
    
    
while(1)      //程序空转,碰到中断执行中断函数
    {;}
}


深入解析单片机模拟PS2键盘的时序与协议实现 本文深入解析了单片机模拟PS2键盘的时序与协议实现,详细介绍了PS2键盘协议基础、硬件连接与信号时序控制、单片机模拟键盘的核心代码实现以及常见问题与调试技巧。通过STM32等单片机实现PS2键盘模拟,展示了其在嵌入式系统中的简单可靠特性,适用于各种需要低成本输入设备的场景。 阅读详情

相关推荐

PS2键盘协议解析:通码断码、扫描码集与STM8驱动实现

PS2键盘协议是一种经典的低引脚数、半双工异步串行通信标准,其核心围绕扫描码集(Scan Code Set)展开,通过通码(Make Code)和断码(Break Code)精确表征按键按下与释放的物理事件。协议采用开漏结构、奇校验与严格11位帧格式,确保在资源受限嵌入式系统中的高可靠性。技术价值在于无需字符映射即可获取底层输入状态,支撑组合键识别、防抖处理及跨布局兼容。典型应用场景包括STM8/STM32等MCU驱动的密码锁、工业HMI与教学实验平台。本文深入剖析其时序机制、错误校验逻辑与中断驱动状态机实

weixin_33245447的博客 57

自制操作系统12:移动鼠标 - 中断机制探秘,捕获键盘中断

https://www.bilibili.com/video/BV1VJ41157wq?p=12&spm_id_from=pageDriver https://blog.youkuaiyun.com/tyler_download/article/details/52716839 https://weread.qq.com/web/reader/38732220718ff5cf3877215ka6832360236a684eceeee20 我们接着上节继续做鼠标指针的移动。为达到这个目的必须使用中断,而要使用中

hb_zxl的专栏 1226

STM32实现PS/2键盘解码

本文介绍基于STM32CubeMX和HAL库的PS/2键盘解码方案,利用外部中断捕获时钟信号,通过状态机解析扫描码,实现按键的可靠识别与处理,适用于无操作系统的小型嵌入式系统。

yhn45678901的博客 404

为系统内核建立中断机制

本章代码有一定难度,请参看视频获得更详细的代码开发流程: Linux kernel Hacker, 从零构建自己的内核上一节,我们绘制了鼠标图案,遗憾的是,鼠标箭头是死的,动不了,要想让鼠标移动,我们需要为内核建立中断机制。当我们移动鼠标时,鼠标会给CPU发送信号,CPU接收到信号后,终止当前的运算,执行内核给定的代码以处理鼠标发送的信号,在这段代码中,内核根据鼠标发送过来的相关信息,重新绘制鼠标

tyler_download的专栏 2552

PS/2键盘模拟器实战编程项目

PS/2接口是一种由IBM在个人计算机中引入的6针mini-DIN连接器,用于连接键盘和鼠标。自从1987年PS/2接口被引入以来,它成为了个人计算机的标准输入接口之一,直到USB接口的广泛采纳。尽管如此,许多现代计算机仍然支持PS/2接口,以确保与旧设备的兼容性。PS/2通信协议是一种用于计算机键盘和鼠标设备的接口标准。这种协议设计简单,以同步串行通信的方式,保证了设备之间稳定且高效的双向通信。PS/2接口使用了两条数据线和两条电源线,其中数据线负责发送和接收数据,而电源线为键盘提供必要的供电。

weixin_36364707的博客 831

PS2手柄遥控智能车实验:嵌入式系统与游戏控制器的融合

PS2手柄作为经典的输入设备,在游戏领域和嵌入式系统中仍然广泛应用。解析PS2手柄的输入信号是实现其功能的基础,为开发者提供了一种控制智能设备的方式。PS2手柄发送的信号为数字信号,通过与微控制器的通信接口连接,实现数据的输入。解析PS2手柄输入信号涉及多个方面,包括按键信号、模拟杆信号及振动反馈等功能。STM32F103系列微控制器是STMicroelectronics(意法半导体)生产的一款高性能ARM Cortex-M3微控制器,广泛应用于工业控制、医疗设备、电机驱动等领域。

weixin_35307279的博客 810

外部中断的配置步骤

liu_Zzr的博客 3995

第67节:利用外部中断实现模拟串口数据的收发

从业十年的工程师为大家总结了关于单片机入门的知识,这节主要介绍了利用外部中断实现模拟串口数据的收发。

PS键盘信号接收程序

#include iom8v.h>#include macros.h>/**//*-----------------** PC0 ------ DATA  ** PC3 ------ CLOCK ** PD0~7 --- LED1~8 **-----------------*/#define PC0          0#define PC1          1#define PC2    

loongee的专栏 813

利用arpspoof + sslStrip尝试进行arp欺骗

利用arpspoof + sslStrip尝试进行arp欺骗

qq_63575829的博客 352

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。此选项允许将纹理编码为特定格式(RGBM 或 dLDR,具体取决于平台)并通过后期处理步骤对纹理数据进行处理(推拉式扩张通道)。使用在3D模型的专业法线贴图。通用的纹理类型,一般在Material上的材质图片参数使用,比如漫反射、法线贴图这些。​​Compression​​:ASTC 6x6(移动端)或DXT5(PC)​​Compression​​:BC5(PC)或ASTC 6x6(移动端)

sky_smile_Allen的博客 2171

浅谈ps/2键盘

PS/2接口是一种用于连接计算机键盘和鼠标的接口。接口由IBM在1987年随Personal System/2系列计算机一起推出,因此得名PS/2。该接口是对之前的DIN(Deutsches Institut für Normung,即德国国家标准化组织)连接器的改进,后者在1980年代的IBM兼容计算机上非常常见。PS/2接口的特性包括:形状和尺寸:PS/2端口是一个小圆形连接器,通常有6个针脚并呈现迷你DIN的形式。颜色代码:为了区分键盘和鼠标的接口,经常使用颜色编码——通常。

缘友一世的博客 5534

OpenWrt南京电信PPPoE IPv6配置:从零搭建稳定双栈网络

本文详细指导如何在南京电信PPPoE宽带环境下,为OpenWrt路由器配置稳定的IPv6双栈网络。核心在于正确设置WAN6接口为DHCPv6客户端,并请求/60前缀,同时配置LAN口分发地址并放行防火墙关键流量,确保内网设备获得原生IPv6连接。

water的专栏 1339

基于GD32VF103 的vga显示器 和ps2键盘 驱动

基于GD32VF103的vga和ps2键盘驱动 前言 gd32vf103 是国内一款很不错的riscv架构微处理器,但是网上gd32vf103的应用还比较少,这里我决定分享一下利用这个微处理器制作的vga驱动和ps2键盘驱动的调试过程和思路,主要还是用来学习定时器、spi等这些单片机常用的功能,希望能帮到有需要的人 源码开源到了我的github上有需要自取gd32vf103 vga&ps2...

Adancurusul的博客 3201

使用libVLC进行视频截图的C/C++实现

通过这些代码,你可以在C/C++应用程序中实现视频截图功能,并将视频帧保存为图像文件。请注意,本文只提供了基本的示例代码,你可以根据自己的需求进行扩展和修改。libVLC是一个强大的开源多媒体框架,可以用于在C/C++应用程序中处理和播放音频和视频文件。我们将展示如何初始化libVLC,打开视频文件,捕获视频帧并保存为图像文件。在开始编写代码之前,你需要包含libVLC的头文件,并链接相应的库文件。在链接阶段,你需要添加libVLC库的链接选项。在使用libVLC之前,你需要初始化libVLC的实例。

学习使你进步。 470

SAP_SD模块更改销售订单定价简介

方式优点缺点适用场景MASS简单,无需开发不能触发重新定价逻辑修改特定字段BDC (VA02)可模拟人工操作维护复杂,速度慢少量订单批改稳定、安全需ABAP支持推荐用于批量重新定价VBOF标准重算返利仅适返利类条件返利更新通过本文,我们了解了 SAP 的[SAP_SD模块更改销售订单定价]的基本概念和应用方法。希望这些信息能帮助您在实际工作中更好地使用 SAP 系统,提高工作效率和管理水平。更多SAP文章请点击更多SAP文章更新,大家一起学习进步!!!

我小时候很黑的博客 712

PS/2键盘驱动原理与嵌入式移植实战

PS/2是一种基于双线同步串行通信的低速外设接口,广泛应用于工业HMI、教学设备等资源受限的嵌入式系统。其核心在于边沿触发采样、开漏电气特性和扫描码协议机制,无需主时钟即可实现高鲁棒性数据交互。技术价值体现在极低GPIO占用(仅CLK+DATA)、确定性时序响应及免驱动轮询的中断状态机设计。典型应用场景包括STM32裸机/FreeRTOS平台下的键盘输入、OLED菜单交互、硬件宏扩展及老旧设备升级。本文深入解析PS/2协议物理层、扫描码解析逻辑与PS2Keyboard库的跨平台移植方法,覆盖状态机实现、IS

weixin_33068055的博客 224

0.1 专栏导读:为什么需要从 MM 理解 HMM

本文探讨了GPU计算框架中CPU与GPU内存管理的困境,介绍了Linux内核的HMM(Heterogeneous Memory Management)解决方案。传统显式拷贝模型存在编程复杂、指针失效等问题,而HMM通过共享虚拟地址空间、自动页面迁移等机制实现透明内存管理。文章分析了HMM依赖的Linux内存管理基础设施,包括页表遍历、MMU通知、ZONE_DEVICE等核心组件,并梳理了从经典MM到支持异构设备的进化历程。最后给出了学习HMM的8层知识体系,强调理解底层MM机制是掌握HMM的关键。

图形/计算GPU的驱动与虚拟化技术分享园地 765

ps 2c语言程序,MicroBlaze中断编程——以PS/2键盘输入为例

在最近的工程中,需要用到PS/2键盘和鼠标作为控制输入,所以在网上找了一些相关的资料,内容很丰富,看来已经有很多人做过了这方面的编程。本篇Blog算是实践总结,为以后的开发积累一些基础知识。MicroBlaze支持重启(reset),中断( interrupt), 暂停(break)和异常(exception)。这里粗略的介绍:reset当外部按键发出reset信号或者XMD通过MDM(Micro...

weixin_39613839的博客 793

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3694

什么是 SAP Build Process Automation?

SAP Build Process Automation 是一款综合性的低代码工具,允许企业用户快速开发和自动化端到端业务流程。它整合了工作流管理、任务自动化和人工智能技术,提供了一个易于使用的平台,帮助企业更好地应对现代商业挑战。通过该工具,用户无需具备深厚的编程技能即可创建复杂的业务流程。例如,用户可以使用直观的拖放式界面设计流程、设置触发条件、定义任务分配规则,并通过内置的分析功能对流程效率进行评估。流程建模与设计:提供图形化界面,帮助用户直观地设计业务流程。任务自动化。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1258

MSP430学习笔记9-PS2键盘解码

PS2键盘解码的基本原理是通过外部中断读取键盘输出的串行信号,在根据扫描码进行查表解码。键盘发送往主机的信号总是在时钟的下降沿因此此中断是在下降沿触发,且时钟信号是由键盘给出,因此使用P1口中断(已经在初始化端口时设置)。发送的数据位11位,第一位是起始位,总为0,紧接是8个数据位,然后是奇校验位,最后是停止位总为1. 本程序只能对基本按键(即...

weixin_34013044的博客 170

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PS2接口协议及代码分析

一.电气特性 1 DATA Key Data 2 n/c Not connected 3 GND Gnd 4 VCC Power , +5 VDC 5 CL

JH17369320302的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汇编语言 外部中断

外部中断,也称为硬件中断,它们从8086的不可屏蔽中断引脚NMI或可屏蔽中断引脚 INTR 引入。从INTR脚上来的请求信号,CPU可以立即响应,也可以暂时不响应。如果CPU内部标志寄存器中的IF置1,则允许响应这类中断;若IF标志为0,则不予响应。 以下是从键盘输入产生中断响应,改变二进制的值的程序代码。 assume cs:code, ds:data, ss:stack data segment db 128 dup(0) data ends stack segment stack db 1

꧁༺ʚvv༒catɞ༻꧂的博客 1529

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: PS键盘信号接收程序
下一篇: 74165芯片的简单使用
loongee
博客等级 码龄20年 23粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值