?? 刀控板.c
字號:
#include <reg52.h>
#include <math.h>
#include <stdio.h>
#include <ABSACC.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//------------------------------
uchar bdata buf45,cmd45;
sbit rbuf=buf45^0;
sbit wbuf=buf45^7;
sbit cmd0=cmd45^0;
sbit cmd=cmd45^7;
//------------------------------
uchar data timeh0,timel0,timeh1,timeh2,timel2,timel1,inbuf,i;
uchar data ssbuf[10],sscom,gden,tjj,tjjs;
uchar bdata inbuf1,inbuf3;
uchar data tgd1,tgd1s,tgd,tgds,tgd1r,zddo,gd1en;
sbit sdai=P1^1;
sbit de=P1^4;
sbit mclk=P1^3;
sbit sdao=P1^2;
sbit dcs=P3^4;
sbit xin=P1^5;
sbit jj=P1^6;
sbit gd=P1^7;
sbit gd1=P3^2;
sbit plc=P3^5;
sbit ixin=inbuf1^5;
sbit ijj=inbuf1^6;
sbit igd=inbuf1^7;
sbit igd1=inbuf3^2;
sbit iplc=inbuf3^5;
bit oldgd1,gdex,oldgd,oldjj,gd1f,gd1e,iszd,isof,jjex;
//--------------------------------
//Protected 0x3c
//work 0x00;
void delay (uint nh)
{
while (--nh!=0);
}
void trans (void)
{
uchar data ii;
mclk=0;
for (ii=8;ii>0;ii--)
{
sdao=wbuf;
mclk=1;
_nop_();
buf45<<=1;
mclk=0;
_nop_();
}
sdao=0;
}
void rdsr (void)
{
uchar i;
dcs=1;
mclk=0;
dcs=0;
cmd45=0x05;
for (i=8;i>0;i--)
{
sdao=cmd;
mclk=1;
cmd45<<=1;
mclk=0;
}
sdao=0;
sdai=1;
for (i=8;i>0;i--)
{
cmd0=sdai;
mclk=1;
cmd45=_crol_(cmd45,1);
mclk=0;
}
cmd45=_cror_(cmd45,1);
dcs=1;
}
void wwip (void)
{
uchar l;
l=0;
cmd0=1;
while (cmd0 && (++l<=200))
{
rdsr ();
}
}
void wren (void)
{
mclk=0;
dcs=0;
buf45=0x06;
trans ();
wwip ();
dcs=1;
}
void wrsr (uchar srmd)
{
wren ();
dcs=1;
mclk=0;
dcs=0;
buf45=0x01;
trans ();
buf45=srmd;
trans ();
wwip ();
dcs=1;
}
void wrmem (uchar dd,uchar aa)
{
wren ();
dcs=1;
mclk=0;
buf45=0x02;
dcs=0;
trans ();
buf45=dd;
trans ();
buf45=aa;
trans ();
cmd45=0;
wwip ();
dcs=1;
mclk=1;
}
uchar rdmem (uchar dd)
{
uchar i;
dcs=1;
mclk=0;
buf45=0x03;
dcs=0;
trans ();
buf45=dd;
trans ();
for (i=8;i>0;i--)
{
_nop_();
rbuf=sdai;
mclk=1;
buf45=_crol_(buf45,1);
mclk=0;
_nop_();
}
buf45=_cror_(buf45,1);
dcs=1;
return (buf45);
}
//----------------------------------------
void input (void)
{
inbuf1=P1;
inbuf3=P3;
}
void jjexe (void)
{
P0=0xdb; //1. CD
delay(200);
P0=0xdc; //2. ZD,CD,XC
delay(3000);
P0=0xd9; //3. ZD,CD
delay(5000);
iszd=1;
isof=0;
zddo=3;
}
void gdexe (void)
{
iszd=0;
P0=0xcb; //4. ALL_OFF
delay(200);
P0=0xa3; //5. LH,FD
delay(10000);
P0=0xe3; //6. LH
delay(200);
P0=0xf3; //7. LH,CD
}
//----------------------------------
void main (void)
{
delay (1000);
oldgd=0;
oldgd1=1;
oldjj=1;
de=0;
gden=1;
gd1e=0;
gd1en=rdmem(0);
tgd1r=50;
tgds=rdmem(1);
tgd=tgds;
tgd1s=rdmem(5);
tgd1=tgd1s;
tjj=rdmem(9);
gd1f=0;
jjexe();
isof=0;
delay(1000);
wrsr(0x20);
timeh0=0xec;
timel0=0x78;
timeh2=0xec;
timel2=0x78;
TMOD = 0x21;
TH1 = 0xf3;
TL1 = 0xf3;
TCON = 0x40;
SCON = 0x50;
T2CON=0;
RCAP2L=timel2;
RCAP2H=timeh2;
TH0=timeh0;
TL0=timel0;
TH2=timeh2;
TL2=timel2;
TXD=1;
RXD=1;
RI=0;TI=0;
PS=1;
ES=1;
ET2=0;
TR2=0;
EA=1;
while (1)
{
dcs=~dcs;
input ();
if (gden)
{
if (!igd && oldgd)
{
if (tgd==0)
{
gdexe();
}
else
{
TH0=timeh0;
TL0=timel0;
ET0=1;
TR0=1;
}
}
if (igd)
{
delay (10);
input ();
if (igd)
{
oldgd=1;
}
}
else oldgd=0;
}
if (!igd1 && oldgd1)
{
if (gd1en==1)
{
ET2=1;
TR2=1;
}
}
if (igd1)
{
delay (10);
input ();
if (igd1)
{
oldgd1=1;
tgd1=tgd1s;
}
}
else oldgd1=0;
if (iszd)
{
if (isof)
{
isof=0;
P0=0xd9;
}
else
{
isof=1;
zddo=3;
P0=0xcb;
}
}
if (!ijj && oldjj)
{
jjexe();
}
if (ijj)
{
delay (10);
input ();
if (ijj)
{
oldjj=1;
}
}
else oldjj=0;
if (gdex)
{
gdex=0;
gdexe();
}
if (jjex)
{
jjex=0;
jjexe();
}
if (sscom)
{
sscom=0;
if (ssbuf[0]==1)
{
tgds=ssbuf[1];
tgd=tgds;
tgd1s=ssbuf[2];
tgd1=tgd1s;
tjj=256-ssbuf[3];
wrmem (1,tgds);
wrmem (5,tgd1s);
wrmem (9,tjj);
}
if (ssbuf[0]==2)
{
gden=0;
}
if (ssbuf[0]==3)
{
if (tgd==0)
{
gdexe();
}
else
{
TH0=timeh0;
TL0=timel0;
ET0=1;
TR0=1;
}
}
if (ssbuf[0]==4)
{
gden=1;
jjexe();
}
if (ssbuf[0]==5)
{
gd1en=0;
wrmem(0,0);
}
if (ssbuf[0]==6)
{
gd1en=1;
wrmem(0,1);
}
}
}
}
void cpu_int1(void) interrupt 1
{
tgd--;
if (tgd==0)
{
gdex=1;
}
if (tgd==tjj)
{
ET0=0;
TR0=0;
jjex=1;
tgd=tgds;
}
TH0=timeh0;
TL0=timel0;
}
void cpu_int4(void) interrupt 4
{
uchar data is;
EA=0;
while (!RI);
RI=0;
if (SBUF==0xfa)
{
for (is=0;is<5;is++)
{
while (!RI);
RI=0;
ssbuf[is]=SBUF;
}
ssbuf[10]=0;
for (is=0;is<5;is++)
{
ssbuf[10]+=ssbuf[is];
}
de=1;
delay (500);
TI=0;
SBUF=ssbuf[10];
while (!TI);
de=0;
sscom=1;
delay (500);
}
RI=0;TI=0;
EA=1;
}
void cpu_int5(void) interrupt 5
{
TF2=0;
if (!gd1e)
{
tgd1--;
input();
if (!igd1)
{
if (tgd1==0)
{
iplc=0;
inbuf=P3;
inbuf &= 0xdf;
P3=inbuf;
tgd1=tgd1s;
gd1e=1;
}
}
else
{
if (gd1f)
{
tgd1=tgd1s;
ET2=0;
TR2=0;
TH2=timeh2;
TL2=timel2;
gd1f=0;
}
else gd1f=1;
}
}
else
{
if (--tgd1r==0)
{
gd1e=0;
ET2=0;
TR2=0;
TH2=timeh2;
TL2=timel2;
inbuf=P3;
inbuf |= 0x24;
P3=inbuf;
tgd1=tgd1s;
tgd1r=50;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -