Presentation is loading. Please wait.

Presentation is loading. Please wait.

임베디드 실습 # LED, 7’Segment 제어

Similar presentations


Presentation on theme: "임베디드 실습 # LED, 7’Segment 제어"— Presentation transcript:

1 임베디드 실습 # LED, 7’Segment 제어
Hanbat National University Prof. Lee Jaeheung

2 차례 비트 제어 연산자 랜덤 처리 LED 제어 7’Segment 제어
Hanbat National University Prof. Lee Jaeheung

3 비트 제어 연산자 비트 제어 연산자 정의 종류 2진수로 이루어진 수체계에서 각 비트들을 제어하기 위한 연산자 비트 논리 연산자
&, |, ^, ~ 비트 이동 연사나 >>, << 논리 연산자 &&, ||, ! Hanbat National University Prof. Lee Jaeheung

4 비트 제어 연산자 비트 제어 연산자 2진수의 이해 정보 저장 단위 2를 기수로 하여 0과 1의 2종류 숫자로 나타내는 수체계
컴퓨터 내 정보의 최소 단위(1Bit) 정보 저장 단위 8Bit = 1Byte = BYTE 16Bit = 2Byte = WORD 32Bit = 4Byte = DWORD Hanbat National University Prof. Lee Jaeheung

5 비트 제어 연산자 1 1 0 1 0 1 0 1 = 213(10) 비트 제어 연산자 2진수 변환 2진수 -> 10진수
각 자릿값(Weight Value)을 이용하여 계산 = 213(10) 128x1 + 64x1 + 32x0 + 16x1 + 8x0 + 4x1 + 2x0 + 1x1 Hanbat National University Prof. Lee Jaeheung

6 비트 제어 연산자 1 1 0 1 0 1 0 1 = D5(16) 비트 제어 연산자 2진수 변환 2진수 -> 16진수
2진수 4자리는 16진수 한자리에 해당 = D5(16) 8x1 + 4x1 + 2x0 + 1x1 8x0 + 4x1 + 2x0 + 1x1 Hanbat National University Prof. Lee Jaeheung

7 랜덤 처리 랜덤 처리 정의 함수 현재 시드를 기준으로 랜덤 숫자 생성 시드 설정 함수
void srand(unsigned int seed); 난수 생성 함수 int rand(); Hanbat National University Prof. Lee Jaeheung

8 랜덤 처리 랜덤 처리 사용 방법 100보다 작은 난수 생성 프로그램 ex) vi /work/ex4/rand.c
#include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", rand()%100); return 0; } #include <time.h> int main() { srand(time(NULL)); } Hanbat National University Prof. Lee Jaeheung

9 LED 제어 LED 제어하기 물리메모리 LED 제어값 0x00 0x01 0x02 0x03 0x0F 0xF0 0xFF
메모리 주소에 제어값 할당 Hanbat National University Prof. Lee Jaeheung

10 LED 제어 LED On/Off 반복 8bit_led.c (1/2)
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> #include <fcntl.h> #define FPGA_BASE_ADDRESS 0x #define LED_OFFSET x20 int main(){ int fd; unsigned short *addr_fpga, *addr_led; unsigned short val1, val2; if((fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0){ printf("mem open fail.\n"); exit(1); } addr_fpga = (unsigned short *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, FPGA_BASE_ADDRESS); addr_led = addr_fpga + LED_OFFSET / sizeof(unsigned short); if(*addr_led == (unsigned short)-1){ close(fd); printf("mmap error\n"); Hanbat National University Prof. Lee Jaeheung

11 LED 제어 LED On/Off 반복 8bit_led.c (2/2)
while(1){ *addr_led = 0xFF; // LED 전체켜기 sleep(1); //1초 sleep *addr_led = 0x00; // LED 전체끄기 } munmap(addr_fpga, 4096); close(fd); return 0; Hanbat National University Prof. Lee Jaeheung

12 LED 제어 LED 제어 실습 랜덤 한 위치의 LED가 켜지는 프로그램을 작성하시오.
Hanbat National University Prof. Lee Jaeheung

13 7’Segment 제어 7’Segment 정의 구조
세그먼트 방식의 숫자 표시 소자로서 최대 7개의 세그먼트로 숫자를 표시하는 방식 구조 Hanbat National University Prof. Lee Jaeheung

14 7’Segment 제어 7’Segment 원리 ABCDEFGH 11011010 0xDA
구조에서의 ABCDEFGH가 1Byte(8Bit)에 해당 예) 숫자 2를 켜는 방법 ABCDEFGH 0xDA F A B G E C D Hanbat National University Prof. Lee Jaeheung

15 LED 제어 7’Segment (0,1,2,3,4,5 띄우기) 7-segment.c (1/2)
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> #include <fcntl.h> #define FPGS_BASE_ADDRESS 0x #define SEG_GRID_OFFSET 0x30 #define SEG_DATA_OFFSET 0x32 int main(){ int fd, i; unsigned short *addr_fpga; unsigned short *addr_grid, *addr_data; unsigned short led_pos[6]={0x01, 0x02, 0x04, 0x08, 0x10, 0x20}; unsigned short digit[10]={0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe4, 0xf3, 0xf6}; if((fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0){ printf("mem open fail.\n"); exit(1); } addr_fpga = (unsigned short *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, FPGS_BASE_ADDRESS); addr_grid = addr_fpga + SEG_GRID_OFFSET / sizeof(unsigned short); addr_data = addr_fpga + SEG_DATA_OFFSET / sizeof(unsigned short); Hanbat National University Prof. Lee Jaeheung

16 LED 제어 7’Segment (0,1,2,3,4,5 띄우기) 7-segment.c (2/2)
if(*addr_data == (unsigned short)-1 || *addr_grid == (unsigned short)-1){ close(fd); printf("mmap error\n"); exit(1); } while(1){ for(i = 0; i < 6; ++i){ *addr_grid = led_pos[i]; *addr_data = digit[i]; usleep(10); munmap(addr_fpga, 4096); return 0; Hanbat National University Prof. Lee Jaeheung

17 7’Segment 제어 7’Segment 실습
Hanbat National University Prof. Lee Jaeheung

18 LED, 7’Segment 제어 LED, 7’Segment 실습 엘리베이터 프로그램 작성(1층~8층)
층수는 키보드로 입력받음 이전 위치 1층 LED: 7’ Segment: -> 키보드로 층 입력 : ex (3층) 1초 후 위치 2층 LED: 7’ Segment: 1초 후 현재 위치 3층 LED: 7’ Segment: Hanbat National University Prof. Lee Jaeheung


Download ppt "임베디드 실습 # LED, 7’Segment 제어"

Similar presentations


Ads by Google