ps2.c

来自「利用ps2键盘向单片机输入数据」· C语言 代码 · 共 117 行

C
117
字号
#include <reg51.h>
#include <INTRINS.H>
 unsigned char KeyCode;  //键盘键值
#define WAITFORKEYBOARDPULSE  while(!scl); while(scl);
bit KeyBoardConnectFlag = 0;
sbit scl=P1^4;
sbit sda=P1^3;
sbit P2_1=P2^1;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;


/*********************************************************/
//函数:Delay()
//功能:延时
//输入:延时时间设定值
//输出:?
//描述:
/*********************************************************/
void Delay(unsigned char Times)
{
 unsigned char n;
 n = 120;
 for(;Times>0;Times--)
 {
  for(;n>0;n--);

 }
}
/*********************************************************/
//函数:ReadPS2()
//功能:扫描键盘
//输入:
//输出:键值
//描述:
/*********************************************************/\
unsigned char ReadPS2()
{
 //unsigned char KeyCode;  //键盘键值
 unsigned char bitCount; //位数
 while(scl);   // 等待键盘把时钟第一次拉低

   for(bitCount = 8; bitCount != 0; bitCount --)   // 把起始位算入
   {
    WAITFORKEYBOARDPULSE;     // 等待一个有效的下跳沿
    KeyCode  >>= 1;      // 按照PS2格式,数据低位在前
    scl  = 1;
    sda  = 1;
    if(sda == 1)
  {
      KeyCode |= 0x80; // 得到有效的数据位
     }
   }
   WAITFORKEYBOARDPULSE;     // 等待按键发送效验位
   WAITFORKEYBOARDPULSE;     // 等待按键发送终止位
   while(!scl);         // 等待键盘把时钟线拉高

   // return(KeyCode);         // 返回按键扫描
}

/*****************************************************************************/
//main.c
//功能:从PS/2口接受键盘信息控制led灯
//修改:
//时间:2006-10-19
//作者:
/*****************************************************************************/

void main()
{
  P0=0xff;   //初始化P0口
      //  P2_1=0;   //屏蔽LCD

  while(1){
            ReadPS2();
switch(KeyCode)
         {
         case 0x05:   //f1
               LED1=0;
               break;
         case 0x06:
               LED2=0;
               break;
         case 0x04:
           LED3=0;
               break;
         case 0x0c:
     LED4=0;
               break;
         case 0x03:
              LED5= 0;
               break;
         case 0x0b:
              LED6=0;
              break;
        case 0x83:
               LED7= 0;
               break;
        case 0x0a:
               LED8= 0;
               break;       
        case 0x76:
      P0=0xff;
                break;
        default:
  break;
            }
 }
}

⌨️ 快捷键说明

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