7 сегментный индикатор и AVR микроконтроллер

Подключение 7 сегментного дисплея к AVR

7-сегментные индикаторы состоят из 8 светодиодных сегментов. 7 из этих светодиодных сегментов имеют форму линии, тогда как 1 сегмент имеет круглую форму, который используется для отображения десятичной точки.

7 светодиодных сегментов в форме линий используются для отображения цифр от 0 до 9 и нескольких букв, таких как A, c, d, e, F, H, L, O, P, U и т. д.

Каждый из 8 элементов имеет связанный с ним вывод, который может быть переведен в ВЫСОКИЙ или НИЗКИЙ уровень в зависимости от типа индикатора и отображаемого числа.

7-сегментные индикаторы делятся два типа: с общим анодом и общим катодом, в зависимости от того, какой тип управляющего сигнала используется для включения сегмента дисплея. Чтобы зажечь сегмент для общего анода требуется НИЗКИЙ сигнал, тогда как для общего катода требуется ВЫСОКИЙ сигнал.

Для получения дополнительной информации о 7-сегментном светодиодном дисплее и о том, как его использовать, обратитесь к статье 7-сегментный светодиодный дисплей  в разделе Датчики и модули.

Схема подключения 7-сегментного индикатора к AVR

avr и 7 сегментный индикатор
Подключение семи сегментного индикатора к AVR (ATMEGA16/32)

Пример программы для Atmega16/32 управления 7 сегментным индикатором

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define LED_Direction DDRA        
#define LED_PORT PORTA            
int main(void)
{
    LED_Direction |= 0xff;        
    LED_PORT = 0xff;
    
    char array[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};    
                       
    while(1)
    {
        for(int i=0;i<10;i++)
        {
            LED_PORT = array[i];
            _delay_ms(1000); 
        }
    }
}

Схема подключения 7-сегментного индикатора к AVR через драйвер SN7446AN

7 segment display driver
Подключение 7-сегментного индикатора к микроконтроллеру Atmega 16/32 через драйвер SN7446AN

Пример программы для Atmega 16/32 управления 7 сегментным индикатором через драйвер

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define LED_direction DDRA        
#define LED_PORT PORTA
int main(void)
{
    LED_direction |= 0xff;        
    LED_PORT = 0xff;
    char array[]={0,1,2,3,4,5,6,7,8,9};
    while(1)
    {
        for(int i=0;i<10;i++)
        {
            LED_PORT = array[i];
            _delay_ms(1000); 
        }
    }
}

Схема подключения нескольких дисплеев к одному драйверу

avr seven segment display
Подключение трех 7 сегментных индикаторов с общим анодом к микроконтроллеру AVR (Atmega16/32)

Мы можем подключить более одного дисплея, используя метод динамической индикации. В этом методе контроллер поочередно «зажигает» один из индикаторов, пока остальные выключены. Включение индикатора происходит посредством подачи на базу npn-транзистора (если схема с общим анодом, как показано на изображении выше) небольшого тока, установив на выходе микроконтроллера ВЫСОКИЙ уровень напряжения. Из-за быстроты переключения человеческий глаз не замечает мерцания, но его можно увидеть с помощью видеокамеры телефона.

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define LED_Directions DDRA            
#define LED_Direction DDRB            
#define LED_PORT1 PORTA                
#define LED_PORT2 PORTB                
char array[]={0,1,2,3,4,5,6,7,8,9};
int k,j,i,factor;
int brightvalue=0;
void set_brightness()
{
    int brightness = brightvalue;
    while (0 < brightness)
    {
        _delay_us(1);
        --brightness;
    }
}
ISR(TIMER0_OVF_vect)
{
    LED_PORT2 = 0x01;
    LED_PORT1 = array[k];
    set_brightness();
    LED_PORT2 = 0x02;
    LED_PORT1 = array[j];
    set_brightness();
                
    LED_PORT2 = 0x04;
    LED_PORT1 = array[i];
    set_brightness();
}
void SevenSeg_SetNumber(int num)
{
    k=num%10;
    num = num/10;
        
    j=num%10;
    num = num/10;
                
    i=num%10;
    num = num/10;
}
void sevseg_refreshDisplay(char refvalue)
{
    TIMSK=(1<<TOIE0);        
    TCNT0 = refvalue;        
    TCCR0 = (1<<CS02) | (1<<CS00);  
}
int main(void)
{
    sei();
    LED_Directions = 0xff;        
    LED_Direction = 0xff;        
    LED_PORT1 = 0xff;
    LED_PORT2 = 0xff;
    sevseg_refreshDisplay(0xC2);    
    brightvalue=1000;        
    
    while(1)
    {
        SevenSeg_SetNumber(456);
        _delay_ms(1000);    
        SevenSeg_SetNumber(789);
         _delay_ms(1000);
    }
}

Загрузки

Где купить

  • Набор выводных резисторов
  • ATMEGA16 DIP-40
  • Набор транзисторов (BC327, BC337, BC517, BC547, BC548, BC549, BC550, BC556, BC557, BC558 — 200 штук)
  • 7-ми сегментные индикаторы (одно-, двух-, трех- и четырехразрядные, можно выбрать как с общим катодом, так и с общим анодом)
  • Микросхема драйвера SN7446N
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии