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

📄 stled316s.c

📁 stled316芯片驱动程序C语言
💻 C
📖 第 1 页 / 共 2 页
字号:
	SPI_SendData_Analog( SPI1 , DataAddress + SEGMENT_DATA_PAGE + INCREMENT_ADDRESS + WRITE_COMMAND );	
        /*start write display data */	
	//   0<<3      0     0  			for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );				
	SPI_SendData_Analog( SPI1 , DataAddress + SEGMENT_DATA_PAGE + INCREMENT_ADDRESS + WRITE_COMMAND );	
        /*start write display data */	
	 //      0<<3        0       0  			j=0;
	for( i = 0; i < 6 ; i++ )
		{
	
		 if( *( SrcString + i+ j ) == '.' ) 
		    {
			  j++;
			  SPI_SendData_Analog( SPI1 , SegCommonA[*( SrcString + j + i )] | 0x80 );
			  }
		     else SPI_SendData_Analog( SPI1 , SegCommonA[*( SrcString + i +j )] );	
		 }
 		 	
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;
	for( i = 0 ; i < 1000 ; i++ );													ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );			 										SPI_SendData_Analog( SPI1 , DISPLAY_ON ); /* 发送显示使能命令write display on command */
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;			
}



void WriteSTLED316LEDMatrix( u8 DataAddress , u8 *SrcString ,u8 nBytes , u8 TimeChange )
{
	u16 i , LineValue[6];
	u16 a , b , c;
	static u8 j = 0 ,n = 0 ;
if( TimeChange == 1 )												
	{
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );					
	SPI_SendData_Analog( SPI1 , DataAddress + SEGMENT_DATA_PAGE + INCREMENT_ADDRESS + WRITE_COMMAND );	
        /*start write display data */	
	// 0<<3   0    0  			for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );				
	SPI_SendData_Analog( SPI1 , DataAddress + SEGMENT_DATA_PAGE + INCREMENT_ADDRESS + WRITE_COMMAND );	
        /*start write display data */	
	// 0<<3   0     0  			n = ( n + 1 ) % 7 ;
        if( n == 0 )
	  { 
	    n = 1 ; 
	    j = (j + 1)%nBytes;
	   }
	for( i = 1 ; i < 6 ; i++ )
	     {
		  a = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j ))*8 + i ] ) >> 3 ) ;
		  b = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j + 1 ))*8 + i ] ) >> 3 ) ;
		  c = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j + 2 ))*8 + i ] ) >> 3 ) ;
		  LineValue[ i - 1 ] = ( ( c << 12 ) | ( b << 6 ) | a ) >> n;  
		  SPI_SendData_Analog( SPI1 ,  LineValue[i-1] );	 
		  }

		  a = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j ))*8 + i + 1 ] ) >> 3 ) ;
		  b = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j + 1 ))*8 + i + 1 ] ) >> 3 ) ;
		  c = ( u16 )( SWAP16( SegASCCommonA[ (*( SrcString + j + 2 ))*8 + i + 1 ] ) >> 3 ) ;
		  LineValue[5] = ( ( c << 12 ) | ( b << 6 ) | a ) >> n;  
		  SPI_SendData_Analog( SPI1 ,  LineValue[5] );
 	
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;
	for( i = 0 ; i < 1000 ; i++ );														
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );			 										
	SPI_SendData_Analog( SPI1 , DISPLAY_ON );				
        /* write display on command */
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	}		
}

void WriteSTLED316LEDs( u8 nLEDs )
{
	u16 i;
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );				
	SPI_SendData_Analog( SPI1 , LED_DATA_ADDRESS + LED_DATA_PAGE + FIXD_ADDRESS + WRITE_COMMAND );	
        /*start write display data */	
	//   0    1<<3     0x20   0  					  	
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );				
	SPI_SendData_Analog( SPI1 , LED_DATA_ADDRESS + LED_DATA_PAGE + FIXD_ADDRESS + WRITE_COMMAND );
        /*start write display data */	
	//        0    1<<3    0x20     0  
        SPI_SendData_Analog( SPI1 , nLEDs );
        for( i = 0 ; i < 1000 ; i++ );
	SetSTB;
	for( i = 0 ; i < 1000 ; i++ );													ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );			 										SPI_SendData_Analog( SPI1 , DISPLAY_ON );				 /* write display on command */
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;			
}


/****************************************************************************
Function:		ReadSTLed316Driver
Description: 	Read data from STLed316 driver	
Arguments:		none
Returns:		read data(two bytes,KEY2 DATA is HIGH BYTE,KEY1 DATA is LOW BYTE)
Notes:		
******************************************************************************/
u16 ReadSTLED316Driver( void )
{	
	u16 temp1,temp2,i;
								
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );				
	SPI_SendData_Analog( SPI1 , KEY_DATA1_ADDRESS + KEY_DATA_PAGE + INCREMENT_ADDRESS + READ_COMMAND);
        ResetCLK;
	Set_GPIO_Pin_7_Input();
	for( i = 0 ; i < 1000 ; i++ );
	
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	//for( i = 0 ; i < 1000 ; i++ );
	//SetSTB;	
	//for( i = 0 ; i < 1000 ; i++ );													
	//ResetSTB;
	//for( i = 0 ; i < 1000 ; i++ );
	//SPI_SendData_Analog( SPI1 , KEY_DATA1_ADDRESS + KEY_DATA_PAGE + INCREMENT_ADDRESS + READ_COMMAND);
        //while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	//for( i = 0 ; i < 1000 ; i++ );
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE)==RESET);
	temp1=SPI_ReceiveData_analog( SPI1 );//读出的是“KEY_DATA1_ADDRESS+KEY_DATA_PAGE+INCREMENT_ADDRESS+READ_COMMAND”
  						                  //应当丢弃
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE)==RESET);
	temp2=SPI_ReceiveData_analog( SPI1 );//读出的是“KEY_DATA1_ADDRESS+KEY_DATA_PAGE+INCREMENT_ADDRESS+READ_COMMAND”
								  //应当丢弃
	for( i = 0 ; i < 1000 ; i++ );
	Set_GPIO_Pin_7_output();
	SetCLK;
	SetSTB;	
	return ( temp1 | ( temp2 << 8 ) );					
}

void InitSTLED316( u8 Brightness )//调节数码管亮度
{       int i;
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );					
	SPI_SendData_Analog( SPI1 , CHIP_CONFIG_ADDRESS + CHIP_CONFIG_PAGE + FIXD_ADDRESS + WRITE_COMMAND ); 
        /* const/vriable brightness,number of digits  congfig */ 
	//    0x0                  0x10                 0x20            0 
        //while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
        for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );	
	SPI_SendData_Analog( SPI1 , CHIP_CONFIG_ADDRESS + CHIP_CONFIG_PAGE + FIXD_ADDRESS + WRITE_COMMAND );
	//    0x0                  0x10                 0x20            0 
        //while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
        SPI_SendData_Analog( SPI1 ,( ( Brightness>>4 )<<5 ) | 0x00 | 0x5   );
        /*CHIP_CONFIGURATION */
	//   0xFE     6's 7'Segment, const brightness ,LED control Level is 7
	//for( i = 0 ; i < 10000 ; i++ );	
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	for( i = 0 ; i < 1000 ; i++ );
	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );
	/* brightness config */	
	SPI_SendData_Analog( SPI1 , DIGIT_BRIGHTNESS_PAGE + DIGIT_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND );
	                     //   0x10					  1                           0                  0	        //while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	for( i = 0 ; i < 1000 ; i++ );

/*****************************************************************************************************************/

	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );	

        SPI_SendData_Analog( SPI1 , DIGIT_BRIGHTNESS_PAGE + DIGIT_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND );
	                             //   0x10			  1                           0              0	   
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);	
        SPI_SendData_Analog( SPI1 , Brightness );	//   0x77				         
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77						 
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77						 	
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	

/*****************************************************************************************************************/

	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );
	/* brightness config */	
	SPI_SendData_Analog( SPI1 , LED_BRIGHTNESS_PAGE + LED_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND );
	                     //   0x11					  0                           0                  0	   
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	for( i = 0 ; i < 1000 ; i++ );

	SetSTB;	
	for( i = 0 ; i < 1000 ; i++ );												
	ResetSTB;
	for( i = 0 ; i < 1000 ; i++ );	

    SPI_SendData_Analog( SPI1 , LED_BRIGHTNESS_PAGE + LED_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND );
	                             //   0x11					  0                           0                  0	   
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);	

	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77				         
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77						 
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77						 	
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);
	SPI_SendData_Analog( SPI1 , Brightness );	//   0x77				         
	//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE)==RESET);

/*****************************************************************************************************************/


	for( i = 0 ; i < 1000 ; i++ );	
	SetSTB;
}


⌨️ 快捷键说明

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