51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
PS2电脑键盘控制单片机程序(C)
发布时间:2009/6/2  阅读次数:760  字体大小: 【】 【】【

作者:未知 来源:网路

实验源程序

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

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号