BASIC4MCU | 질문게시판 | 세그먼트 숫자가 같을시 LED 깜박거리기
페이지 정보
작성자 홍구 작성일2019-12-06 18:29 조회5,895회 댓글1건본문
지식인에서 알려주신대로
#include <mega128.h>
#include <delay.h>typedef unsigned char u_char;
flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
u_char N1 = 0, N10 = 0, N100 = 0, N1000 = 0;
void Seg4_out(void);
void main (void)
{
DDRB = 0xF0;
DDRD = 0xF0;
DDRG = 0x0F;
DDRC = 0x01;
PORTC = 0x55;
//인터럽트 초기화
EIMSK = 0b11110000;
EICRB = 0b10101010;
SREG = 0x80;
char i;while(1){
if(N1==N10 && N1==N100 && N1==N1000){
PORTG=0; // 포트G만 꺼도 세그먼트 OFF 됨
delay_ms(500); // 500ms 동안 OFF
}
//
for(i=0;i<25;i++)Seg4_out(); // 20ms*25=500ms <<알려주신것
}
}
//네자리 출력
void Seg4_out(void)
{
PORTG = 0b00001000; //1자리
PORTD = ((seg_pat[N1] & 0x0F) << 4) | (PORTD & 0x0F);
PORTB = (seg_pat[N1] & 0x70) | (PORTB & 0x0F);
delay_ms(5);
PORTG = 0b00000100; //10자리
PORTD = ((seg_pat[N10] & 0x0F) << 4) | (PORTD & 0x0F);
PORTB = (seg_pat[N10] & 0x70) | (PORTB & 0x0F);
delay_ms(5);
PORTG = 0b00000010; //100자리
PORTD = ((seg_pat[N100] & 0x0F) << 4) | (PORTD & 0x0F);
PORTB = (seg_pat[N100] & 0x70) | (PORTB & 0x0F);
delay_ms(5);
PORTG = 0b00000001; //1000자리
PORTD = ((seg_pat[N1000] & 0x0F) << 4) | (PORTD & 0x0F);
PORTB = (seg_pat[N1000] & 0x70) | (PORTB & 0x0F);
delay_ms(5);
}
interrupt [EXT_INT4] void external_int4(void)
{
N1 = (N1 + 1 ) % 10;
}
interrupt [EXT_INT5] void external_int5 (void)
{
N10 = (N10 + 1) % 10;
}
interrupt [EXT_INT6] void external_int6 (void)
{
N100 = (N100 + 1) % 10;
}
interrupt [EXT_INT7] void external_int7 (void)
{
N1000 = (N1000 + 1) % 10;
}이런 프로그램을 만드려고하는데
- KEY1을 입력하면 세그먼트1의 수를 증가시키고, KEY2를 입력하면 세그먼트2의 수를 증가, KEY3을 입력하면 세그먼트3의 수를 증가, KEY4를 입력하면 세그먼트4의 수를 증가시킬 것
- 모든 세그먼트의 숫자가 같을 경우, 각 해당 숫자만큼의 시간간격으로 LED를 깜빡일 것.(예 : 1111일 경우 1초마다 LED를 깜빡임.)
- 세그먼트의 숫자가 전부 같지 않는 경우엔 LED를 끌 것
무엇때문에 노란 LED가 아닌 세그먼트불이 깜빡거릴까요 ? ㅠㅠ
댓글 1
조회수 5,895master님의 댓글
master 작성일
세그먼트를 깜박이게 해달라는 것이 아니었군요?
DDRC = 0x01;
PC0가 LED인가보죠?
아래처럼 수정해보세요
char i=0;
while(1){
if(N1==N10&&N1==N100&&N1==N1000){
if(i<25)PORTC=1; // 0.5초 ON
else PORTC=0; // 0.5초 OFF
//
if(++i>=50)i=0;
}
//
Seg4_out();
}