fork download
  1. #include <pic.h>
  2. CONFIG(0x3f72);
  3.  
  4. #define lcd PORTB
  5. #define rs RE0
  6. #define rw RE1
  7. #define en RE2
  8.  
  9. unsigned int adc_data, an, inttemp;
  10. float val, analog, temp;
  11.  
  12. unsigned char arr1[] = "Analog I/P:";
  13. unsigned char arr2[] = "Room Temp:";
  14.  
  15. void delay(unsigned int count)
  16. {
  17. int i,j;
  18. for(i=0;i<count;i++)
  19. for(j=0;j<1275;j++);
  20. }
  21.  
  22. void lcd_cmd(unsigned char value)
  23. {
  24. rs = 0;
  25. rw = 0;
  26. lcd = value;
  27. en = 1;
  28. delay(20);
  29. en = 0;
  30. }
  31.  
  32. void lcd_data(unsigned char item)
  33. {
  34. rs = 1;
  35. rw = 0;
  36. lcd = item;
  37. en = 1;
  38. delay(20);
  39. en = 0;
  40. }
  41.  
  42. void lcd_data_string(unsigned char *str)
  43. {
  44. int i = 0;
  45. while(str[i] != '\0')
  46. {
  47. lcd_data(str[i]);
  48. i++;
  49. delay(10);
  50. }
  51. }
  52.  
  53. void main()
  54. {
  55. TRISB = 0X00;
  56. TRISE = 0X00;
  57. TRISA = 0XFF;
  58.  
  59. ADCON0 = 0xC1;
  60. ADCON1 = 0xC2;
  61.  
  62. lcd_cmd(0x38);
  63. lcd_cmd(0x0f);
  64. lcd_cmd(0x01);
  65. lcd_cmd(0x06);
  66.  
  67. lcd_cmd(0x80);
  68. lcd_data_string(arr1);
  69.  
  70. lcd_cmd(0xC0);
  71. lcd_data_string(arr2);
  72.  
  73. while(1)
  74. {
  75. ADCON0 = 0xC1;
  76. GODONE = 1;
  77. while(GODONE);
  78.  
  79. adc_data = ((ADRESH << 8) + ADRESL);
  80.  
  81. val = adc_data;
  82. temp = adc_data;
  83.  
  84. inttemp = temp * 0.48; // your original logic
  85.  
  86. analog = (5.0 * val / 1023.0) * 1000; // fixed integer division
  87. an = analog;
  88.  
  89. lcd_cmd(0x8B);
  90. lcd_data((an/1000)+0x30);
  91. lcd_data('.');
  92. lcd_data(((an%1000)/100)+0x30);
  93. lcd_data((((an%1000)%100)/10)+0x30);
  94. lcd_data((((an%1000)%100)%10)+0x30);
  95. lcd_data('V');
  96.  
  97. lcd_cmd(0xCC);
  98. lcd_data((inttemp/1000)+0x30);
  99. lcd_data(((inttemp%1000)/100)+0x30);
  100. lcd_data((((inttemp%1000)%100)/10)+0x30);
  101. lcd_data((((inttemp%1000)%100)%10)+0x30);
  102. }
  103. }
  104.  
Success #stdin #stdout 0.02s 25544KB
stdin
Standard input is empty
stdout
#include <pic.h>
CONFIG(0x3f72);

#define lcd PORTB
#define rs RE0
#define rw RE1
#define en RE2

unsigned int adc_data, an, inttemp;
float val, analog, temp;

unsigned char arr1[] = "Analog I/P:";
unsigned char arr2[] = "Room Temp:";

void delay(unsigned int count)
{
    int i,j;
    for(i=0;i<count;i++)
        for(j=0;j<1275;j++);
}

void lcd_cmd(unsigned char value)
{
    rs = 0;
    rw = 0;
    lcd = value;
    en = 1;
    delay(20);
    en = 0;
}

void lcd_data(unsigned char item)
{
    rs = 1;
    rw = 0;
    lcd = item;
    en = 1;
    delay(20);
    en = 0;
}

void lcd_data_string(unsigned char *str)
{
    int i = 0;
    while(str[i] != '\0')
    {
        lcd_data(str[i]);
        i++;
        delay(10);
    }
}

void main()
{
    TRISB = 0X00;
    TRISE = 0X00;
    TRISA = 0XFF;

    ADCON0 = 0xC1;
    ADCON1 = 0xC2;

    lcd_cmd(0x38);
    lcd_cmd(0x0f);
    lcd_cmd(0x01);
    lcd_cmd(0x06);

    lcd_cmd(0x80);
    lcd_data_string(arr1);

    lcd_cmd(0xC0);
    lcd_data_string(arr2);

    while(1)
    {
        ADCON0 = 0xC1;
        GODONE = 1;
        while(GODONE);

        adc_data = ((ADRESH << 8) + ADRESL);

        val = adc_data;
        temp = adc_data;

        inttemp = temp * 0.48; // your original logic

        analog = (5.0 * val / 1023.0) * 1000; // fixed integer division
        an = analog;

        lcd_cmd(0x8B);
        lcd_data((an/1000)+0x30);
        lcd_data('.');
        lcd_data(((an%1000)/100)+0x30);
        lcd_data((((an%1000)%100)/10)+0x30);
        lcd_data((((an%1000)%100)%10)+0x30);
        lcd_data('V');

        lcd_cmd(0xCC);
        lcd_data((inttemp/1000)+0x30);
        lcd_data(((inttemp%1000)/100)+0x30);
        lcd_data((((inttemp%1000)%100)/10)+0x30);
        lcd_data((((inttemp%1000)%100)%10)+0x30);
    }
}