본문 바로가기
임베디드/Atmega128

ATmega128 공통음극 캐소드 MT03911AR 7세그먼트

by sj0020 2021. 1. 21.

 

 

 

책에있는 코드인데 안된다 . 책대로 연결했는데 왜 안되는지 모르겠음 ..

/*
 * FNDexample.c
 *
 * Created: 2020-12-07 오전 9:31:46
 * Author : User
 */ 

#include <avr/io.h>

unsigned char digit[] = {0x77, 0x41, 0x3B, 0x5B, 0x4D, 0x5E, 0x7C, 0x43, 0x7F, 0x4F};

void display_7segled(unsigned char led[], unsigned int number){
	PORTB = led[number];	
}

int main(void)
{
    DDRB = 0xFF;
	
	display_7segled(digit, 4);
	return 0;
}

 

그래서 아래처럼 한칸씩 켜보고 직접 짜보기로함

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

unsigned char num[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

int main(void)
{
	DDRE = 0xFF;
	PORTE = 0x00;
	int i = 0;
	while (1)
	{
		PORTE = num[i];
		_delay_ms(1000);
		i++;
		if(i==8){
			i=0;
		}
		
	}
}

 

작동잘됨

#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/io.h>

void display_7segled(unsigned char led[], unsigned int number){
	PORTB = led[number];
}

int main(void)
{
	DDRB = 0xFF;
    
	while (1){
		PORTB = 0xDE; //0
		_delay_ms(500);
		PORTB = 0x06; //1
		_delay_ms(500);
		PORTB = 0xEC; //2
		_delay_ms(500);
		PORTB = 0xAE; //3
		_delay_ms(500);
		PORTB = 0x36; //4
		_delay_ms(500);	
		PORTB = 0xBA; //5
		_delay_ms(500);	
		PORTB = 0xFA; //6
		_delay_ms(500);
		PORTB = 0x0E; //7
		_delay_ms(500);
		PORTB = 0xFE; //8
		_delay_ms(500);
		PORTB = 0x3E; //9
		_delay_ms(500);	
		PORTB = 0x01; //.
		_delay_ms(500);	
		
	}
	return 0;
}

 

계산하는법

7segment는 7개(8개) led 붙여놓은것과 같다.

연결 후 0x01 0x02 위의 코드 실행해보고 0x01이 어디칸인지.. 각각이 어느 led칸 인지 보고 내가 만들고 싶은 칸을 더하면 된다