You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.3 KiB
114 lines
3.3 KiB
#include "segment_74hc595d.h"
|
|
#include "segment.h"
|
|
#include "timer12.h"
|
|
#include "spi13.h"
|
|
#include "systick_timer.h"
|
|
|
|
|
|
typedef enum
|
|
{
|
|
LSB_FIRST,
|
|
MSB_FIRST,
|
|
}LSB_MSB_MODE;
|
|
|
|
|
|
#define SEGMENT_74HC595D_LATCH_PORT (Pn_Type*)PE
|
|
#define SEGMENT_74HC595D_LATCH_PIN_NUM 11
|
|
#define SEGMENT_74HC595D_LATCH_H HAL_GPIO_SetPin(SEGMENT_74HC595D_LATCH_PORT, _BIT(SEGMENT_74HC595D_LATCH_PIN_NUM))
|
|
#define SEGMENT_74HC595D_LATCH_L HAL_GPIO_ClearPin(SEGMENT_74HC595D_LATCH_PORT, _BIT(SEGMENT_74HC595D_LATCH_PIN_NUM))
|
|
#define SEGMENT_74HC595D_LATCH_T HAL_GPIO_TogglePin(SEGMENT_74HC595D_LATCH_PORT, _BIT(SEGMENT_74HC595D_LATCH_PIN_NUM))
|
|
|
|
|
|
typedef union
|
|
{
|
|
struct
|
|
{
|
|
uint8_t HC595_1_COM1 : 1;
|
|
uint8_t HC595_1_COM2 : 1;
|
|
uint8_t HC595_1_COM3 : 1;
|
|
uint8_t HC595_1_COM4 : 1;
|
|
uint8_t HC595_1_COM5 : 1;
|
|
uint8_t HC595_1_RESERVED : 3;
|
|
|
|
uint8_t HC595_2;
|
|
uint8_t HC595_3;
|
|
}HC595_Data;
|
|
uint8_t HC595_TxBuff[SEGMENT_74HC595D_IC_TOTAL_NUM];
|
|
}HC595_OUTPUT_DATA;
|
|
|
|
|
|
|
|
static SEGMENT_OUTPUT_STEP SegmentOutputStep;
|
|
static HC595_OUTPUT_DATA HC595_OutputData;
|
|
static LSB_MSB_MODE HC595_OutputMode = MSB_FIRST;
|
|
static uint32_t ToggleTickCount;
|
|
static bool isToggle = false;
|
|
|
|
uint8_t Segment_Buff[SEGMENT_OUTPUT_MAX][SEGMENT_74HC595D_IC_DATA_NUM];
|
|
bool Segment_Toggle_In;
|
|
bool Segment_Toggle_Out;
|
|
|
|
|
|
static void Segemet_Output_Process(void);
|
|
static void Segment_Output_Data(uint8_t* pTxData, uint8_t TxSize);
|
|
|
|
void Segment_Initialization(void)
|
|
{
|
|
HAL_GPIO_ConfigOutput(SEGMENT_74HC595D_LATCH_PORT, SEGMENT_74HC595D_LATCH_PIN_NUM, PUSH_PULL_OUTPUT);
|
|
HAL_GPIO_ConfigPullup(SEGMENT_74HC595D_LATCH_PORT, SEGMENT_74HC595D_LATCH_PIN_NUM, PUPDx_EnablePU);
|
|
|
|
|
|
SEGMENT_74HC595D_LATCH_H;
|
|
|
|
//Segmet_Output_Process();
|
|
ToggleTickCount = millis();
|
|
isToggle = false;
|
|
Timer12_Set_Match_Interrupt_Callback(Segemet_Output_Process);
|
|
}
|
|
|
|
static void Segemet_Output_Process(void)
|
|
{
|
|
static uint8_t temp = 0;
|
|
|
|
memset(HC595_OutputData.HC595_TxBuff, 0, SEGMENT_74HC595D_IC_TOTAL_NUM);
|
|
|
|
switch(SegmentOutputStep)
|
|
{
|
|
case SEGMENT_OUTPUT_COM1:
|
|
HC595_OutputData.HC595_Data.HC595_1_COM1 = true;
|
|
break;
|
|
case SEGMENT_OUTPUT_COM2:
|
|
HC595_OutputData.HC595_Data.HC595_1_COM2 = true;
|
|
break;
|
|
case SEGMENT_OUTPUT_COM3:
|
|
HC595_OutputData.HC595_Data.HC595_1_COM3 = true;
|
|
break;
|
|
case SEGMENT_OUTPUT_COM4:
|
|
HC595_OutputData.HC595_Data.HC595_1_COM4 = true;
|
|
break;
|
|
case SEGMENT_OUTPUT_COM5:
|
|
HC595_OutputData.HC595_Data.HC595_1_COM5 = true;
|
|
break;
|
|
}
|
|
|
|
HC595_OutputData.HC595_Data.HC595_3 = Segment_OutputBuff[SegmentOutputStep][SEGMENT_F1];
|
|
HC595_OutputData.HC595_Data.HC595_2 = Segment_OutputBuff[SegmentOutputStep][SEGMENT_F2];
|
|
|
|
SEGMENT_74HC595D_LATCH_L;
|
|
Segment_Output_Data(HC595_OutputData.HC595_TxBuff, SEGMENT_74HC595D_IC_TOTAL_NUM);
|
|
SEGMENT_74HC595D_LATCH_H;
|
|
|
|
SegmentOutputStep++;
|
|
if(SegmentOutputStep >= SEGMENT_OUTPUT_MAX)
|
|
{
|
|
SegmentOutputStep = SEGMENT_OUTPUT_COM1;
|
|
}
|
|
}
|
|
|
|
|
|
static void Segment_Output_Data(uint8_t* pTxData, uint8_t TxSize)
|
|
{
|
|
SPI13_Transmit(pTxData, TxSize);
|
|
}
|
|
|