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

📄 led1.c

📁 锅炉水位模拟系统。由两排各125个小LED灯组成
💻 C
字号:
#include<NI51REG.H>
#define FLASH_HZ 500
#define DELAY_BASE 100
#define LIGHTS 125
#define MS 4
#define TPS 411
//#define THISADDR 0x25
#define UARTBD 0xfa

#define ISP_WAIT 0x03
#define ISP_READ 1
#define ISP_WRITE 2
#define ISP_ERASE 3

sbit clk = P1^5;
sbit dat = P1^4;
sbit gate1 = P1^2;
sbit gate2 = P1^3;
unsigned int cnt;
unsigned char rg;
unsigned int Now_P = 0;
unsigned int Aim_P = 0;
unsigned int Dis_P = 0;
unsigned long Time_D = 0;
unsigned  long Time = 1;
int timecnt = 0;
unsigned int  T = 1;
unsigned int  T_tmp= 0;
unsigned long  Delay_num;
unsigned long num;
int De = 0;
unsigned int F=0;
unsigned int N=0;

bit TrStar_sign = 0;//transport start
bit NewCmd_sign = 0;
bit run_sign = 1;

unsigned char TrCounter = 0;
unsigned char TrData[5] = 0;
unsigned char AimData[5] = 0;
unsigned char mode = 0;
unsigned char THISADDR = 0x2A;
 Move(int x);
void delay_1ms() interrupt 1
{
  if(num > 0)
  {
    num--;
    TH0 = 0xFc;
    TL0 = 0x6e;
  }
}
void delay(unsigned long  x)
{
   TR0 = 1;
   num = x;
   while(num>0)
   {}
   TR0 = 0;
}
void serial() interrupt 4
{
	//unsigned char i;
        EA = 0;
	if(RI)
	{
		RI = 0;
                //run_sign = ~run_sign;
                /*test*/
                /*if(SBUF == 0x0c)
                {
                    run_sign = 0;
                }
                else if(SBUF == 0xbb)
                {
                    run_sign = 1;
                }
                /*test end*/

	       if((!TrStar_sign)&&(SBUF == 0x0c))
		{
			TrStar_sign = 1;
			TrCounter = 0;
                        //run_sign = ~run_sign;
		}

		else if(TrStar_sign)
		{
                       if(TrCounter < 5)
			{

				TrData[TrCounter] = SBUF;
                                TrCounter++;
			}
                        else if(SBUF == 0xbb)
                        {
                                if(TrData[0] == THISADDR)
                                {
                                    AimData[0] = TrData[0];
                                    AimData[1] = TrData[1];
                                    AimData[2] = TrData[2];
                                    AimData[3] = TrData[3];
                                    AimData[4] = TrData[4];
                                    NewCmd_sign = 1;
				    TrCounter++;
                                }
                                TrCounter = 0;
                                TrStar_sign = 0;
                        }
                }
	}
        EA = 1;
}
 /*void serial() interrupt 4
{
	unsigned char i;
        EA = 0;
	if(RI)
	{
		RI = 0;

                run_sign = ~run_sign;
              }
        EA = 1;
}*/
unsigned char isp_read(unsigned int addr)
{
    unsigned char nop;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_READ;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
    return ISP_DATA;
}

void isp_erase(unsigned int addr)
{
    unsigned char nop;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_ERASE;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
}

void isp_write(unsigned int addr,unsigned char dat)
{
    unsigned char nop;
    ISP_DATA = dat;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_WRITE;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;//无意义 延时操作
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
}

/*void delay(unsigned int kk)
{
	unsigned int t1,t2;
        for (t1 = 0;t1<60;t1++)
        {
	for(t2 = 0;t2 < kk;t2++);
        }
}*/

 Move(int x)
{
   unsigned int i,NUM1,NUM2;
     x = (x > LIGHTS)?LIGHTS:x;
     x = (x < 1)?0:x;

     gate1 = 0;
     gate2 = 1;
     NUM1 = (LIGHTS-x) + (LIGHTS-x)/7;
     NUM2 = (x+x/7);
     if(!NewCmd_sign)
     {
     for(i = 0;i < NUM1;i++)
     {

         clk = 0;

         dat = 1;

         clk = 1;

     }
     for(i = 0;i < NUM2;i++)
     {

         clk = 0;

         dat = 0;

         clk = 1;
     }

	 gate1 = 1;
         gate2 = 0;
         }
         else
         return(0);
}

 test_mode()
{     Delay_num = AimData[2];
	while(1)
	{
		if(!NewCmd_sign)
		{

			Aim_P = (Aim_P == 124)?0:Aim_P+1;
			Move(Aim_P);
                        delay(Delay_num);
               }
        else
		{
			Now_P = Aim_P;
			return(0);
		}
	}
}

 shake_mode()
{
              N = AimData[3];
	      F=AimData[2];
   while(1)
 {
    if(!NewCmd_sign)
      {   De = ~De;
          Aim_P = (De)?(Aim_P+F):(Aim_P-F);
          Now_P = (De)?(Aim_P-F):(Aim_P+F);
          Aim_P = (Aim_P<0)?(0):(Aim_P);
          Now_P = (Now_P<0)?(0):(Now_P);
          if (De)
             {
		   for ( T_tmp = Now_P; T_tmp < Aim_P ; T_tmp++ )
		   {
			   delay(N);
			   Move( T_tmp);
		   }
              }
	   else
	      {
		   for ( T_tmp= Now_P; T_tmp > Aim_P ; T_tmp-- )
		   {
                      delay(Delay_num);
	              Move( T_tmp);
		    }
	       }

       }
      else
      {
      Now_P = Aim_P;
      return(0);
   }   }
}

void goto_mode()
{
	Move(AimData[2]);
	Now_P = AimData[2];
}

void gotime_mode()
{
	Aim_P = AimData[2];
	Time_D = AimData[3];
	if (Aim_P > Now_P)
	  {
		  Dis_P = Aim_P - Now_P;
		  De = 1;
	   }
	  else
	 {
	      Dis_P = Now_P - Aim_P;
		  De = 0;
	  }

	      Time = (Time_D*1000)/Dis_P;
	      Delay_num = Time*T;

       if (De)
       {
		   for ( T_tmp = Now_P; T_tmp < Aim_P ; T_tmp++ )
		   {
			   delay(Delay_num);
			   Move( T_tmp);
		   }
       }
	   else
	  {
		   for ( T_tmp= Now_P; T_tmp > Aim_P ; T_tmp-- )
		   {
                      delay(Delay_num);
	              Move( T_tmp);
		   }
	   }
           Now_P = Aim_P;
}



 main()
{
    AUXR &= 0x1f;
    IE = 0x92;
    SCON = 0x50;
    TMOD = 0x21;
    PCON &= 0x7f;
    TH1 = UARTBD;
    TL1 = UARTBD;
    TH0 = 0xFc;
    TL0 = 0x6e;
    //rg = 0;
    TR1 = 1;
    //TI = 1;
    TR0 = 0;
    dat = 1;
    gate1 = 1;
    gate2 = 0;
    Move(0);
    //AimData[1] = 0x01;
    //AimData[2] = 0x30;
    //AimData[3] = 0x46;
    //AimData[2] = 0x30;
    //AimData[4] = 0x30;
    //THISADDR = 0x2A;


        THISADDR = isp_read(0x1200);
        if((THISADDR == 0xff)||(THISADDR == 0x0))
        {
            THISADDR = 0x2A;
        }

	while (1)
	{
		if (NewCmd_sign)
		{
			NewCmd_sign = 0;
			mode = AimData[1];
			  if (mode == 0x01)
			  {
				  test_mode();
			  }
			  else if (mode == 0x02)
			  {
				  shake_mode();
			  }
			  else if (mode == 0x03)
			  {
				  goto_mode();
			  }
			  else if (mode == 0x04)
			  {
				  gotime_mode();
			  }
			  else if (mode == 0x05)
			  {
				  isp_erase(0x1200);
                                  isp_write(0x1200,AimData[2]);
                                  THISADDR = AimData[2];
			  }
			  else
				  {}
		}
		else{}
	}
	return(0);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -