?? keyread.c
字號:
#include"reg51.h"
sbit KEY_CLK=P3^6;
sbit KEY_DATA=P3^7;
//PS2每次發送11個數據位分別為起始位+八個數據位+奇偶校驗位+停止位
bit keyread(unsigned char *keyborad);
bit keyread(unsigned char *keyborad)
{
static unsigned char passnumber=0;
xdata unsigned char key;
xdata unsigned int wi=0;
xdata unsigned char i=0;
EA=0; //每次掃描PS2協議時,都要關總中斷允許位,PS2通信時不能被中斷,否則會讀錯數據
KEY_CLK=1;
while(KEY_CLK){if(++wi>50) { KEY_CLK=0; EA=1;return(0);} } //拉高時鐘線,如果鍵盤有數據要發,要在50微秒內拉低時鐘線
while(!KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1;return(0);}} //跳過始位
for(i=0;i<10;i++)
{ while(KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1; return(0); }} //return(0);
if(i>=0&&i<=7) //只接收八位數據位,跳過奇偶校驗位和停止位
{ key=key>>1;
if(KEY_DATA) key=key|0x80;}
while(!KEY_CLK)
{
if(++wi>500) { KEY_CLK=0;EA=1;return(0);}
}
}
KEY_CLK=0;EA=1; //拉低時鐘線,抑制鍵盤發送數據,再開總中斷允許位
if(key==0xE1) //第三類鍵
passnumber=passnumber+2;
if(key==0xE0) //第二類鍵
++passnumber; //這里有passnumber是為了只接后一組數據中的第一個,屏蔽每兩個
if(key==0xF0)
passnumber=passnumber+2;
if(passnumber==0)
{ *keyborad=key;
return(1); //如果成功接收一個鍵盤通碼,就把flagre置1
}
else
{
--passnumber;
return(0);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -