Conhecimento necessário:
[HW] Módulo de Interface do Utilizador,
[LIB] LED Display de 7 segmentos,
[LIB] Espera
[PRT] LED
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.
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.
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); } }