📄 51keyboard_display.c
字号:
sw=0;
gw=0;
}
void zijian() /////////////////////////////////////////
{
STATE0 = 0;
STATE1 = 1;
while(keyflag==0);
while(keyrelease32!=0)
{
STATE0 = 0;
STATE1 = 1;
while(keyflag==1||fu==0||yang==0||zheng==0||fan==0||sudu==0)
{
if(keyrelease1==0)
{one=1;two=0;three=0;four=0;}
else if(keyrelease2==0)
{one=0;two=1;three=0;four=0;}
else if(keyrelease3==0)
{one=0;two=0;three=1;four=0;}
else if(keyrelease4==0)
{one=0;two=0;three=0;four=1;}
else if(keyrelease11==0&&one==1)
{STATE0=0;STATE1=2;lingweiread();}
else if(keyrelease11==0&&two==1)
{STATE0=0;STATE1=3;lingweiwrite();}
else if(keyrelease11==0&&three==1)
{STATE0=0;STATE1=4;jiaojuread();}
else if(keyrelease11==0&&four==1)
{STATE0=0;STATE1=5;jiaojuwrite();}
else if(keyrelease31==0)
{
c01=1;
c02=15;
one=0;
two=0;
three=0;
four=0;
}
else if(keyrelease22==0) /////////////瞄准
{
c01=1;
c02=6;
send(0x16);
}
else if(keyrelease23==0) //稳定
{
c01=1;
c02=7;
send(0x17);
}
else if(keyrelease21==0) //急停
{
c01=1;
c02=5;
send(0x15);
}
else if((keyrelease13==0&&sudu==0)||(keyrelease30==0&&yang==0))
{
c01=1;
c02=1;;
send(0x11);
}
else if(keyrelease13==0&&sudu==1) //方向键值 连发
{
c01=0;
c02=0x0d;
send(0x0D);
if(yang==1)
{
send(0x21);
send(0x21);
send(0x21);
}
}
else if(keyrelease30==0&&keyrelease13==1&&keyrelease14==1&&keyrelease15==1&&keyrelease16==1)
{
c01=1;
c02=8;
delay(600000);
if(sudu==1)
{
send(0x18);
send(0x21);
send(0x21);
}
}
else if((keyrelease14==0&&sudu==0)||(keyrelease30==0&&fu==0))
{
c01=1;
c02=2;
send(0x12);
}
else if(keyrelease14==0&&sudu==1)
{
c01=0;
c02=0x0e;
send(0x0E);
if(fu==1)
{
send(0x21);
send(0x21);
send(0x21); //若方向键弹起则发送三个弹起键值
}
}
else if((keyrelease15==0&&sudu==0)||(keyrelease30==0&&fan==0))
{
c01=1;
c02=3;
send(0x13);
}
else if(keyrelease15==0&&sudu==1)
{
c01=0;
c02=0x0f;
send(0x0F);
if(fan==1)
{
send(0x21);
send(0x21);
send(0x21);
}
}
else if((keyrelease16==0&&sudu==0)||(keyrelease30==0&&zheng==0))
{
c01=1;
c02=4;
send(0x14);
}
else if(keyrelease16==0&&sudu==1) //方向键值 连发
{
c01=1;
c02=0;
send(0x10);
if(zheng==1)
{
send(0x21);
send(0x21);
send(0x21); //若方向键弹起则发送三个弹起键值
}
}
else
{
one=0;
two=0;
three=0;
four=0;
}
rkey=0;
}
c01=2;
c02=1;
}
STATE0=0;
STATE1=0;
rkey=0;
c01=0x0a;
c02=0x0c;
}
void ceju()
{
unsigned int gw,sw,bw;
bit lockH; //锁定H标志位
dataH = 0;
gw=0;
send(0x1F);
while(keycode!=32)
{
STATE0 = 1;
STATE1 = 0;
while(keyflag==1);
if(rkey==1)
{
keycode = key;
if(keycode==31||keycode==30||keycode==23)
continue;
else if(keycode>=0&&keycode<=9&&lockH!=1)
{ send(keycode); /////////////////////////////////////////////////////// 测试串口
bw=sw;
sw=gw;
gw=keycode;
dataH=100*bw + 10*sw + gw;
if(dot2==1)
dot2=0;
else if(dot1==1)
{
dot2=1;
dot1=0;
}
else if(dot0==1)
{
dot1=1;
dot0=0;
}
}
else if(keycode==10&&lockH==0)
{
send(10); //////////////////////////////////// 测试串口
if(dot0||dot1||dot2)
rkey=0;
else
dot0=1;
}
else if(keycode==11&&lockH!=1&&dataH!=0)
{
lockH=1;
if(!(dot1||dot2))
targetH = (float)dataH;
else
{
if(dot1==1)
targetH = (float)dataH/10 ;
else if(dot2==1)
targetH = (float)dataH/100;
}
}
else if(keycode==22&&lockH==1) /////////////瞄准
{
send(0x16);
}
else if(keycode==21) //急停
{
send(0x15);
break;
}
else if((keycode==13&&sudu==0)||(keycode==30&&yang==0))
send(0x11);
else if(keycode==13&&sudu==1) //方向键值 连发
{
send(0x0D);
if(yang==1)
{
send(0x21);
send(0x21);
send(0x21);
yang=0;
}
}
else if((keycode==14&&sudu==0)||(keycode==30&&fu==0))
send(0x12);
else if(keycode==14&&sudu==1)
{
send(0x0E);
if(fu==1)
{
send(0x21);
send(0x21);
send(0x21); //若方向键弹起则发送三个弹起键值
fu=0;
}
}
else if((keycode==15&&sudu==0)||(keycode==30&&fan==0))
send(0x13);
else if(keycode==15&&sudu==1)
{
send(0x0F);
if(fan==1)
{
send(0x21);
send(0x21);
send(0x21);
fan=0;
}
}
else if((keycode==16&&sudu==0)||(keycode==30&&zheng==0))
send(0x14);
else if(keycode==16&&sudu==1) //方向键值 连发
{
send(0x10);
if(zheng==1)
{
send(0x21);
send(0x21);
send(0x21); //若方向键弹起则发送三个弹起键值
zheng=0;
}
}
rkey=0;
}
}
send(0x20);
STATE0=0;
STATE1=0;
gw=0;
sw=0;
bw=0;
rkey=0;
dataH=0;
lockH=0;
dot0=dot1=dot2=0;
}
void SMBus_Init (void)
{
SMB0CN = 0x40;
SMB0CR = 0xE9;
}
void Timer3_Init (void)
{
TMR3CN = 0x00;
TMR3RL = 0x92;
TMR3 = TMR3RL;
EIE2 |= 0x01;
TMR3CN |= 0x04;
}
void SMBUS_ISR (void) interrupt 7
{
bit FAIL = 0;
static char i;
static bit SEND_START = 0;
switch (SMB0STA)
{
case SMB_START:
SMB0DAT = TARGET;
SMB0DAT &= 0xFE;
SMB0DAT |= SMB_RW;
STA = 0;
i = 0;
break;
case SMB_RP_START:
SMB0DAT = TARGET;
SMB0DAT |= SMB_RW;
STA = 0;
i = 0;
break;
case SMB_MTADDACK:
SMB0DAT = WORD_ADDR;
if (SMB_RANDOMREAD)
{
SEND_START = 1;
SMB_RW = READ;
}
break;
case SMB_MTADDNACK:
if(SMB_ACKPOLL)
{
STA = 1;
}
else
{
FAIL = 1;
}
break;
case SMB_MTDBACK:
if (SEND_START)
{
STA = 1;
SEND_START = 0;
break;
}
if (SMB_RW==WRITE)
{
if (i < SMB_DATA_LEN)
{
SMB0DAT = *pSMB_DATA_OUT;
pSMB_DATA_OUT++;
i++;
}
else
{
STO = 1;
SMB_BUSY = 0;
}
}
else {}
break;
case SMB_MTDBNACK:
if(SMB_ACKPOLL)
{
STA = 1;
}
else
{
FAIL = 1;
}
break;
case SMB_MTARBLOST:
FAIL = 1;
break;
case SMB_MRADDACK:
if (i == SMB_DATA_LEN)
{
AA = 0;
}
else
{
AA = 1;
}
break;
case SMB_MRADDNACK:
if(SMB_ACKPOLL)
{
STA = 1;
}
else
{
FAIL = 1;
}
break;
case SMB_MRDBACK:
if ( i < SMB_DATA_LEN )
{
*pSMB_DATA_IN = SMB0DAT;
pSMB_DATA_IN++;
i++;
AA = 1;
}
if (i == SMB_DATA_LEN)
{
SMB_BUSY = 0;
AA = 0;
STO = 1;
}
break;
case SMB_MRDBNACK:
*pSMB_DATA_IN = SMB0DAT;
STO = 1;
SMB_BUSY = 0;
AA = 1;
break;
default:
FAIL = 1;
break;
}
if (FAIL)
{
SMB0CN &= ~0x40;
SMB0CN |= 0x40;
STA = 0;
STO = 0;
AA = 0;
SMB_BUSY = 0;
FAIL = 0;
}
SI = 0;
}
void Timer3_ISR (void) interrupt 14
{
SMB0CN &= ~0x40;
SMB0CN |= 0x40;
TMR3CN &= ~0x80;
SMB_BUSY = 0;
}
void EEPROM_ByteWrite(unsigned char addr, unsigned char dat)
{
while (SMB_BUSY);
SMB_BUSY = 1;
TARGET = EEPROM_ADDR;
SMB_RW = WRITE;
SMB_SENDWORDADDR = 1;
SMB_RANDOMREAD = 0;
SMB_ACKPOLL = 1;
WORD_ADDR = addr;
SMB_SINGLEBYTE_OUT = dat;
pSMB_DATA_OUT = &SMB_SINGLEBYTE_OUT;
SMB_DATA_LEN = 1;
STA = 1;
}
unsigned char EEPROM_ByteRead(unsigned char addr)
{
unsigned char retval;
while (SMB_BUSY);
SMB_BUSY = 1;
TARGET = EEPROM_ADDR;
SMB_RW = WRITE;
SMB_SENDWORDADDR = 1;
SMB_RANDOMREAD = 1;
SMB_ACKPOLL = 1;
WORD_ADDR = addr;
pSMB_DATA_IN = &retval;
SMB_DATA_LEN = 1;
STA = 1;
while(SMB_BUSY);
return retval;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -