AVR과 Proteus로 7segment 작동

AVR과 Proteus로 코드와 회로를 작성하여 각 버튼을 누룰시 그에 맞는 번호를 7segment에 표시하도록 구성

0~F 까지의 숫자 표현(16진수)

1) 회로도

2) 코드
#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

int main(void){
DDRE=0xf0;
DDRB=0xff;
PORTB=0b011111111;
while(1){

PORTE= 1<<PE7 | 1<<PE6 | 1<<PE5;// | 1<<PE4;
if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE3)) PORTB=0b01000000;//0
else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE2)) PORTB=0b01111001;//1
else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE1)) PORTB=0b00100100;//2
else if(!(PORTE & 1<<PE4) && !(PINE & 1<<PE0)) PORTB=0b00110000;//3
_delay_ms(1);
PORTE= 1<<PE7 | 1<<PE6 | 1<<PE4;
if(!(PORTE & 1<<PE5) && !(PINE & 1<<PE3)) PORTB=0b00011001;//4
else if(!(PORTE & 1<<PE5) && !(PINE & 1<<PE2)) PORTB=0b00010010;//5
else if(!(PORTE & 1<<PE5) && !(PINE & 1<<PE1)) PORTB=0b00000010;//6
else if(!(PORTE & 1<<PE5) && !(PINE & 1<<PE0)) PORTB=0b01011000;//7
_delay_ms(1);
PORTE= 1<<PE7 | 1<<PE5 | 1<<PE4;
if(!(PORTE & 1<<PE6) && !(PINE & 1<<PE3)) PORTB=0b0000000;//8
else if(!(PORTE & 1<<PE6) && !(PINE & 1<<PE2)) PORTB=0b00011000;//9
else if(!(PORTE & 1<<PE6) && !(PINE & 1<<PE1)) PORTB=0b00001000;//a
else if(!(PORTE & 1<<PE6) && !(PINE & 1<<PE0)) PORTB=0b00000011;//b
_delay_ms(1);
PORTE= 1<<PE6 | 1<<PE5 | 1<<PE4;
if(!(PORTE & 1<<PE7) && !(PINE & 1<<PE3)) PORTB=0b01000110;//c
else if(!(PORTE & 1<<PE7) && !(PINE & 1<<PE2)) PORTB=0b00100001;//d
else if(!(PORTE & 1<<PE7) && !(PINE & 1<<PE1)) PORTB=0b00000110;//e
else if(!(PORTE & 1<<PE7) && !(PINE & 1<<PE0)) PORTB=0b00001110;//f
_delay_ms(1);
}
}

댓글

이 블로그의 인기 게시물

python 에서 resize 이벤트 만들기

PLC와 아두이노 그리고 온도 센서를 이용하여 램프 점등

C언어로 로또 프로그램 만들기