• 大小: 3.94MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-01
  • 语言: C/C++
  • 标签: PS2  单片机c51  键盘  

资源简介

本文在分析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个文件信息

评论

共有 条评论