초보의 아웅다웅 설계하기/STM32

74HC595(시프트 레지스터) 테스트

로망와니 2023. 12. 5. 21:00

 

 

...

 

 

4개 직렬 연결 

 

 

// 74HC595_PIN13, PB10 - OE 
// 74HC595_PIN11, PB11 - SRCLK - SHIFT 
// 74HC595_PIN12, PB12 - RCLK - LATCH
// 74HC595_PIN14, PB13 - SDI - DATA
// 74HC595_PIN10, PB14 - CLR

//- SER (Serial Input) : 시프트 레지스터로 데이터를 입력하는 핀
//- SRCLK (Shift Register Clock) : 클럭 핀(Clock Pin)의 상승 에지(Rising Edge) 신호에 동기되어 데이터 핀의 데이터가 시프트 레지스터로 들어갑니다.
//- RCLK (Register Clock/Latch) : 이 핀에 신호가 들어가면 시프트 레지스터의 내용이 저장/래치 레지스터로 복사됩니다.
void DisplayLED(uint8_t *Val)
{
/* Latch Clock Off */
GPIO_ResetBits(GPIOB, GPIO_Pin_12);

uint32_t data = 0;
data = Val[0] | ( Val[1] << 8) | ( Val[2] << 16)  | ( Val[3] << 24); 
DEBUGPRINT("data %X \r\n", data);

for(int i = 0 ; i < 32; i++){
/* Data Clock */
if(data >> (31-i) & 0x01){ // MSB first in
GPIO_SetBits(GPIOB, GPIO_Pin_13);// Data line
}
else{
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
}
/* Shift Clock */
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
}
/* Latch Clock On */
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

 

void main(void)

{

GPIO_conf();

 

/* CLR */
//GPIO_SetBits(GPIOB, GPIO_Pin_14);
/* OE */
GPIO_ResetBits(GPIOB, GPIO_Pin_10);

count[3] = 0;
count[2] = 0;
count[1] = 0;

while(1){
if(count[0] > 255){
count[0] = 255;
}
count[0]++;
count[1]++;
count[2]++;
count[3]++;

DisplayLED(count); // thousands
delay_ms(500);
}

}

 

 

※ 참고 

https://eteo.tistory.com/81