⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 遥控.c

📁 折页机电子刀设置软件
💻 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 + -