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

📄 main.c

📁 本源码程序采用用51单片机AT89C55分控采用软件模拟的方式输出SPI信号! 控制16段LED护栏管的单色跳变
💻 C
📖 第 1 页 / 共 3 页
字号:

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                    SCLK595=0;
                       SLATCH595=1;
                        
                       SLATCH595=0; 


                  
                       //delayrgb();
              break;
       case  1://绿色亮
	    SLATCH595=0; 
              for(i=0;i<=JUMP_NUMBER_MAX;i++)
	            {
                   SCLK595=0;        //蓝 
                   SDATA595=OFF; 
	               SCLK595=1;

 
                   SCLK595=0;        //红
                   SDATA595=OFF; 
	               SCLK595=1;
	


                   SCLK595=0;        //绿 
                   SDATA595=ON; 
	               SCLK595=1;
	             
	           }
          	     SCLK595=0;  
                 SLATCH595=1;
                 
	             SLATCH595=0; 
	            // delay();	

               if(ut10sTimer<50)
                 {  if(Is_change==1)
                    { 
 		             Is_change=0;              
                    }
		      	 }

              else {
		            Is_change=0; 		     
		            ut10sTimer=0;
                    tt++; 
	                j=0;
	  	           }

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                   SCLK595=0;
                       SLATCH595=1;
                        
                       SLATCH595=0; 

               
                       //delayrgb();
           break;	   
      case  2://蓝色亮
	      SLATCH595=0; 
              for(i=0;i<=JUMP_NUMBER_MAX;i++)
	            {
                   SCLK595=0;        //蓝 
                   SDATA595=ON; 
	               SCLK595=1;

 
                   SCLK595=0;        //红
                   SDATA595=OFF; 
	               SCLK595=1;
	


                   SCLK595=0;        //绿 
                   SDATA595=OFF; 
	               SCLK595=1;
	               
	           }
          	     SCLK595=0;
                 SLATCH595=1;
                 
	             SLATCH595=0; 
	            // delay();	

               if(ut10sTimer<50)
                 {  if(Is_change==1)
                    { 
 		             Is_change=0;              
                    }
		      	 }

              else {
		            Is_change=0; 		     
		            ut10sTimer=0;
                    tt++; 
	                j=0;
	  	           }

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                   SCLK595=0; 
                       SLATCH595=1;
                        
                       SLATCH595=0; 

                 
                       //delayrgb();
           break;   
    case  3://红绿亮
	      SLATCH595=0; 
              for(i=0;i<=JUMP_NUMBER_MAX;i++)
	            {
                   SCLK595=0;        //蓝 
                   SDATA595=OFF; 
	               SCLK595=1;

 
                   SCLK595=0;        //红
                   SDATA595=ON; 
	               SCLK595=1;
	


                   SCLK595=0;        //绿 
                   SDATA595=ON; 
	               SCLK595=1;
                   
	     
	           }
          	     SCLK595=0;
                 SLATCH595=1;
                  
	             SLATCH595=0; 
	            // delay();	

               if(ut10sTimer<50)
                 {  if(Is_change==1)
                    { 
 		             Is_change=0;              
                    }
		      	 }

              else {
		            Is_change=0; 		     
		            ut10sTimer=0;
                    tt++; 
	                j=0;
	  	           }

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                   SCLK595=0; 
                       SLATCH595=1;
                        
                       SLATCH595=0; 
                       //delayrgb();
           break;   
	   case  4://红蓝亮
	      SLATCH595=0; 
              for(i=0;i<=JUMP_NUMBER_MAX;i++)
	            {
                   SCLK595=0;        //蓝 
                   SDATA595=ON; 
	               SCLK595=1;

 
                   SCLK595=0;        //红
                   SDATA595=ON; 
	               SCLK595=1;
	


                   SCLK595=0;        //绿 
                   SDATA595=OFF; 
	               SCLK595=1;
                   
	     
	           }
          	     SCLK595=0;
                 SLATCH595=1;
                  
	             SLATCH595=0; 
	            // delay();	

               if(ut10sTimer<50)
                 {  if(Is_change==1)
                    { 
 		             Is_change=0;              
                    }
		      	 }

              else {
		            Is_change=0; 		     
		            ut10sTimer=0;
                    tt++; 
	                j=0;
	  	           }

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                   SCLK595=0;  
                       SLATCH595=1;
                       
                       SLATCH595=0; 
                       //delayrgb();
           break;   
		case  5://绿蓝亮
	      SLATCH595=0; 
              for(i=0;i<=JUMP_NUMBER_MAX;i++)
	            {
                   SCLK595=0;        //蓝 
                   SDATA595=ON; 
	               SCLK595=1;

 
                   SCLK595=0;        //红
                   SDATA595=OFF; 
	               SCLK595=1;
	


                   SCLK595=0;        //绿 
                   SDATA595=ON; 
	               SCLK595=1;
                   
	     
	           }
          	     SCLK595=0; 
                 SLATCH595=1;
                 
	             SLATCH595=0; 
	            // delay();	

               if(ut10sTimer<50)
                 {  if(Is_change==1)
                    { 
 		             Is_change=0;              
                    }
		      	 }

              else {
		            Is_change=0; 		     
		            ut10sTimer=0;
                    tt=0; 
	                j=0;
	  	           }

                   SLATCH595=0; 
                   for(i=0;i<=JUMP_NUMBER_MAX;i++)
	                 {
                        SCLK595=0;        //蓝
                        SDATA595=OFF; 
	                    SCLK595=1;

 
                        SCLK595=0;        //红 
                        SDATA595=OFF; 
	                    SCLK595=1;
	


                        SCLK595=0;        //绿 
                        SDATA595=OFF; 
	                    SCLK595=1;
                        
	                 }
	                   SCLK595=0; 
                       SLATCH595=1;
                        
                       SLATCH595=0; 
                       //delayrgb();
           break;   

      default  :
	       for(i=0;i<24;i++)
          { //ucdot[i]=0;
		  } 
	       tt=0;		    
           break;
    }

 }







  


//*********** 通信接收处理函数***************
void 	RECV_Deal(void)
{
   uint TempAdd;
   Recv_Wait_Time=0;//接收等待计时
   RecvBuf[ RECV_Point]=SBUF;
   if(  Recv_LightData_Flag==NO )
   {
   	 switch( RECV_Point)
	 {
	   case 0: if( RecvBuf[0]!=HEAD1)
	           {
			   	 Clear_RecvBuf();
				 return;			   
			   }
			   else
			   {
			   	 Recv_WaitTime_Flag=YES;
			     NO_RecvFlag=NO;
				 ut20s=0;
				 
			    } 
	 		    break;
	   case 1: if( RecvBuf[ 1]!=HEAD2)
	           {
			     Clear_RecvBuf();
				 return;			
			    }
				break;
	   case 3: 
	       Recv_DataLeng=((uint) RecvBuf[2]<<8)|RecvBuf[3];
	           break;
	   case 5: TempAdd=	((uint) RecvBuf[4]<<8)|RecvBuf[5];
	         
	           if(TempAdd!=0xffff) 
			   {
			     Clear_RecvBuf();
				 return;			  
			    }
			    break;
	   case 6: 
		        // P1_2=0;  测试用
	          if( RecvBuf[6]!=0x00)
	           {  			   	
			   	 Clear_RecvBuf();
				 return;			   
			   }
			   break; 
		}
	   if( RECV_Point<6)
	   {
	    	RECV_Point++;
			
	    }
	    else
		{
	    	 Clear_RecvBuf(); 
			 Light_Point=0;
             LightCount=0;
			 Recv_LightData_Flag=YES;
			 Recv_WaitTime_Flag=NO;
		} 
	
   }
   else
   {
   	// if( LightCount>= (SelfAdd-1)*6)
	
	   if(Light_Point<6)
	   {
	       LightData[ Light_Point++]=SBUF;
		  // P1_3=0;
	       if(Light_Point==6)
	      {
	   	     Light_Point=0;
		     LightCount=0;
		     Recv_LightData_Flag=NO;
		     Clear_RecvBuf(); 
		     return;
	       }
		}	   
	 
	 LightCount++;
   
   } 

}
//*********清接收缓冲区***************
void Clear_RecvBuf(void)
{
  uchar i;
  for(i=0;i<RECV_Point;i++)
  {
     RecvBuf[i]=0;
  }
  RECV_Point=0;
} 
//***********通信超时处理函数*********
void Com_Deal(void)
{
  if( Recv_OverTime_Flag==YES)
  {
     Recv_Wait_Time=0;
  	 Recv_OverTime_Flag=NO;
	 Clear_RecvBuf(); 
  }	

}

//-----
/*EEPROM读N个字节函数,
入口参数:n-字节数;*buffer-存放缓冲地址
返回值:操作成功标志
*/
/*static bit EE_RNB(unsigned char n,unsigned char *buffer)
{
    IIC_Start(); 
    IIC_Byte_W(EE_R_ADDR);
    if(!IIC_ACK())     //等待接收器应答信号 
        return FALSE; 
    Read_N_Bytes(n,buffer);
    return TRUE;   	
}
*/
//----------
/*EEPROM写地址函数,
描述:EEPROM读写前都应该写地址
入口参数:地址值
返回值:操作成功标志
*/
/*static bit EE_W_Addr(unsigned int ui_Addr_Value)
{     
    IIC_Start(); 
    IIC_Byte_W(EE_W_ADDR);
    if(!IIC_ACK())     //等待接收器应答信号 
        return FALSE; 
    IIC_Byte_W(ui_Addr_Value>>8);        //向总线发送接收器地址 
    if(!IIC_ACK())     //等待接收器应答信号 
        return FALSE; 
    IIC_Byte_W((unsigned char)ui_Addr_Value);        //向总线发送接收器地址 
    if(!IIC_ACK())     //等待接收器应答信号 
        return FALSE; 	
    return TRUE;
}
*/
//----------

/*IIC总线启动函数
描述:启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变
入口参数:无
返回值:无
*/
/*static void IIC_Start() 
{ 
    SDA=1; 
    SCL=1; 
    Delay(DELAY_TIME); 
    SDA=0; 
    Delay(DELAY_TIME); 
    SCL=0; 
    Delay(DELAY_TIME); 
} */
//-------------
/*IIC总线终止函数
描述:终止I2C总线,当SCL为高电平时使SDA产生一个正跳变 
入口参数:无
返回值:无
*/
/*static void IIC_Stop() 
{ 
    SDA=0; 
    SCL=1; 
    Delay(DELAY_TIME); 
    SDA=1; 
    Delay(DELAY_TIME); 
    SCL=0; 
    Delay(DELAY_TIME); 
} 
*/
//-------------------
/*IIC总线上发送一个位0函数
描述:发送0,在SCL为高电平时使SDA信号为低 
入口参数:无
返回值:无
*/
/*static void SEND_0() 
{ 
	SDA=0; 
    SCL=1; 
    Delay(DELAY_TIME); 
    SCL=0; 
    Delay(DELAY_TIME); 
} 
*/
//-----------------------------------
/*IIC总线上发送一个位1函数
描述:发送1,在SCL为高电平时使SDA信号为高 
入口参数:无
返回值:无
*/

/*
static void SEND_1() 
{ 
    SDA=1; 
    SCL=1; 
    Delay(DELAY_TIME); 
    SCL=0; 
    Delay(DELAY_TIME); 
} 
*/
//-------------
/*
描述:IIC总线发送完一个字节后检验设备的应答信号 
入口参数:无
返回值:成功标志
*/
/*
static bit IIC_ACK() 
{ 
    bit Temp1;
    SDA=1; 
    SCL=1; 
    Delay(DELAY_TIME/2); 
    Temp1=SDA;          //sda is '0'//
    Delay(DELAY_TIME/2); 
    SCL=0; 
    Delay(DELAY_TIME); 
    if(Temp1==1) 
        return FALSE; 
    return TRUE; 
} 
*/
//-----------
/*
描述:向IIC总线写一个字节  
入口参数:要写的值
返回值:无
*/
/*static void IIC_Byte_W(unsigned char b)//reentrant 
{     
    unsigned char i; 
    for(i=0;i<8;i++) 
	{
        if((b<<i)&0x80) 
            SEND_1(); 
        else 
            SEND_0(); 
	}
} 
*/
//-----------------
/*
描述:向IIC总线写N个字节  
入口参数:*buffer-要写的值的缓冲的地址,n-写个个数
返回值:无
*/
/*static bit Write_N_Bytes(unsigned char *buffer,unsigned char n)//reentrant 
{ 
    //向I2C总线写n个字节 
    unsigned char i; 	
    for(i=0;i<n;i++) 
    { 
        IIC_Byte_W(buffer[i]); 
        Delay(DELAY_TIME);		
        if(!IIC_ACK()) 
		{ 
			IIC_Stop(); 
			return FALSE; 
		} 
    } 	 
    return TRUE; 
} 
*/
//---------
/*
描述:从I2C总线读一个字节 
入口参数:无
返回值:读取的值
*/
/*
static unsigned char IIC_Byte_R(void)//reentrant 
{ 
    //从I2C总线读一个字节 
    bit Temp1;
    unsigned char b=0,i; 
    for(i=0;i<8;i++) 
    { 
        SDA=1;    //释放总线 
        SCL=1;    //接受数据 
        Delay(DELAY_TIME/2); 
        Temp1=SDA; 
        Delay(DELAY_TIME/2); 
        SCL=0; 

⌨️ 快捷键说明

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