#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 1000000
#pragma config FOSC = XT // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
unsigned long volume, value, f, ADCvalue, voltage;
int i, x;
int mask;
const unsigned char DIGIT[10] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void ADCinit(void){
ADCS2= ADCS1= 0; ADCS0= 1; //Set Fosc/8
ADFM= 1; //right justified
CHS2= CHS1= CHS0= 0; // Choose AN0
PCFG3= PCFG2= PCFG1= 1; PCFG0= 0;
}
unsigned int atod(void){
ADON= 1; //A to D on
GO= 1;
__delay_ms(1);
while (GO);
return (int) ADRESH* 256 + ADRESL; // Dich 8 bit
}
void shift_out(int numero){
value= DIGIT[numero];
mask= 1;
RC3= 0; //Set ST_CP= 0 , open latch
RC0= 0; // Set SH_CP=0 , enable to write to shift register
for(i=0; i< 7; i++){
if (value & mask)
RC1= 1; //DS= 1;
else
RC1=0; //DS= 0;
RC0= 1;
__delay_us(5);
RC0= 0; // Next bit
__delay_us (5);
mask = mask << 1;
}
RC3 = 1; // Shift out to Qn gate
RC2 = 0;
}
void main (){
TRISA= 0xff;
TRISD = 0;
TRISC= 0x00;
ADCinit ();
unsigned int ones,tens=0;
while(1)
{
__delay_ms(1);
ADCvalue = atod();
voltage = ADCvalue *5000 /1023;
f = voltage / 10 - 273;
ones= f%10;
tens= (f/10)%10;
RC2 = 1;
RD0 = 0; RD1 = 1;
shift_out(tens);
__delay_ms(10);
RC2 = 1;
RD1 = 0; RD0 = 1;
shift_out(ones);
__delay_ms(10);
}
}