#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
当按下MODE键手柄MODE LED灯亮起时
out[7] 00——80——FF 左摇杆从左到右
out[8] 00——7F——FF 左摇杆从上到下
out[5] 00——80——FF 右摇杆从左到右
out[6] 00——7F——FF 右摇杆从上到下
当手柄MODE LED灯不亮时,手柄功能同左四右四按键
*******************************/
|