Created
February 19, 2018 14:35
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Demonstração do uso de um display de 7 segmentos com ATMEGA328P. | |
Autor: Tiago Melo | |
Blog: Microcontrolandos | |
Compilador: MikroC PRO AVR | |
Bibliotecas: | |
*/ | |
//Mascara de bits usado para escrever um digito no display | |
char DisplayCatodoComum[] = { 63, 6, 91, 79, 102, 109, 125, 7, 127, 111 }; | |
char contador = 1; //conta de 0 até 99. | |
char flags = 0; //usado para salvar o estado do botao | |
char digitoDasUnidades; //usado para guardar o digito das unidades ( 0...9 ) | |
char digitoDasDezenas; //usado para guardar o digito das dezanas ( 0...9 ) | |
void main() | |
{ | |
//Inicializa os pinos do Display | |
DDRD = 255; //PORTB como saída | |
PORTD = 0; //inicializa a PORTB com o valor 0. | |
DDRB.B0 = 1; //pino PB0 como saída | |
PORTB.B0 = 1; //valor inicial do pino PB0 ( 1 = display desligado ) | |
DDRB.B1 = 1; //pino PB1 como saída | |
PORTB.B1 = 1; //valor inicial do pino PB1 ( 1 = display desligado ) | |
DDRB.B4 = 0; //pino do botao como entrada | |
PORTB.B4 = 1; //habilita o resistor de pull-up do pino do botao | |
while(1) | |
{ | |
//botão foi pressionado? Sim!!! Vamos então, salvar seu estado na flag. | |
if( !PINB.B4 ) flags.B0 = 1; | |
if( PINB.B4 && flags.B0 ) //O botão foi solto e anteriormente estava pressionado? Sim!!! | |
{ | |
flags.B0 = 0; //limpa a flag | |
contador++; //acrescenta +1 à variável 'contador' | |
//display com dois segmentos conta até 99. | |
if( contador > 99 ) //'contador' é maior que 99? Sim!!! | |
contador = 0; | |
} | |
//recupera os digitos das unidades e dezenas | |
//10 porque estamos contando na base decimal! | |
//E se quisessemos contar na base hexadecimal ou octal? | |
digitoDasUnidades = contador % 10; | |
digitoDasDezenas = ( contador / 10 ) % 10; | |
//desativa todos os displays | |
PORTB.B0 = 1; | |
PORTB.B1 = 1; | |
//Escreve o digito num display | |
PORTD = DisplayCatodoComum[ digitoDasUnidades ]; | |
//habilita o display 2 | |
PORTB.B0 = 0; | |
Delay_ms( 1 ); | |
//desativa todos os displays | |
PORTB.B0 = 1; | |
PORTB.B1 = 1; | |
//Escreve o digito num display | |
PORTD = DisplayCatodoComum[ digitoDasDezenas ]; | |
//habilita o display 1 | |
PORTB.B1 = 0; | |
Delay_ms( 1 ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment