⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcu51控制ps2.txt

📁 单片机控制PS2键盘的实例源码 本程序源码只供学习参考
💻 TXT
字号:
/*============================================================
使用PS/2键盘的示例 
==============================================================
Keyboard接线
PS/2--------51
1 DATA------P3.4
3 GND
4 VCC
5 CLK-------P3.3 接在51的外部中断,触发方式为低电平

本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。

[注:AT89x51使用12M晶振]
[MedWin编译运行通过 程序中没有做键盘数据的奇偶校验 只有接受 没有发送]

=============================================================*/
#include "D:\Manley\C51\INC\Atmel\at89x51.h"

#define Key_Data P1_3 /*定义Keyboard引脚*/
#define Key_CLK P3_2

static unsigned char IntNum = 0; /*中断次数计数*/
static unsigned char KeyV; /*键值*/
static unsigned char BF = 0; /*标识是否有字符被收到*/

void main(void)
{
IT0 = 0; /*设外部中断1为低电平触发*/
EA = 1;
EX0 = 1; /*开中断*/

do
{
if (BF)
BF=0; /*设断点,看变量KeyV*/
else
EA = 1; /*开中断*/
}
while(1);
}


void Keyboard_out(void) interrupt 0
{
if ((IntNum > 0) && (IntNum < 9))
{ 
KeyV = KeyV >> 1; /*因键盘数据是低>>高,结合上一句所以右移一位*/
if (Key_Data) KeyV = KeyV | 0x80; /*当键盘数据线为1时为1到最高位*/
}
IntNum++;
while (!Key_CLK); /*等待PS/2CLK拉高*/

if (IntNum > 10)
{
IntNum = 0; /*当中断11次后表示一帧数据收完,清变量准备下一次接收*/
BF = 1; /*标识有字符输入完了*/
EA = 0; /*关中断等显示完后再开中断 (注:如这里不用BF和关中断直接调Decode()则所Decode中所调用的所有函数要声明为再入函数)*/
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -