ps2 协议:http://apps.hi.baidu.com/share/detail/15069948
/****************************************************************************************
PS2 读电脑键盘实验 *
连接方法 : P0口与J12连接 拔开跳线帽用杜邦线连接左针与P3.2 右针与P1.6 连接 *
使用方法: 用外部中断读取PS2键盘的数据 并在数码管上显示,此程序只处理数字键盘。 *
*
其余按键功能用户可以自行扩展,为了程序简单便于阅读和学习,程序中没有使用奇偶校验, *
校验程序请自行添加。 * *
*
*****************************************************************************************/
#include<REG52.h>
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit BEEP = P1^5;
sbit Key_Data = P1^6 ; //定义键盘引脚
sbit Key_CLK = P3^2; //使用外部中断
/******************************************************************/
/* 函数声明 */
/******************************************************************/
void Decode(unsigned char ScanCode); //解码子程序
void delay(unsigned int i); //函数声名
void display();
void beep();
// 此表为 LED 的字模 // 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)
unsigned char code Disp_Tab[] = { ~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1, ~0xff, ~0xf7 };
bit BF;
unsigned char KeyV;
unsigned char LedNumVal ;
int KEY_val,IntNum;
/******************************************************************/
/* 主函数 */
/******************************************************************/
void main()
{
IT1 = 0; //设外部中断1为低电平触发
EA = 1; //外部中断开
EX0 = 1; //开中断
while(1)
{
if (BF)
{
if (KeyV != 240) beep();
Decode(KeyV); //解码
}
else
EA = 1; //开中断
display();
}
}
/******************************************************************/
/* 外部中断读入信息 */
/******************************************************************/
void Keyboard_out(void) interrupt 0
{
if ((IntNum > 0) && (IntNum < 9))
{
KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
if (Key_Data)
KeyV = KeyV | 0x80; //当键盘数据线为1时到最高位
}
IntNum++;
while (!Key_CLK); //等待PS/2CLK拉高
if (IntNum > 10)
{
IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
BF = 1; //标识有字符输入完了
EA = 0; //关中断等显示完后再开中断
}
}
/******************************************************************/
/* 解码信息 */
/******************************************************************/
void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
{
switch (ScanCode)
{
case 0x70 : // 当收到0xF0,Key_UP置1表示断码开始
KEY_val = 0;
break;
case 0x69 :
KEY_val = 1;
break;
case 0x72 :
KEY_val = 2;
break;
case 0x7A :
KEY_val = 3;
break;
case 0x6B :
KEY_val = 4;
break;
case 0x73 :
KEY_val = 5;
break;
case 0x74 :
KEY_val = 6;
break;
case 0x6c :
KEY_val = 7;
break;
case 0x75 :
KEY_val = 8;
break;
case 0x7d :
KEY_val = 9;
break;
case 0x71 :
// dot = 0X7F;
break;
}
BF = 0; //标识字符处理完了
}
/***************************************************************************************/
void display( )
{
unsigned char i;
unsigned int LedOut[8];
LedNumVal = KEY_val ;
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100];
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位
for( i=0; i<8; i++)
{ P0 = LedOut[i];
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
delay(50);
}
}
/***************************************************************************************
延时程序 *
****************************************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
/***************************************************************************************
蜂铃器发声 *
****************************************************************************************/
void beep()
{
unsigned char i;
for (i=0;i<255;i++)
{
delay(5);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}
分享到:
相关推荐
在本实验中,我们主要探讨了两个核心主题:PS2键盘解码基础实验以及串口通信的进阶实验。这两个实验都是围绕着如何处理和传输来自PS2键盘的数据展开的。 首先,基础实验关注的是PS2键盘解码。PS2键盘通过PS2接口与...
在压缩包中的文件“PS2 读电脑键盘实验”,很可能是包含源代码、文档或者硬件配置信息的文件,用于指导实验的执行。这些文件可能包括C语言或汇编语言的代码示例,详细解释了如何编写中断服务例程,以及如何与PS/2...
PS2键盘是早期个人电脑上常见的输入设备接口,尽管现在已被USB接口取代,但在学习和实验环境中仍然有其价值。 首先,我们需要理解PS2键盘的工作原理。PS2键盘通过一个6线连接器与主机通信,其中数据线用于传输按键...
1. **PS2接口**:PS2是电脑上的一个古老但通用的接口,最初用于连接键盘和鼠标。这里我们使用它来连接PS2游戏手柄。PS2接口传输的是串行数据,需要理解串行通信的基本原理。 2. **PS2协议解析**:手柄通过PS2接口...
本篇文章将深入探讨如何利用Verilog进行PS2(Personal System/2)键盘的设计,这是一种常见于早期个人电脑的接口技术,尽管现在已经被USB取代,但在FPGA(Field-Programmable Gate Array)学习和应用中,PS2键盘仍然...
首先,PS/2键盘是一种标准的计算机输入设备,广泛用于个人电脑上。它通过PS/2接口与主机通信,发送按键信号。键盘的信号处理通常由控制器完成,该控制器解析按键编码,并将其转化为可识别的ASCII码或扫描码。在本...
PS2是个人电脑上早期的标准键盘和鼠标接口,虽然现在已经被USB接口取代,但在单片机领域中,由于其简单易用和成本低廉,PS2接口仍然被广泛应用。PS2键盘与单片机的通信通常是通过中断方式实现的,单片机通过读取特定...
PS2接口则是早期个人电脑上常见的外设连接方式,用于连接键盘和鼠标。 首先,我们需要理解51单片机的工作原理。51系列单片机由Intel公司开发,采用8位CPU,内置ROM、RAM和I/O端口,具有丰富的指令集和较低的硬件...
PS2键盘是早期个人电脑广泛使用的输入设备,尽管现在已经被USB键盘取代,但其简单、实用的特性仍使其在教学和实验中占有一席之地。 首先,我们需要了解Verilog,这是一种硬件描述语言(HDL),用于描述数字系统的...
7. 实际应用:这样的系统可以用于开发自定义的输入设备,例如特殊的键盘或控制面板,或者用于教学和实验目的,帮助学生理解和实践单片机与PC之间的通信。 8. ps2--可用:这个文件可能是项目中使用的PS/2键盘解码的...
PS2接口是早期个人电脑中常见的外设接口,用于连接键盘和鼠标,尽管现在已经被USB接口取代,但在某些特定场景和老旧系统中,PS2接口仍有其应用价值。 首先,理解PS2协议是关键。PS2协议是一种简单的同步串行通信...
1. **PS/2键盘接口**:PS/2键盘是早期个人电脑常用的键盘接口,其数据传输采用串行方式,有6根线连接,包括数据线、时钟线、电源线等。在这个实例中,单片机需要通过解析接收到的PS/2键盘的扫描码来识别按键动作。 ...
PS/2键盘接口是IBM个人电脑上的一种标准接口,用于连接键盘和鼠标。它使用串行通信协议,尽管速度较慢,但因其简单性和可靠性,在许多嵌入式系统中仍然被使用。这个实验的目标是读取通过PS/2接口发送的键盘按键信号...
PS2(Personal System/2)是IBM在1987年推出的一种接口标准,最初用于连接鼠标和键盘到个人电脑。尽管现在已经被USB接口广泛取代,但在某些嵌入式系统和老式设备中,PS2接口仍然常见。 首先,我们需要了解PS2键盘...
实验设备包括个人电脑、QuartusII软件和基于Cyclone II的EP2C5Q208C8 FPGA实验开发系统。 在PS2解码方案中,学生将针对PS2接口的1脚(数据脚)和5脚(时钟脚)编写VHDL代码。解码的关键在于正确处理数据传输的时序...
VHDL课程设计的目标是让学生深入理解并...实验所需设备包括个人电脑、QuartusII软件以及配备Cyclone II EP2C5Q208C8芯片的FPGA实验开发系统。通过这样的实践,学生不仅能够掌握EDA技术,还能培养实际的硬件开发能力。
基于FPGA设计的贪吃蛇小游戏实验课程设计报告+quartus9.1工程源码,可以做为你的学习设计参考。 摘 要 本次电子技术基础课程设计了贪吃蛇游戏,实现了用FPGA来驱动VGA显示贪吃蛇游戏。贪吃蛇的游戏规则是玩家使用PS2...
在ALIENTEK MINISTM32 PS2鼠标实验中,我们将学习如何利用STM32的GPIO引脚模拟PS/2协议,与PS/2鼠标进行通信。 首先,我们要了解PS/2协议的基本结构。该协议是同步的,由主机发起命令并接收来自鼠标的响应。它包括...
- **实验25**:PS2键盘实验。学习如何与外部设备进行交互。 - **实验26**:SD卡SPI模式实验。掌握高速串行接口的使用。 - **实验27**:485通信实验。深入了解RS-485总线的应用。 - **实验28**:12864液晶显示屏显示A...
本实验指导如何实现鼠标和小键盘的驱动程序,让这些外围设备能够与WINCE系统通信。 #### 3.4 WINCE下PS2键盘驱动程序设计 介绍如何在WINCE操作系统上设计和实现PS2键盘的驱动程序。 #### 3.5 WINCE系统触摸屏实验 ...