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

FND (7 segment)

by sj0020 2020. 12. 7.
/*
 * 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;
}

https://kocoafab.cc/tutorial/view/351

 

7세그먼트-숫자 표시하기

개요 1) 7세그먼트란 무엇인가? 7세그먼트(7 Segment)는 7개의 획으로 숫자나 문자를 나타낼 수 있는 표시장치로 FND (Flexible Numeric Display)라고도 불립니다. 일반적으로 작고 단순한 구조를 가지기 때

kocoafab.cc




3-1. common anode로 0~9까지 차레대로 켜기

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

unsigned char num[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

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

 

7seg.DSN
0.08MB

 

 

 

3-1. common cathode로 0~9까지 차레대로 켜기

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

unsigned char num[10] = {0x06,0x5B,0x4F,0x66,0x06D,0x7D,0x27,0x7F,0x6F};

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

 

 

 

2. 7segment 칸 하나씩 켜기 

 

1)캐소드 연결일 때 ?  실제 atmega128에 연결해 시도해보니 잘됨

#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;
		}
		
	}
}

2. 애노드 연결일 ㄸ ㅐ . 잘 됨

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

unsigned char num[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

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

		
	}
}

저항은 330 사용해야된다