Termômetro Digital com PIC16F877A

Esse projeto criado por mim, é um termômetro digital que possui quatro escalas: graus celsius(°C), fahrenheit(°F) , Rankine(°R) e Kelvin(K).Utiliza um sensor de temperatura LM45 (datasheet) ligado a PORTA.0  que possui a função de conversor Analógico-Digital e um display LCD Alfanumérico 20×2. A escala de medição é de 0-100°C, 32-212°F, 273-373K e 492-671°R. Através da combinação das chaves SW1 e SW2 você alterna entre as escalas.

ESQUEMA

termometer
DOWNLOAD
Firmware: termometer.hex;
Arquivo assembly: termometer.asm;
Arquivo de simulação no Proteus: termometer.dsn;

CÓDIGO-FONTE

  1. sbit LCD_RS at RB4_bit;
  2. sbit LCD_EN at RB5_bit;
  3. sbit LCD_D4 at RB0_bit;
  4. sbit LCD_D5 at RB1_bit;
  5. sbit LCD_D6 at RB2_bit;
  6. sbit LCD_D7 at RB3_bit;
  7. sbit LCD_RS_Direction at TRISB4_bit;
  8. sbit LCD_EN_Direction at TRISB5_bit;
  9. sbit LCD_D4_Direction at TRISB0_bit;
  10. sbit LCD_D5_Direction at TRISB1_bit;
  11. sbit LCD_D6_Direction at TRISB2_bit;
  12. sbit LCD_D7_Direction at TRISB3_bit;
  13. unsigned long value;
  14. unsigned char d1,d2,d3,d4;
  15. void Print()
  16. {
  17. Lcd_Out(2,1,“Temperatura: “);
  18. Lcd_Chr_CP(d1+48);
  19. Lcd_Chr_CP(d2+48);
  20. Lcd_chr_CP(d3+48);
  21. Lcd_chr_CP(44);
  22. Lcd_chr_CP(d4+48);
  23. }
  24. void main()
  25. {
  26. TRISA = 0xFF;
  27. TRISB = 0b11000000;
  28. Lcd_Init();
  29. Delay_ms( 100 );
  30. Lcd_Cmd( _LCD_CURSOR_OFF );
  31. Lcd_Out( 1, 3, “MICROCONTROLANDOS” );
  32. while(1)
  33. {
  34. value = ADC_Read(0);
  35. value = (value*500/1023)*10;
  36. if (PORTB.F6 == 0 && PORTB.F7 == 0 )
  37. {
  38. d1 = value/1000;
  39. d2 = (value%1000)/100;
  40. d3 = ((value%1000)%100)/10;
  41. d4 = ((value%1000)%100)%10;
  42. Print();
  43. Lcd_chr_CP(223);
  44. Lcd_Out_CP(“C”);
  45. }
  46. else if(PORTB.F6 == 0 && PORTB.F7 == 1 )
  47. {
  48. value = (value * 1.79) + 32;
  49. d1 = value/1000;
  50. d2 = (value%1000)/100;
  51. d3 = ((value%1000)%100)/10;
  52. d4 = ((value%1000)%100)%10;
  53. Print();
  54. Lcd_chr_CP(223);
  55. Lcd_Out_CP(“F”);
  56. }
  57. else if( PORTB.F6 == 1 && PORTB.F7 == 0 )
  58. {
  59. value = value + 273;
  60. d1 = value/1000;
  61. d2 = (value%1000)/100;
  62. d3 = ((value%1000)%100)/10;
  63. d4 = ((value%1000)%100)%10;
  64. Print();
  65. Lcd_Out_CP(“K”);
  66. }
  67. else
  68. {
  69. value = (value * 1.8)+ 32 + 460;
  70. d1 = value/1000;
  71. d2 = (value%1000)/100;
  72. d3 = ((value%1000)%100)/10;
  73. d4 = ((value%1000)%100)%10;
  74. Print();
  75. Lcd_chr_CP(223);
  76. Lcd_Out_CP(“R”);
  77. }
  78. Delay_ms(20);
  79. }
  80. }
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s