Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save requeijaum/5d0a1bdee75a53431a8c40090b0bb39f to your computer and use it in GitHub Desktop.
Save requeijaum/5d0a1bdee75a53431a8c40090b0bb39f to your computer and use it in GitHub Desktop.
//usando código do AVR_GCC, diretamente
#define F_CPU 16000000UL //define a frequência do microcontrolador em 16 MHz
#include <avr/io.h> //definições do componente especificado
#include <util/delay.h> //biblioteca para o uso das rotinas de _delay_
#include <avr/pgmspace.h> //biblioteca para poder gravar dados na memória flash
#define DISP PORTD //define um nome auxiliar para o DISP
#define BTN_MAIS PB0 //define PB0 com o nome de BOTAO
#define BTN_MENOS PB1 // define PC0 com o nome BOTAO2
#define DELAY_MS 100 //valor de delay em milissegundos
//variável gravada na memória flash
const unsigned char Tabela[] PROGMEM = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18};
char uni=0, dez=0;
void ler_botoes(){
if (PORTB == 0b00000001) uni++; //se o botão for pressionado executa
if (PORTB == 0b00000010) uni--; //se o botão for pressionado executa
}
void alternar(){
//copiando do Arduino... logica inversa?
PORTC=0b00000011;
_delay_ms(DELAY_MS);
mostrar(uni);
PORTC=0b00000001;
_delay_ms(DELAY_MS);
PORTC=0b00000010;
_delay_ms(DELAY_MS);
mostrar(dez);
PORTC=0b00000001;
_delay_ms(DELAY_MS);
PORTC=0b00000010;
_delay_ms(DELAY_MS);
}
void mostrar(unsigned int valor){
//decodifica o valor e mostra no DISP, busca o valor na Tabela.
DISP = pgm_read_byte(&Tabela[valor]);
}
void verifica_numeros(){
if ((uni<0) && (dez==0)) {uni=0;} //segurança
if ((uni<0)&&(dez>0)) { uni=9; dez--; }
if (uni>9) {uni=0;}
if (dez>9) {dez=0;}
}
int main()
{ //setup()
DDRB = 0b00000000; //PB0 e PB1 como pino de entrada, os demais pinos como saída
PORTB = 0b00000011; //habilita o pull-up do PB0 e PB1
DDRC = 0b11111111; //habilita PC[0:1] como saída e PC[2:7] como entradas
PORTC = 0xFF; //habilita o pull-up de PC0 e PC1 (???)
DDRD = 0xFF; //PORTD como saída ( DISP)
PORTD = 0xFF; //desliga o DISP
UCSR0B = 0x00; //PD0 e PD1 como I/O genérico, para uso no Arduino - UART (Serial COM)?
while (1) //laço infinito
{
ler_botoes();
verifica_numeros();
alternar();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment