74LS138 란?
3bit 바이너리 데이터를 8bit로 변환 하는 데 사용되는 복잡한 TTL 기반 논리 장치 입니다.
실제로 디멀티플렉싱 또는 기계어로 디코딩 장치를 할수 있게 설계하였고, 3개의 입력 데이터를 받아 8bit의 데이터로 변환한다.
디코딩 영향을 최소화 시키기 위해 메모리에서 디코더를 많이 사용하는데 칩에는 3개의 활성화 핀과 , 3개의 입력핀 및 8개의 출력핀으로 구현한다.
/* USER CODE BEGIN 2 */
void decoder74138() {
uint8_t input_A[4] = { 0, },
input_B[4] = { 0, },
num[4] = { 0, };
short i = 0;
//역순차 shift 이후 and 1 연산
input_A[0] = !((GPIOE->IDR >> 6) & 1);
input_A[1] = !((GPIOE->IDR >> 5) & 1);
input_A[2] = !((GPIOE->IDR >> 4) & 1);
input_A[3] = !((GPIOE->IDR >> 3) & 1);
//순차 shift 이후 and 1연산
input_B[0] = !((GPIOG->IDR >> 0) & 1);
input_B[1] = !((GPIOG->IDR >> 1) & 1);
input_B[2] = !((GPIOG->IDR >> 2) & 1);
input_B[3] = !((GPIOG->IDR >> 3) & 1);
for (i = 3; i >= 0; i--) {
num[i] = input_A[i] + input_B[i] + carryOut;
if((num[i] >= 2) ? 1 : 0){
carryOut;
}
num[i] %= 2;
}
// PD 0~7 LED
GPIOD->ODR &= 0x3;
GPIOD->ODR |= (num[3] << 7) + (num[2] << 6) + (num[1] << 5)
+ (num[0] << 4) + (carryOut << 3) + (carryIn << 2);
}
}
/* USER CODE END 2 */
while (1) {
carryIn = carryOut = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8);
if(carryIn & carryOut){
decoder74138();
}
}
728x90