Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //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();
- }
- }
Add Comment
Please, Sign In to add comment