fork download
  1. #include <xc.h>
  2. #define _XTAL_FREQ 4000000
  3.  
  4. // PIC Configuration Bits
  5. #pragma config FOSC = HS
  6. #pragma config WDTE = OFF
  7. #pragma config PWRTE = OFF
  8. #pragma config BOREN = OFF
  9. #pragma config LVP = OFF
  10. #pragma config CPD = OFF
  11. #pragma config WRT = OFF
  12. #pragma config CP = OFF
  13.  
  14. // LCD Functions
  15. void lcd_cmd(unsigned char cmd);
  16. void lcd_data(unsigned char data);
  17. void lcd_init();
  18. void lcd_print(char *str);
  19.  
  20. void main() {
  21. // ADC and Ports setup
  22. ADCON1 = 0x80; // Configure AN0 as analog, rest digital
  23. TRISA = 0x01; // RA0 input (LM35)
  24. TRISB = 0x00; // PORTB output (LCD)
  25.  
  26. lcd_init();
  27. lcd_print("Temperature:");
  28.  
  29. while(1) {
  30. // Start ADC on AN0
  31. ADCON0 = 0x41; // ADC on, channel 0
  32. __delay_ms(2);
  33. GO_nDONE = 1;
  34. while(GO_nDONE);
  35.  
  36. int adc = (ADRESH << 8) + ADRESL;
  37. float temp = adc * 0.488; // LM35 conversion
  38.  
  39. // Display temperature on LCD
  40. lcd_cmd(0xC0); // Second line
  41. lcd_data((int)temp/10 + '0'); // Tens
  42. lcd_data((int)temp%10 + '0'); // Ones
  43. lcd_data(223); // Degree symbol
  44. lcd_data('C');
  45.  
  46. __delay_ms(500);
  47. }
  48. }
  49.  
  50. // Implement LCD functions here (4-bit mode)
  51. void lcd_cmd(unsigned char cmd){
  52. PORTB = (cmd & 0xF0); // Upper nibble
  53. RB1 = 1; RB0 = 0; __delay_ms(2); RB1 = 0;
  54. PORTB = (cmd << 4); // Lower nibble
  55. RB1 = 1; RB0 = 0; __delay_ms(2); RB1 = 0;
  56. }
  57.  
  58. void lcd_data(unsigned char data){
  59. PORTB = (data & 0xF0); // Upper nibble
  60. RB1 = 1; RB0 = 1; __delay_ms(2); RB1 = 0;
  61. PORTB = (data << 4); // Lower nibble
  62. RB1 = 1; RB0 = 1; __delay_ms(2); RB1 = 0;
  63. }
  64.  
  65. void lcd_init(){
  66. __delay_ms(20);
  67. lcd_cmd(0x02); // Initialize LCD
  68. lcd_cmd(0x28); // 4-bit, 2 lines
  69. lcd_cmd(0x0C); // Display ON
  70. lcd_cmd(0x06); // Entry mode
  71. }
  72.  
  73. void lcd_print(char *str){
  74. while(*str) lcd_data(*str++);
  75. }
  76.  
Success #stdin #stdout 0.03s 25428KB
stdin
Standard input is empty
stdout
#include <xc.h>
#define _XTAL_FREQ 4000000

// PIC Configuration Bits
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

// LCD Functions
void lcd_cmd(unsigned char cmd);
void lcd_data(unsigned char data);
void lcd_init();
void lcd_print(char *str);

void main() {
    // ADC and Ports setup
    ADCON1 = 0x80;   // Configure AN0 as analog, rest digital
    TRISA = 0x01;    // RA0 input (LM35)
    TRISB = 0x00;    // PORTB output (LCD)

    lcd_init();
    lcd_print("Temperature:");

    while(1) {
        // Start ADC on AN0
        ADCON0 = 0x41;   // ADC on, channel 0
        __delay_ms(2);
        GO_nDONE = 1;
        while(GO_nDONE);

        int adc = (ADRESH << 8) + ADRESL;
        float temp = adc * 0.488; // LM35 conversion

        // Display temperature on LCD
        lcd_cmd(0xC0);   // Second line
        lcd_data((int)temp/10 + '0');  // Tens
        lcd_data((int)temp%10 + '0');  // Ones
        lcd_data(223);    // Degree symbol
        lcd_data('C');

        __delay_ms(500);
    }
}

// Implement LCD functions here (4-bit mode)
void lcd_cmd(unsigned char cmd){
    PORTB = (cmd & 0xF0);  // Upper nibble
    RB1 = 1; RB0 = 0; __delay_ms(2); RB1 = 0; 
    PORTB = (cmd << 4);    // Lower nibble
    RB1 = 1; RB0 = 0; __delay_ms(2); RB1 = 0;
}

void lcd_data(unsigned char data){
    PORTB = (data & 0xF0); // Upper nibble
    RB1 = 1; RB0 = 1; __delay_ms(2); RB1 = 0;
    PORTB = (data << 4);   // Lower nibble
    RB1 = 1; RB0 = 1; __delay_ms(2); RB1 = 0;
}

void lcd_init(){
    __delay_ms(20);
    lcd_cmd(0x02); // Initialize LCD
    lcd_cmd(0x28); // 4-bit, 2 lines
    lcd_cmd(0x0C); // Display ON
    lcd_cmd(0x06); // Entry mode
}

void lcd_print(char *str){
    while(*str) lcd_data(*str++);
}