📄 遥控.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
#define off 33
//------------------------------
uchar bdata buf45,cmd45;
sbit rbuf=buf45^0;
sbit wbuf=buf45^7;
sbit cmd0=cmd45^0;
sbit cmd=cmd45^7;
//------------------------------
uchar data led[4],ssbuf[10],i,dno,fno;
uchar bdata inbuf,obuf1,obuf3,kbuf,ktemp,tjj[5];
uchar data tgd1s[5],tgds[5],scheck,ledzz,stat,dss;
uint data tkl;
sbit sdai=P1^2;
sbit de=P1^1;
sbit mclk=P1^4;
sbit sdao=P1^5;
sbit dcs=P1^3;
sbit o1=P1^6;
sbit o2=P1^7;
sbit in1=P3^2;
sbit in2=P3^3;
sbit in3=P3^4;
sbit in4=P3^5;
sbit o3=P3^7;
sbit o4=P3^6;
sbit i_in1=inbuf^2;
sbit i_in2=inbuf^3;
sbit i_in3=inbuf^4;
sbit i_in4=inbuf^5;
sbit o_o1=obuf1^6;
sbit o_o2=obuf1^7;
sbit o_o3=obuf3^7;
sbit o_o4=obuf3^6;
sbit k1=kbuf^0;
sbit k2=kbuf^1;
sbit k3=kbuf^2;
sbit k4=kbuf^3;
sbit co4=kbuf^4;
sbit co3=kbuf^5;
sbit co2=kbuf^6;
sbit co1=kbuf^7;
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
uchar code ds[36]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x76,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,
0xf1,0x00,0x80,0x40};
// off . -
uchar code com[4]={0x8f,0x4f,0x2f,0x1f};
uchar idata dd0,dd1,dd2;
//--------------------------------
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 send (void)
{
TR2=0;
TI=0;
SBUF=0xfa;
while (!TI);
TI=0;
for (i=0;i<5;i++)
{
SBUF=ssbuf[i];
while (!TI);
TI=0;
}
de=1;
delay (100);
RI=0;
while (!RI);
if (i>0)
{
scheck=SBUF;
}
de=0;
delay (100);
RI=0;TI=0;
TR2=1;
}
void inkey (void)
{
ktemp=P2;
ktemp|=0xf0;
kl1: while (ktemp==0xff)
{
ktemp=P2;
ktemp|=0xf0;
}
delay (5000);
ktemp=P2;
ktemp|=0xf0;
if (ktemp==0xff) goto kl1;
kbuf=ktemp;
delay (5000);
ktemp=P2;
ktemp|=0xf0;
while (ktemp!=0xff)
{
ktemp=P2;
ktemp|=0xf0;
}
}
void htd (int dd)
{
dd2=dd/100;
dd=dd%100;
dd1=dd/10;
dd0=dd%10;
led[0]=dd0;
led[1]=dd1;
led[2]=dd2;
}
void format ()
{
de=0;
led[0]=13;
led[1]=14;
led[2]=15;
led[3]=0;
ledzz=0;
stat=rdmem(0);
for (i=1;i<5;i++)
{
tgds[i]=rdmem(i);
tgd1s[i]=rdmem(i+4);
tjj[i]=rdmem(i+8);
}
ssbuf[0]=0;
TMOD = 0x20;
TH1 = 0xf3;
TL1 = 0xf3;
TCON = 0x40;
SCON = 0x50;
T2CON=0;
RCAP2L=0x78;
RCAP2H=0xe6;
TH2=0xe6;
TL2=0x78;
ET2=1;
TR2=1;
TXD=1;
RXD=1;
RI=0;TI=0;
EA=1;
}
void ctla (uchar ca)
{
tkl=tgds[ca]*5;
htd(tkl);
led[3]=0x0a;
cal1: inkey();
if (!k2)
{
tkl+=5;
if (tkl>995) tkl=0;
htd(tkl);
}
if (!k3)
{
tkl-=5;
if (tkl>1000) tkl=995;
htd(tkl);
}
if (!k1)
{
tgds[ca]=tkl/5;
wrmem (ca,tgds[ca]);
ssbuf[0]=1;
ssbuf[1]=tgds[ca];
ssbuf[2]=0;
ssbuf[3]=tjj[ca];
ssbuf[4]=0;
send();
scheck-=ssbuf[0];
tkl=scheck*5;
htd(tkl);
inkey();
goto cabak;
}
if (!k4) goto cabak;
goto cal1;
cabak:;
}
void ctlb (uchar ca)
{
tkl=(tgd1s[ca] * 5);
htd(tkl);
led[3]=0x0b;
cbl1: inkey();
if (!k2)
{
tkl+=5;
if (tkl>995) tkl=0;
htd(tkl);
}
if (!k3)
{
tkl-=5;
if (tkl>1000) tkl=995;
htd(tkl);
}
if (!k1)
{
tgd1s[ca]=tkl/5;
wrmem (ca+4,tgd1s[ca]);
ssbuf[1]=tgds[ca];
ssbuf[2]=tgd1s[ca];
ssbuf[3]=tjj[ca];
ssbuf[4]=0;
ssbuf[0]=1;
send();
scheck-=ssbuf[0];
tkl=scheck*5;
htd(tkl);
inkey();
goto cbbak;
}
if (!k4) goto cbbak;
goto cbl1;
cbbak:;
}
void ctle (uchar ca)
{
tkl=(tjj[ca]*5);
htd(tkl);
led[3]=0x0e;
cel1: inkey();
if (!k2)
{
tkl+=5;
if (tkl>200) tkl=50;
htd(tkl);
}
if (!k3)
{
tkl-=5;
if (tkl<50) tkl=200;
htd(tkl);
}
if (!k1)
{
tjj[ca]=tkl/5;
wrmem (ca+8,tjj[ca]);
ssbuf[1]=tgds[ca];
ssbuf[2]=tgd1s[ca];
ssbuf[3]=tjj[ca];
ssbuf[4]=0;
ssbuf[0]=1;
send();
scheck-=ssbuf[0];
tkl=scheck*5;
htd(tkl);
inkey();
goto cebak;
}
if (!k4) goto cebak;
goto cel1;
cebak:;
}
void ctlc ()
{
ssbuf[0]=2;
send();
led[3]=29;
ccl: inkey();
if (!k2)
{
ssbuf[0]=3;
send();
delay (10000);
led[2]=35;
delay (10000);
led[1]=35;
delay (10000);
led[0]=35;
delay (4000);
led[0]=33;
led[1]=33;
led[2]=33;
}
if (!k4)
{
ssbuf[0]=4;
send();
goto ccbak;
}
goto ccl;
ccbak:;
}
void ctld (uchar ca)
{
tgds[1]=2;
tgds[2]=10;
tgds[3]=10;
tgds[4]=10;
tgd1s[1]=30;
tgd1s[2]=30;
tgd1s[3]=30;
tgd1s[4]=30;
tjj[1]=30;
tjj[2]=30;
tjj[3]=30;
tjj[4]=30;
for (i=1;i<5;i++)
{
wrmem (i,tgds[i]);
wrmem (i+4,tgd1s[i]);
wrmem (i+8,tjj[i]);
}
ssbuf[1]=tgds[ca];
ssbuf[2]=tgd1s[ca];
ssbuf[3]=tjj[ca];
ssbuf[4]=0;
ssbuf[0]=1;
send();
scheck-=ssbuf[0];
htd(scheck);
inkey();
}
void ctlf ()
{
ssbuf[0]=5;
send();
de=1;
TI=0;
RI=0;
for (i=0;i<21;i++)
{
while (!RI);
RI=0;
stat=SBUF;
htd(stat);
}
delay (1000);
de=0;
for (i=0;i<10;i++)
{
delay (50000);
}
}
void ctlg ()
{
ssbuf[0]=6;
send();
stat=0;
wrmem(0,0);
}
void ctl1 ()
{
led[0]=33;
led[1]=33;
led[2]=33;
led[3]=0x0a;
fno=1;
cl1: inkey();
if (!k2)
{
fno++;
if (++led[3]>16)
{
led[3]=10;
fno=1;
}
}
if (!k3)
{
fno--;
if (--led[3]<10)
{
led[3]=16;
fno=7;
}
}
if (!k1)
{
if (fno==1)
{
ctla(dno);
}
if (fno==2)
{
ctlb(dno);
}
if (fno==3)
{
ctlc();
}
if (fno==4)
{
ctld(dno);
}
if (fno==5)
{
ctle(dno);
}
if (dno==1)
{
if (fno==6)
{
ctlf();
}
if (fno==7)
{
ctlg();
}
}
goto clbak;
}
if (!k4) goto clbak;
goto cl1;
clbak:;
}
//----------------------------------
void main (void)
{
P0=0;
P2=0;
delay(5000);
P2=0xff;
wrsr (0x30);
format ();
ssbuf[0]=0;
ml1: led[0]=1;
led[1]=33;
led[2]=33;
led[3]=35;
k1=1;
while (k1)
{
inkey();
if (!k2)
{
if (++led[0]>4) led[0]=1;
}
}
dno=led[0];
ctl1();
goto ml1;
}
void cpu_int5(void) interrupt 5
{
TF2=0;
P0=0xff;
P2=com[ledzz];
dss=ds[led[ledzz]];
if (ledzz==0)
{
if (stat==1)
{
dss|=0x80;
}
}
P0=dss;
if (++ledzz>3) ledzz=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -