74138

다니엘·2022년 5월 26일
0

실습 과제명 : 74138 ic칩과 비슷한 기능 stm32f429 보드에서 구현하기

수행기간 : 2022. 05. 27

참가인원 : 1명

담당업무 : 조합 논리회로, 레지스터 이용

수행목표 :

GPIOX -> ODR = ~inputData에서 ~를
한 이유는 0은 1로 1은 0으로 변경시키기 위한 코드. 스위치를 누른값으로 0으로 되어있을때 0값을
1로 변경하여 GPIOX 포트에 HIGH신호를 줘서 LED에 전류가 흐르도록 한 것이다.

출력포트는 데이터 레지스터 ODR
핀의 입력 레지스터 IDR
데이터 방향 레지스터

/ USER CODE BEGIN 2 /
int INPUT0 = !HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8);
int INPUT1 = !HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_9);
int INPUT2 = !HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_12);

int INPUT[3] = { 0, };
int NUM;


	void f74138() {

	int INPUT[3] = { 0, };
	int NUM;

	HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_0);
	HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_1);
	HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_2);

	for (int i = 0; i < 3; i++) {
		INPUT[i] = (HAL_GPIO_ReadPin(GPIOG, 0x0008 >> i)) * (0x0001) << i;
	}
	NUM = INPUT[0] + INPUT[1] + INPUT[2];

	if (NUM == 0) {
		GPIOD->ODR = 0x7f;
	} else if (NUM == 1) {
		GPIOD->ODR = 0Xbf;
	} else if (NUM == 2) {
		GPIOD->ODR = 0Xdf;
	} else if (NUM == 3) {
		GPIOD->ODR = 0Xef;
	} else if (NUM == 4) {
		GPIOD->ODR = 0Xf7;
	} else if (NUM == 5) {
		GPIOD->ODR = 0Xfb;
	} else if (NUM == 6) {
		GPIOD->ODR = 0Xfd;
	} else if (NUM == 7) {
		GPIOD->ODR = 0Xfe;
	}

	/* USER CODE END 2 */

	/* Infinite loop */
	/* USER CODE BEGIN WHILE */

	while (1) {

// INPUT0 = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5);
// INPUT1 = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_6);
// INPUT2 = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8);

		if (INPUT0 & INPUT1 & INPUT2 == 1) {
			f74138();
		}

총평

배열을 선언하고 PD0-7번 LED로 출력하고 PG0-3번 스위치 SW 입력으로 정하였다.
PC8번9번12번 을 포트로 74138 칩셋의 C,B,A 값을 정해주었다.
입력값에 따라
1000 0000
0100 0000
0010 0000
0001 0000
0000 1000
0000 0100
0000 0010
0000 0001
로 LED 등을 점멸하려고 했으나 코드가 문제인지 동작하지 않았다.
원래는 모두 불이 켜지는 상태에서 0번에서 2번으로 스위치를 누르는 순간 해당 PD번호로 연결된 부분이
불이 꺼져야 하는데 그렇게 되지 않았다.

0개의 댓글

관련 채용 정보