STM32 , 디지털 금고 프로그래밍으로 구현 ( 시프트 레지스터 응용 )
시프트 레지스터를 응용한 디지털 금고를 프로그래밍으로 구현하였습니다. 올바른 비밀번호인 3190을 순서대로 입력하면 LED가 오른쪽 왼쪽으로 번갈아 이동하면서 켜지고, 틀린 번호를 입력하면 LED가 깜빡이면서 초기화 되서 다시 입력해야 합니다. 버튼 3, 1, 9, 0 은 PG0-3 과 연결해두었고 버튼 2, 4, 5, 6, 7, 8 은 PC7-12 와 연결해두었다. LED는 PD0-5 이다. D 플립플롭은 입력과 출력이 버퍼와 마찬가지이다. 시프트 레지스터라서 처음 입력이 1으로 고정이고 각 플립플롭의 출력 Qa, Qb, Qc, Qd의 값은 0으로 초기화된 상태에서 시작하기 때문에 올바른 순서대로 클락펄스를 주어야 비트 1이 이동한다. 소스코드 /* USER CODE BEGIN PFP */ void J..
2022. 5. 24.
STM32 레지스터 직접 접근해서 LED를 이용한 카운터, 7 segment FND 출력 제어하기
먼저 PC8, 9, 10, 11 핀을 output 모드로 사용해 0x0-0xF 까지의 카운터를 구현하였고, PD0, 1, 2, 3, 4, 5, 6 핀을 output 모드로 사용해 FND에 0-9까지의 숫자를 출력하였다. 참고로 핀을 선택할때 내가 한 것처럼 이어진 핀을 선택해야 나중에 코드짜기가 쉽다. 그리고 아무리 MODER 에 원하는 값을 대입해도 현재 해당 GPIOx 핀이 MX 툴에서 활성화된게 아무것도 없으면 모드 설정이 안되더라.. 아마 MX_GPIO_Init(); 함수 내에 설정이 안되서 그런거 같은데 MODER은 MX툴 쓰는게 편한거 같다. unsigned char 배열을 사용해 0x0부터 0xF까지의 숫자를 미리 넣어주었다. /* USER CODE BEGIN 2 */ GPIOC->MODER..
2022. 5. 19.
C언어 ] 프로그래머스 Lv. 1 - 자연수 뒤집어 배열로 만들기
문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345 [5,4,3,2,1] 나의 풀이 #include #include #include int* solution(long long n) { // 리턴할 값은 메모리를 동적 할당해주세요. long long copyn=n; int count=0; while(copyn>0){ copyn=copyn/10; count++; } int div=10; int* answer = (int*)malloc(sizeof(int)*count); for(int i=0;i 0) { answ..
2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 내적
문제 설명 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,000 이상 1,000 이하입니다. 입출력 예 a b result [1,2,3,4] [-3,-1,0,2] 3 [-1,0,1] [1,0,-1] -2 #include #include #include // a_len은 배열 a의 길이입니다. // b_len은 배열 b의 길이입니다. int solution(int a[], size_t a_l..
2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 없는 숫자 더하기
문제 설명 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ numbers의 길이 ≤ 9 0 ≤ numbers의 모든 원소 ≤ 9 numbers의 모든 원소는 서로 다릅니다. 입출력 예 numbers result [1,2,3,4,6,7,8,0] 14 [5,8,4,0,6,7,9] 6 #include #include #include // numbers_len은 배열 numbers의 길이입니다. int solution(int numbers[], size_t numbers_len) { int answer = 45; for(..
2022. 5. 17.