Mostrador LED de 7 segmentos

Conhecimento necessário: [HW] Módulo de Interface do Utilizador, [LIB] LED Display de 7 segmentos,
[LIB] Espera [PRT] LED

Teoria

7 segmentos

Um mostrador de números LED de 7 segmentos consiste em 7 LEDs posicionados em forma de número 8. Ao ligar ou desligar os LEDs correspondentes (segmentos), é possível exibir os números de 0 a nove, bem como algumas letras.

Electricamente todos os ânodos dos LEDs estão ligados a um pin ânodo ca. Os LEDs são iluminados ao mudar os seus catodos (a, b, c…). Existem também conexões invertidas, onde os indicadores têm um cátodo comum cc. Geralmente vários indicadores de números são usados ​​para exibir números com vários dígitos - para este fim os indicadores estão equipados com segmento coma (ponto) dp. Apesar da sua designação, cada indicador tem 8 segmentos, devido ao númerod e segmentos necessários para representar cada dígito.

Posicionamento dos segmentos do indicador LED e esquema eléctrico
O acumulador do índice de shift do driver de LED, com segmentos do indicador correspondente.

Os LEDS indicadores de números são fáceis de usar. Podem ser controlados diretamente a partir dos pins do microcontrolador, mas também há drivers especiais, que permitem controlar os indicadores utilizando menos pinos do microcontrolador. Existem diferentes cores de LEDs indicadores de número, que podem ser muito brilhantes e muito grandes. Para exibir todo o alfabeto latino existem indicadores com segmentos extras. Existem diferentes drivers que utilizam uma interface de série, semelhante ao SPI, onde tanto o sinal de relógio como o sinal de dados são utilizados. Ao contrário do SPI o chip-select não é usado aqui, e é substituído pela função latch. As acima mencionadas três linhas estão ligados aos pins do controlador.

  • Sinal de Latch
  • Sinal de Relógio
  • Sinal de dados

Prática

Existe umindicador de 7 segmentos no módulo de i/o digitais. Ele é controlado por meio de um condutor com interface serial. Para exibir os números no módulo indicador HomeLabs Digital i/o, a seguinte funcionalidade está escrita na biblioteca do HomeLab.

// Marking card
// The bits are marking the segments. Lower ranking is A, higher ranking is DP
const unsigned char __attribute__ ((weak)) segment_char_map[11] = 
{
	0b00111111,
	0b00000110,
	0b01011011,
	0b01001111,
	0b01100110,
	0b01101101,
	0b01111100,
	0b00000111,
	0b01111111,
	0b01100111,
	0b01111001   // E like Error
};
 
// Start-up of the 7-segment indicator
void segment_display_init(void)
{
	// Set latch, data out and clock pins as output
	pin_setup_output(segment_display_latch);
	pin_setup_output(segment_display_data_out);
	pin_setup_output(segment_display_clock);
}
 
// Displaying number on the 7-segment indicator
void segment_display_write(unsigned char digit)
{
	unsigned char map;
	signed char i;
 
	// Check-up of the number
	if (digit > 9)
	{
		digit = 10;
	}
 
	// Number as the card of the segments
	map = segment_char_map[digit];
 
	// Latch-signal off
	pin_clear(segment_display_latch);
 
	// Sending he bits. Higher ranking goes first
	for (i = 7; i >= 0; i--)
	{
		// Setting the pin according to the value of the bit of the card
		pin_set_to(segment_display_data_out, bit_is_set(map, i));
 
		// The clock-signal as high for a moment
		pin_set(segment_display_clock);
		_delay_us(1);
 
		// The clock-signal as low
		pin_clear(segment_display_clock);
		_delay_us(1);
	}
 
	// Latch-signal on
	pin_set(segment_display_latch);
}

Para exibir números e a letra “E”, é criado um array constante “fraco” segment_char_map, onde a iluminação de todos os oito segmentos é marcada com bit 1 enquanto que são desligados com o bit 0. Os bits, do menos significativo ao mais significativo (da direita para a esquerda na forma binária) são segmentos de marcação A, B, C, D, E, F, G e DP. A interface de controlo do driver é realizada através do software SPI, ou seja, usando um software para controlar os pins de comunicação de dados no programa. Todos os três pins estão definidas como saída com a função segment_display_init. segment_display_write serve para exibir a função, a qual encontra o segment-card da marca a partir da matriz e transmite bit a bit todos os valores dos segmentos ao driver. A frequência do sinal de relógio com as esperas de software é agora de aproximadamente 500 kHz. Quando um utilizador define uma variável segment_char_map no seu código, é possível criar outros caracteres no ecrã (por exemplo, texto, etc.)

O que se segue é um exemplo mais concreto de um programa para usar o indicador de números. A função previamente descrita da biblioteca é descrita no programa. O programa conta números de 0 a 9, com intervalo aproximado de um segundo e, de seguida, exibe a letra E, pois números de dois dígitos não são possíveis de mostrar no indicador de um dígito.

// The example program of the 7-segment LED indicator of the HomeLab's
#include <homelab/module/segment_display.h>
#include <homelab/delay.h>
 
// Main program
int main(void)
{
	int counter = 0;
 
	// Set-up of the 7-segment indicator
	segment_display_init();
 
	// Endless loop
	while (true)
	{
		// Displaying the values of the counter
		segment_display_write(counter % 10);
 
		// Counting up to 10
		counter++;
		if (counter>19) counter=0;
 
		// Delay for 1 second
		sw_delay_ms(1000);
	}
}
pt/examples/display/segment_display.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0