fabiosouzaEmbarcados

GERADOR DE FUNÇÕES - Adanilson

Jul 19th, 2016
148
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //GERADOR DE FUNÇÕES
  2. #include <16f877a.h>
  3. #use delay (clock=20000000)
  4. #fuses HS, NOWDT, PUT, BROWNOUT, NOLVP
  5.  
  6.  
  7. #define LCD_DB4 PIN_D4
  8. #define LCD_DB5 PIN_D5
  9. #define LCD_DB6 PIN_D6
  10. #define LCD_DB7 PIN_D7
  11. #define LCD_E PIN_E1
  12. #define LCD_RS PIN_E0
  13.  
  14.  
  15. #include "lcd.c"
  16.  
  17. int8 k=1, ct_p = 0;
  18. int16 freq, per, temp;
  19. float freq_k;
  20. int1 flag=0;
  21. int16 x=0,y=0;
  22.  
  23.  
  24. #int_ccp1 //Interrupção Captura do CCP1
  25. void capture_isr()
  26. {
  27.    ++ct_p;
  28.    per = get_timer1();
  29.    set_timer1(0);
  30. }
  31.  
  32. void atualiza_lcd()
  33. {
  34.    switch (x)//seleção da forma de onda
  35.    {
  36.       case 0:
  37.          lcd_putc("\f ONDA SENOIDAL");
  38.          output_high(pin_b3);
  39.          output_low(pin_b4);
  40.       break;
  41.      
  42.       case 1:
  43.          lcd_putc("\f ONDA QUADRADA");
  44.          output_high(pin_b4);
  45.          output_low(pin_b3);
  46.       break;
  47.      
  48.       case 2:
  49.          lcd_putc("\f ONDA TRIANGULAR");
  50.          output_high(pin_b3);
  51.          output_high(pin_b4);
  52.       break;
  53.      
  54.       default:
  55.          x=0;
  56.          output_low(pin_c0);
  57.          output_low(pin_c1);
  58.    }
  59.    
  60.    
  61.    switch (y) // seleção da escala desejada
  62.    {
  63.       case 0:
  64.          lcd_putc(" \n 1Hz a 100Hz");
  65.          output_high(pin_b3);
  66.          output_low(pin_b4);
  67.       break;
  68.      
  69.       case 1:
  70.          lcd_putc(" \n 100Hz a 500Hz");
  71.          output_high(pin_b3);
  72.          output_low(pin_b4);
  73.       break;
  74.      
  75.       case 2:
  76.          lcd_putc("\n 500Hz a 4KHz");
  77.          output_high(pin_b3);
  78.          output_low(pin_b4);
  79.       break;
  80.      
  81.       default:
  82.          y=0;
  83.          output_high(pin_b3);
  84.          output_low(pin_b4);
  85.    }
  86.    
  87.    
  88.    if (freq <= 1000)
  89.    {
  90.       lcd_gotoxy(15,0);
  91.       printf(lcd_putc," Freq: %lu Hz ",freq); //Impressão no LCD
  92.    }
  93.    else if (freq > 1000) // Divide fre. por 1000 e imprime prefixo k
  94.    {
  95.       lcd_gotoxy(15,0);
  96.       printf(lcd_putc," Freq: %.2f kHz ",freq_k); //Impressão no LCD
  97.    }
  98. }
  99.  
  100.  
  101. void main()
  102. {
  103.    lcd_init(); //Inicializa LCD
  104.    setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Configura TMR1
  105.    setup_ccp1(CCP_CAPTURE_RE);
  106.    enable_interrupts(int_ccp1); //Habilita interrupção externa em RB0
  107.    enable_interrupts(global); //Habilitação geral de interrupção
  108.    
  109.    while (TRUE)
  110.    {
  111.       if (ct_p)
  112.       {
  113.          freq = 625000.0/per;
  114.          freq_k = 625.0/per;
  115.          ct_p = 0;
  116.       }
  117.      
  118.       if(k==1) //imprime a frequência
  119.       {
  120.          atualiza_lcd();
  121.       }
  122.      
  123.       //leitura dos pinos de entrada para seleção da forma de onda e escala
  124.       if(!input(pin_b0)&& (flag==0))
  125.       {
  126.          x++;
  127.          flag=1;
  128.       }
  129.       if(!input(pin_b1)&& (flag==0))
  130.       {
  131.          y++;
  132.          flag=1;
  133.       }
  134.       else if(input(pin_b0)&& input(pin_b1))
  135.       {
  136.          flag=0;
  137.       }
  138.      
  139.       if (temp>0)
  140.       {
  141.          atualiza_lcd();
  142.          delay_ms(10);
  143.       }
  144.    }
  145. }
RAW Paste Data