?? shuru.c
字號:
/*========================================
用PS2的小鍵盤采集三位數據,只能用一般的鍵
輸入時,先輸入的是高位
當不足三位時要用0補齊
當輸入的是高于三位的數據時,再從高位計起
=======================================*/
#include<reg51.h>
#define uchar unsigned char
sbit Clk=P3^2; //時鐘線接在P32
sbit Dat=P3^0; //數據線接在P30
uchar Degree =0; //中斷次數
uchar Data =0; //句路數據
uchar Data_Over =0; //確定標志位
uchar i =0;
uchar Key_Data[3] =0; //得到的鍵盤輸入值
uchar Get_Key_Data = 0; //最后得到的數據
void Dispose(void);
/*=====================
中斷函數,負責采集數據
=======================*/
void Get_data(void) interrupt 0 using 1
{
if((Degree>11)&&(Degree<20))
{
Data=Data>>1;
if(Dat){Data|=0x80;};
} //只用采集到的中間11位的八位數據
Degree++;
if(Degree>=33) //32次后重新計數
{
Degree=0;
Dispose(); //進行數據處理,只在中斷中得到數據,不用等待
}
}
/*===========================
數據處理函數,處理得到的數據
============================*/
void Dispose(void)
{
uchar n=0;
if (Data==0x77) //收到NUM(確定)
{
Get_Key_Data=Key_Data[0]*100
+Key_Data[1]*10
+Key_Data[2];
for(n=0;n<3;n++) Key_Data[n] = 0 ; //將數組置為0
i = 0; //將下次收到的數據放在第一
Data_Over = 1; //確定標志
}
else
{
if(i>=3) i = 0; //可以按鍵多于3次
switch(Data)
{
case 0x70: Key_Data[i]=0; break;
case 0x69: Key_Data[i]=1; break;
case 0x72: Key_Data[i]=2; break;
case 0x7A: Key_Data[i]=3; break;
case 0x6b: Key_Data[i]=4; break;
case 0x73: Key_Data[i]=5; break;
case 0x74: Key_Data[i]=6; break;
case 0x6C: Key_Data[i]=7; break;
case 0x75: Key_Data[i]=8; break;
case 0x7D: Key_Data[i]=9; break;
}
i++;
}
}
void main()
{
IT0=1;
EA=1;
EX0=1;
while(1) //下面的寫法可以直接在Dispose函數中P2=Get_Key_Data;
{
if(Data_Over) //這樣寫只是為了用在其他程序上的接口
{
P2=Get_Key_Data;
Data_Over=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -