Projeto 4: Lendo 2 sensores

14/12/2016

PIC18F4431

#include<p18f4431.h>#include<timers.h>
#include<xlcd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
unsigned int vdig, vdig1, timer=0;
float vanal, vanal1;
void delay_ms(unsigned int tempo_ms)
{
while(tempo_ms)
{
tempo_ms--;
Delay10TCYx(200); //gera atraso de 1ms
}
}
void config_ad()
{
ADCON0=0X27;
ADCHS=0X00;
ANSEL0=0XFF;
ADCON1=0X10;
ADCON2=0X80;
TRISC=0X00;
TRISD=0X00;
}
//INICIO DEFINIÇÕES DO LCD//
#define limpar_LCD WriteCmdXLCD(0x01)
void gotoxy(int linha_LCD , int coluna_LCD) // Situa cursor en x,y
{
if(linha_LCD == 1) {
while(BusyXLCD());
SetDDRamAddr(0x80 ' coluna_LCD); // Cursor en linea 1
}
else {
while(BusyXLCD());
SetDDRamAddr(0xC0 ' coluna_LCD); // Cursor en linea 2
}
}
void escreve_LCD(char out[16])
{
char msg[16];
sprintf(msg,out);
putsXLCD(msg);
}
void variavelINT_LCD(long int valorvariavel)
{
char out2[16];
itoa(valorvariavel,out2); //CONVERTE VALORES NUMERICOS EM CARACTERES DO TIPO CHAR
putsXLCD(out2);
}
void variavelREAL_LCD(float x_calc)
{
int x_int; // variavel para valor inteiro
int x_dec; // variavel para valor real
unsigned char string_1[16]; // string definitiva enviada ao LCD
unsigned char string_2[16]; // string provisória
x_int=(int)x_calc; // armazena o valor inteiro do cálculo
x_dec=(x_calc-x_int)*1000.000; // armazena o valor real do cálculo
itoa(x_int,string_1); // envia o valor inteiro para uma sting
strcatpgm2ram(string_1,","); // CONCATENA a "," à primeira string
itoa(x_dec,string_2); // envia o valor decimal para uma segunda string
strcat(string_1,string_2); // CONCATENA a string inteira com a string real
putsXLCD(string_1);
}
void DelayFor18TCY(void) //200us*FOSC/(10*4)= [ (200/1000000)*48000000)/40]
{
Delay10TCYx(40);
return;
}
void DelayPORXLCD(void) //15ms*FOSC/(10*4)=
{
Delay1KTCYx(30);
return;
}
void DelayXLCD(void) //5us*FOSC/(10*4)=
{
Delay10TCYx(1);
return;
}
void iniciar_LCD()
{
OpenXLCD(FOUR_BIT & LINES_5X7);
WriteCmdXLCD(0x0C);
WriteCmdXLCD(0x06);
gotoxy(1,0);
escreve_LCD("Inicializando!");
delay_ms(1000);
gotoxy(2,0);
escreve_LCD(".");
delay_ms(100);
gotoxy(2,0);
escreve_LCD("..");
delay_ms(100);
gotoxy(2,0);
escreve_LCD("...");
delay_ms(100);
limpar_LCD;
}
//FIM DEFINIÇÕES DO LCD//
void main()
{
OSCCON=0X72;
config_ad();
iniciar_LCD();
OpenTimer0(TIMER_INT_OFF
&T0_16BIT
&T0_SOURCE_INT
&T0_PS_1_128);
while(1)
{
timer=ReadTimer0();
if(timer<=1562)
{
ADCHS=0X00;
vdig=ADRESH;
vdig=vdig<<8;
vdig+=ADRESL;
vanal=4.88e-3 * vdig;
delay_ms(50);
gotoxy(1,0);
escreve_LCD("S1:");
gotoxy(1,4);
variavelREAL_LCD(vanal);
delay_ms(50);
if(vanal>2.5)
{
PORTC=0X01;
}
else
{
PORTC=0x00;
}
}
else if((timer>1562)&&(timer<=3124))
{
ADCHS=0X10;
vdig1=ADRESH;
vdig1=vdig1<<8;
vdig1+=ADRESL;
vanal1=4.88e-3 * vdig1;
delay_ms(50);
gotoxy(2,0);
escreve_LCD("S2:");
gotoxy(2,4);
variavelREAL_LCD(vanal1);
delay_ms(50);
if(vanal1>2.5)
{
PORTD=0X01;
}
else
{
PORTD=0x00;
}
}
else if((timer>3124)&&(timer<=4686))
{
WriteTimer0(0);
timer=0;
}
}}

© 2016 Dnl Silva. São Paulo - SP
Desenvolvido por Webnode
Crie seu site grátis! Este site foi criado com Webnode. Crie um grátis para você também! Comece agora