资源简介
本文在分析PS/2协议和PS/2键盘和PS/2鼠标工作原理与特点的基础上,给出在AT89C51单片机上实现对PS/2键盘支持的硬件连接方法以及驱动程序的设计实现。
代码片段和文件信息
//-----------------------函数声明,变量定义--------------------------------------------------------
#include
#define KEY P1
unsigned char key_code; //键值
unsigned char key_buf[8]; //按键缓冲区
unsigned char key_COUNT; //按键计数器
unsigned char COUNT_TI; //定时中断计数
//-----------------------变量声明---------------------------------------------------------------------
void system_init(void ); //初始化,设置定时器0的工作方式,供主程序调用
void TIMER0_SCANkey(); //定时器0中断处理函数
bit judge_hitkey(); //判断是否有键按下,有返回1,没有返回0
unsigned char scan_key(); //扫描键盘,返回键值(高四位代表行,低四位代表列)
void key_manage(unsigned char keycode); //按键处理
//...........每个按键对应一个处理程序
//--------------------------------------------------------------------------------------------------
// 函数名称: scan_key
// 函数功能: 扫描键盘,返回键值(高四位代表行,低四位代表列)
// 无键按下返回0
//--------------------------------------------------------------------------------------------------
unsigned char scan_key() //扫描键盘,返回键值(高四位代表行,低四位代表列)
{
unsigned char scancodekeycodekeycode_linekeycode_row;
scancode=0xF0; //列置低,行置高
KEY=scancode; //输入扫描码,扫描行
keycode_line=KEY;
scancode=0xF0; //列置高,行置低
KEY=scancode; //输入扫描码,扫描列
keycode_row=KEY;
keycode=(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
return(keycode);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: Timer0_init()
// 函数功能: 初始化设置
// 设定INT0的工作方式
//--------------------------------------------------------------------------------------------------
void Timer0_init(void )
{
TMOD=0x20; //定时器0工作在方式2的定时模式
ET0=1; //定时器0中断允许
TH0=0;
TL0=0;
TR0=1; //定时器0开始计数
EA=1; //系统中断允许
}
//--------------------------------------------------------------------------------------------------
// 函数名称: TIMER0_intrupt
// 函数功能: 定时器0中断处理程序 按键定时查询
//--------------------------------------------------------------------------------------------------
void TIMER0_SCANkey() interrupt 1 using 1
{
EA=0; //系统中断禁止
if((++COUNT_TI)%30==0)
{
switch(COUNT_TI/30)
{
case 1:if(scan_key()==0)
COUNT_TI=0; //无键按下,计数值归零
break;
case 2:break;
case 3:if(scan_key()==0)
COUNT_TI=0; //无键按下,计数值归零,上次按键未扰动
else
key_code=scan_key(); //又有效建,获取键值
break;
default:if(scan_key()==0) //等待按键释放
key_manage(key_code); //有一个有效按键,调用按键处理程序
}
}
EA=1;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: key_manage
// 函数功能: 有效按键处理
//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 94138 2009-04-09 14:38 ps2\PS2_键盘\Interfacing the PC AT Keyboard.pdf
文件 4525 2008-07-25 19:23 ps2\PS2_键盘\Keil C\LCD1602_4.H
文件 1565 2008-07-25 18:23 ps2\PS2_键盘\Keil C\PS2_Key.C
文件 4320 2008-07-25 18:33 ps2\PS2_键盘\Keil C\PS2_Key.H
文件 2973 2008-07-25 18:33 ps2\PS2_键盘\Keil C\PS2_Key.hex
文件 1334 2008-07-25 18:33 ps2\PS2_键盘\Keil C\PS2_Key.Opt
文件 2003 2008-07-25 18:33 ps2\PS2_键盘\Keil C\PS2_Key.Uv2
文件 112964 2009-04-09 14:38 ps2\PS2_键盘\Keyboard1.pdf
文件 286732 2008-10-15 16:55 ps2\PS2_键盘\PS2 PC键盘编程参考资料.mht
文件 1692 2008-07-27 21:15 ps2\PS2_键盘\PS2.H
文件 455248 2008-07-22 20:31 ps2\PS2_键盘\PS2键盘+LCD1602显示.pdf
文件 672518 2008-06-06 15:50 ps2\PS2_键盘\PS2键盘控制LCD12864 实验(二十一).pdf
文件 1498 2005-04-12 16:33 ps2\PS2_键盘\PS2键盘的设计\head.h
文件 1086 2005-05-14 13:56 ps2\PS2_键盘\PS2键盘的设计\jianpan.Opt
文件 1981 2005-05-14 07:04 ps2\PS2_键盘\PS2键盘的设计\jianpan.Uv2
文件 3792 2005-05-14 04:48 ps2\PS2_键盘\PS2键盘的设计\PS-2.c
文件 4092 2005-05-14 06:11 ps2\PS2_键盘\PS2键盘的设计\通信.c
文件 8961 2009-04-17 20:45 ps2\PS2_键盘\PS2键盘的设计.C
文件 8422 2009-04-17 20:37 ps2\PS2_键盘\单片机应用PS2键盘的实例.C
文件 290101 2008-10-15 17:27 ps2\PS2_键盘\单片机系统中PS2键盘驱动程序的设计.mht
文件 3299 2008-07-25 18:35 ps2\PS2_键盘\单片机驱动标准PC机键盘的C51程序.C
文件 198445 2008-10-15 17:24 ps2\PS2_键盘\用AT89C2051设计的PC-AT键盘.mht
文件 4234 2009-04-19 14:43 ps2\PS2_键盘\键盘+LCD1602显示\LCD1602_8A.H
文件 956 2009-04-19 16:37 ps2\PS2_键盘\键盘+LCD1602显示\LCD_ASCII.H
文件 36705 2009-04-18 19:00 ps2\PS2_键盘\键盘+LCD1602显示\PS2 Key_Scan_Code.jpg
文件 2239 2009-04-19 16:40 ps2\PS2_键盘\键盘+LCD1602显示\PS2键盘.hex
文件 1475 2009-04-19 16:41 ps2\PS2_键盘\键盘+LCD1602显示\PS2键盘.Opt
文件 2011 2009-04-19 13:37 ps2\PS2_键盘\键盘+LCD1602显示\PS2键盘.Uv2
文件 1797 2009-04-19 16:37 ps2\PS2_键盘\键盘+LCD1602显示\PS_keyboard.C
文件 4783 2009-04-19 16:37 ps2\PS2_键盘\键盘+LCD1602显示\PS_keyboard.H
............此处省略80个文件信息
- 上一篇:socket编程聊天室C++
- 下一篇:DX9.0小游戏C++代码
相关资源
- C语言键盘记录程序
- MFC 绘图 键盘控制图片移动
- 单片机C51学习KEIL C的仿真
- opengl光照旋转交互
- Qt版推箱子源码-鼠标键盘功能都有
- mfc按CEdit编辑框弹出自定义键盘
- MFC小游戏,背景位图,用键盘上的上
- 基于MFC的虚拟键盘
- C++虚拟数字键盘 源代码 可扩展
- MFC键盘监视器
- 五子棋小游戏选择棋盘、棋子;双方
- 木马程序设计及植入技术
- 无钩子的键盘记录完美实现(VC++)
- C语言 键盘记录
- VC++软键盘源码和QQ软键盘差不多哦
- 操作系统C语言实现银行家算法,键盘
- 矩阵键盘C语言代码,proteus仿真电路
- 从键盘上输入一串字符包括字母、数
- 键盘控制步进电机正反转和调速c语言
- 51单片机控制PS2键盘的程序KEIL环境C
- 基于MFC的软键盘
- Ch376操作鼠标键盘
- 用C++ 和opengl实现多个雪人,而且可以
- C# 键盘鼠标全局钩子拦截键盘鼠标所
- 唯一可译码判决准则 1使用的编程:
- 计算机图形学考试内容-Opengl-会移动的
- 3*4矩阵键盘
- 4X4矩阵键盘+LCD1602显示
- 自己编写的基于单片机的自己编的4
- 51单片机c语言4x4矩阵键盘实验详细操
评论
共有 条评论