Guest User

Untitled

a guest
Jun 22nd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. //usando código do AVR_GCC, diretamente
  2.  
  3. #define F_CPU 16000000UL //define a frequência do microcontrolador em 16 MHz
  4.  
  5. #include <avr/io.h> //definições do componente especificado
  6. #include <util/delay.h> //biblioteca para o uso das rotinas de _delay_
  7. #include <avr/pgmspace.h> //biblioteca para poder gravar dados na memória flash
  8.  
  9. #define DISP PORTD //define um nome auxiliar para o DISP
  10. #define BTN_MAIS PB0 //define PB0 com o nome de BOTAO
  11. #define BTN_MENOS PB1 // define PC0 com o nome BOTAO2
  12.  
  13. #define DELAY_MS 100 //valor de delay em milissegundos
  14.  
  15. //variável gravada na memória flash
  16. const unsigned char Tabela[] PROGMEM = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18};
  17.  
  18. char uni=0, dez=0;
  19.  
  20. void ler_botoes(){
  21. if (PORTB == 0b00000001) uni++; //se o botão for pressionado executa
  22. if (PORTB == 0b00000010) uni--; //se o botão for pressionado executa
  23. }
  24.  
  25. void alternar(){
  26. //copiando do Arduino... logica inversa?
  27. PORTC=0b00000011;
  28. _delay_ms(DELAY_MS);
  29.  
  30. mostrar(uni);
  31. PORTC=0b00000001;
  32. _delay_ms(DELAY_MS);
  33. PORTC=0b00000010;
  34. _delay_ms(DELAY_MS);
  35.  
  36. mostrar(dez);
  37. PORTC=0b00000001;
  38. _delay_ms(DELAY_MS);
  39. PORTC=0b00000010;
  40. _delay_ms(DELAY_MS);
  41.  
  42.  
  43. }
  44.  
  45. void mostrar(unsigned int valor){
  46. //decodifica o valor e mostra no DISP, busca o valor na Tabela.
  47. DISP = pgm_read_byte(&Tabela[valor]);
  48. }
  49.  
  50. void verifica_numeros(){
  51. if ((uni<0) && (dez==0)) {uni=0;} //segurança
  52.  
  53. if ((uni<0)&&(dez>0)) { uni=9; dez--; }
  54. if (uni>9) {uni=0;}
  55. if (dez>9) {dez=0;}
  56.  
  57. }
  58.  
  59. int main()
  60.  
  61. { //setup()
  62. DDRB = 0b00000000; //PB0 e PB1 como pino de entrada, os demais pinos como saída
  63. PORTB = 0b00000011; //habilita o pull-up do PB0 e PB1
  64.  
  65. DDRC = 0b11111111; //habilita PC[0:1] como saída e PC[2:7] como entradas
  66. PORTC = 0xFF; //habilita o pull-up de PC0 e PC1 (???)
  67.  
  68. DDRD = 0xFF; //PORTD como saída ( DISP)
  69. PORTD = 0xFF; //desliga o DISP
  70.  
  71. UCSR0B = 0x00; //PD0 e PD1 como I/O genérico, para uso no Arduino - UART (Serial COM)?
  72.  
  73. while (1) //laço infinito
  74. {
  75. ler_botoes();
  76. verifica_numeros();
  77. alternar();
  78.  
  79. }
  80. }
Add Comment
Please, Sign In to add comment