作者:未知 来源:网路
实验源程序
#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;
}
}
}