제목: [Intel] 엣지 AI SW 아카데미
부제목: 9일차
일정: 2023.11.08(수)
수업 내용:
- C언어 프로그래밍
- Micro Processor 원리
- Atmel사의 8bit Micro-controller
- KUT0128 Evaluation Board 기능과 특징
- IO Port 제어
목표:
스위치 상태에 따른 값의 변화를 코드로 나타낼 수 있다.
off -> on, falling edge (1 => 0)
on -> off, rising edge (0 => 1)
예제) 스위치 OFF ON 될 때마다 LED 순차 점멸하기
#include <mega128.h>
void main(void)
{
unsigned char old_sw, new_sw;
unsigned char led = 0xFE;
DDRC = 0xFF; // 포트C 출력 설정
DDRE = 0x00; // 포트E 입력 설정
PORTC = led; // 포트C.0=0 led on 초기값 출력
old_sw = PINE & 0b00010000; // PE4 SW1 상태값 추출
while(1){
new_sw = PINE & 0b00010000;
if((old_sw != 0) && (new_sw == 0)){ // OFF(1) -> ON(0) 되는 순간 체크
led = (led << 1) | 0x01; // 1비트 쉬프트, 0비트 1로 채움
if(led == 0xFF) led = 0xFE; // LED 모두 off상태이면 초기값 재설정
PORTC = led;
}
old_sw = new_sw; // 이전상태 <- 현재상태
}
}
7-Segment 구동회로
7-Segment : FND(Flexible Numeric Display)
FND(Flexible Numeric Display) : 숫자 표시용 소자
– 7개의 세그먼트(a, b, c, d, e, f, g)와 도트(p)로 구성
• 각각의 세그먼트는 LED로 구성
• CC(Common Cathode)형 : (−)극이 공통(common)
• CA(Common Anode)형 : (+)극이 공통(anode)
7-Segment 구동회로
예제) 각 Segment를 1개씩 점멸하기
#include <mega128.h>
#include <delay.h>
void main(void)
{
char i, value;
DDRB = 0xF0; // PORTB 4,5,6,7 비트 출력 설정
DDRD = 0xF0; // PORTD 4,5,6,7 비트 출력 설정
DDRG = 0x0F; // PORTG 0,1,2,3 비트 출력 설정
PORTG = 0b00001000; // 맨 우측 7-Segment DIG4 ON (PORTG3=1)
PORTB = 0x00; // 초기값 PORTB 4,5,6,7 출력 0
PORTD = 0x00; // 초기값 PORTD 4,5,6,7 출력 0
while(1){
PORTD = 0b00010000;
delay_ms(500);
PORTD = 0b00000000;
}
}
예제) 7-Segment 구동연습 2
#include <mega128.h>
#include <delay.h>
const unsigned char seg_pat[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void main(void) {
int i;
DDRB = 0xF0; // 포트 B 상위 4비트 출력 설정
DDRD = 0xF0; // 포트 D 상위 4비트 출력 설정
DDRG = 0x0F; // 포트 G 하위 4비트 출력 설정
PORTG = 0b00001000; // 맨 우측 7-Segment DIG4 ON(PG3=1)
PORTB = 0x00; // E, F, G, DP off (초기값)
PORTD = 0x00; // A, B, C, D off (초기값)
while(1){ // 16진수 순차 표시
for(i = 0; i < 16; i++){
PORTD = ((seg_pat[i] & 0x0F) << 4) | (PORTD & 0x0F); // seg_pat 하위 4bit A, B, C, D
PORTB = (seg_pat[i] & 0x70 ) | (PORTB & 0x0F); // seg_pat 상위 3bit E, F, G
delay_ms(1000);
}
}
}
예제) 7-Segment 구동연습 3
#include <mega128.h>
#include <delay.h>
const char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void Seg2_out(int);
void main(void) {
int num = 0;
DDRB = 0xF0; // 포트 B 상위 4비트 출력 설정
DDRD = 0xF0; // 포트 D 상위 4비트 출력 설정
DDRG = 0x0F; // 포트 G 하위 4비트 출력 설정
PORTB = 0x0; // E, F, G, DP off
PORTD = 0x0; // A, B, C, D off
while(1){
Seg2_out(num);
num++;
if(num > 99) num = 0;
}
}
'[Intel] 엣지 AI SW 아카데미 > 펌웨어 프로그래밍 75hour' 카테고리의 다른 글
[Intel] 엣지 AI SW 아카데미 12일차 (부산상공회의소 인력개발원) (0) | 2023.11.30 |
---|---|
[Intel] 엣지 AI SW 아카데미 11일차 (부산상공회의소 인력개발원) (1) | 2023.11.30 |
[Intel] 엣지 AI SW 아카데미 10일차 (부산상공회의소 인력개발원) (0) | 2023.11.30 |
[Intel] 엣지 AI SW 아카데미 8일차 [Intel] 엣지 AI SW 아카데미 (0) | 2023.11.17 |
[Intel] 엣지 AI SW 아카데미 7일차 (부산상공회의소 인력개발원) (1) | 2023.11.17 |