|
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Speaker=P1^1;
sbit Led=P1^0;
sbit DATA=P3^4;
sbit CMND=P3^5;
sbit ATT=P3^6;
sbit CLK=P3^7;
uchar code scan[9]={0x01,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar out[9];
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=1700;j>0;j--);
}
void uart_init()
{
TMOD &=0x0F;
TMOD=0x20;
PCON = 0x00;
SCON=0x40;
TH0=0xfd;
TL0=0xfd;
TR1 = 1;
ES=1;
}
void delay(uint n)
{
uint i;
for(i=0;i<n;i++) _nop_();
}
uchar scanout(uchar command)
{
uchar i,j=1;
uchar res=0;
for(i=0;i<=7;i++)
{
if(command&0x01)
CMND=1;
else
CMND=0;
command=command>>1;
_nop_();
_nop_();
CLK=0;
delay(30);
if(DATA) res=res+j;
j=j<<1;
CLK=1;
delay(30);
}
CMND=1;
return res;
}
void Read_PS2(void)
{
uchar i;
ATT=0;
for(i=0;i<9;i++)
{
out[i]=scanout(scan[i]);
}
ATT=1;
}
void main()
{
delayms(500);
Speaker=0;
uart_init();
while(1)
{
Read_PS2();
delayms(500);
Led=0;
if(out[3]==0xEF)
Led=1;
}
}
/*****************************PS2遙控器說明
out[3]==0xEF//左4個按鍵中上
out[3]==0xBF//左4個按鍵中下
out[3]==0x7F//左4個按鍵中左
out[3]==0xDF//左4個按鍵中右
out[4]==0xEF//右4個按鍵中上
out[4]==0xBF//右4個按鍵中下
out[4]==0x7F//右4個按鍵中左
out[4]==0xDF//右4個按鍵中右
out[4]==0xFB//左1,2個按鍵中1
out[4]==0xFE//左1,2個按鍵中2
out[4]==0xF7//右1,2個按鍵中1
out[4]==0xFD//右1,2個按鍵中2
當(dāng)按下MODE鍵手柄MODE LED燈亮起時
out[7] 00——80——FF 左搖桿從左到右
out[8] 00——7F——FF 左搖桿從上到下
out[5] 00——80——FF 右搖桿從左到右
out[6] 00——7F——FF 右搖桿從上到下
當(dāng)手柄MODE LED燈不亮?xí)r,手柄功能同左四右四按鍵
*******************************/
|
|