您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

PS2电脑键盘控制单片机程序

[日期:2008-06-24 ] [来源:net 作者:佚名] [字体: (投递新闻)

实验源程序

#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;
            }
 }
}

  
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐