📄 stled316s.c
字号:
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 + -