#include <htc.h>
__CONFIG(LVP_OFF & BOREN_OFF & PWRTE_ON & WDTE_OFF & FOSC_HS);
#define _XTAL_FREQ 20000000
#define DATA PORTB
#define EN RC4
#define RS RC6
#define RW RC5
#define N 40
#define M 20
int number=0;
int ch=0;
unsigned char LCDbuffer[17];
void LCDcmd(char x), LCDdata(char x);
void LCD_goto(char line, char column) ;
int ReadADC();
main(){
TRISB=0X00;
TRISC=0X00;
TRISA = 0xff ;
ADCON1=0b00000000;
ADCON0=0b10000001;//000 = channel 0, (RA0/AN0)
ADIF=0;
ADIE=1;
PEIE=1;
__delay_ms(50);
LCDcmd(0x38); // init
__delay_ms(N);
LCDcmd(0x38); // init
__delay_ms(N);
LCDcmd(0x38); // Function set
__delay_ms(N);
LCDcmd(0x06); // Cursor move increase, no display shift
__delay_ms(N);
LCDcmd(0x0C); // Display on, cursor off, not blinking
__delay_ms(N);
LCDcmd(0x01); // Clear display. goto pos 1
__delay_ms(N);
while(1){
LCD_goto(1,2);
number = ReadADC();
sprintf(LCDbuffer,"%d ",number);
}
}
void LCDcmd(char x)
{
__delay_ms(N);
RS=0;
RW=0;
__delay_ms(M);
EN=1;
__delay_ms(M);
DATA = x; // Command data
__delay_ms(M);
EN=0;
__delay_ms(M);
}
void LCDdata(char x)
{
RS=1;
RW=0;
__delay_ms(M);
EN=1;
__delay_ms(M);
DATA = x; // Print data
__delay_ms(M);
EN=0;
__delay_ms(M);
}
void LCD_goto(char line, char column) // combines line and lineW
{
unsigned char data = 0x80; // default to 1
if(line == 2)data = 0xc0; // change to 2
data += column; // add in column
LCDcmd(data);
}
int ReadADC()
{
int ret = 0;
__delay_ms(10);
GO_DONE = 1; // start conversion
while(GO_DONE); // wait for conversion
ret = (ADRESL & 0x3) << 8; // get
ret += ADRESH; // result
return ret;
}