Código Medidor de Distancia
Código Medidor de Distancia
#include "lcd.h"
void Lcd_Port(char a)
void Lcd_Cmd(char a)
RS = 0;
Lcd_Port(a);
EN = 1;
__delay_ms(4);
EN = 0;
void Lcd_Clear(void)
Lcd_Cmd(0);
Lcd_Cmd(1);
char temp, z, y;
if (a == 1)
temp = 0x80 + b - 1;
z = temp >> 4;
Lcd_Cmd(z);
Lcd_Cmd(y);
else if (a == 2)
temp = 0xC0 + b - 1;
z = temp >> 4;
Lcd_Cmd(z);
Lcd_Cmd(y);
else if (a == 3)
temp = 0x94 + b - 1;
z = temp >> 4;
Lcd_Cmd(z);
Lcd_Cmd(y);
else if (a == 4)
temp = 0xD4 + b - 1;
z = temp >> 4;
Lcd_Cmd(y);
void Lcd_Init(void)
RS_DIR = 0;
EN_DIR = 0;
D4_DIR = 0;
D5_DIR = 0;
D6_DIR = 0;
D7_DIR = 0;
Lcd_Port(0x00);
__delay_ms(20);
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
Lcd_Cmd(0x03);
Lcd_Cmd(0x02);
Lcd_Cmd(0x02);
Lcd_Cmd(0x08);
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
Lcd_Cmd(0x00);
Lcd_Cmd(0x06);
Lcd_Clear();
}
void Lcd_Write_Char(char a)
char temp, y;
y = a & 0xF0;
RS = 1;
EN = 1;
__delay_us(40);
EN = 0;
Lcd_Port(temp);
EN = 1;
__delay_us(40);
EN = 0;
int i;
Lcd_Write_Char(a[i]);
void Lcd_Shift_Right(void)
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
void Lcd_Shift_Left(void)
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
void Lcd_Blink(void)
Lcd_Cmd(0x00);
Lcd_Cmd(0x0F);
void Lcd_NoBlink(void)
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
#ifdef USE_CGRAM_LCD
switch (add)
case 0:
Lcd_Write_Char(chardata[i]);
break;
case 1:
for (char i = 8; i <= 15; i++)
Lcd_Write_Char(chardata[i - 8]);
break;
case 2:
Lcd_Write_Char(chardata[i - 16]);
break;
case 3:
Lcd_Write_Char(chardata[i - 24]);
break;
case 4:
Lcd_Write_Char(chardata[i - 32]);
break;
case 5:
Lcd_Write_Char(chardata[i - 40]);
break;
case 6:
Lcd_Write_Char(chardata[i - 48]);
break;
case 7:
Lcd_Write_Char(chardata[i - 56]);
break;
}
void Lcd_CGRAM_Init(void)
Lcd_Cmd(0x04);
Lcd_Cmd(0x00);
void Lcd_CGRAM_Close(void)
Lcd_Cmd(0x00);
Lcd_Cmd(0x02);
#endif
//Código lcd.h
#include <xc.h>
//#define USE_CGRAM_LCD
#define RS LATDbits.LATD2
#define EN LATDbits.LATD3
#define D4 LATDbits.LATD4
#define D5 LATDbits.LATD5
#define D6 LATDbits.LATD6
#define D7 LATDbits.LATD7
void Lcd_Clear(void);
void Lcd_Init(void);
void Lcd_Shift_Right(void);
void Lcd_Shift_Left(void);
void Lcd_Blink(void);
void Lcd_NoBlink(void);
#ifdef USE_CGRAM_LCD
void Lcd_CGRAM_Init(void);
void Lcd_CGRAM_Close(void);
#endif
//código hc-sr04.h
#ifndef HC_SR04_H
#define HC_SR04_H
#include <xc.h>
void HCSR04_Init(void);
float HCSR04_Get_Distance(void);
#endif // HC_SR04_H
//código hc-sr04.c
#include "hc-sr04.h"
void HCSR04_Init(void)
float HCSR04_Get_Distance(void)
TRIG_PIN = 1;
__delay_us(10); // Pulso de al menos 10 us
TRIG_PIN = 0;
while(ECHO_PIN == 0);
// Reiniciar Timer1
TMR1H = 0x00;
TMR1L = 0x00;
while(ECHO_PIN == 1);
timer_low = TMR1L;
timer_high = TMR1H;
// Calcular la distancia
return distance;
//Código float_str.h
#ifndef FLOAT_STR_H
#define FLOAT_STR_H
#endif // FLOAT_STR_H
//Código float_str.c
#include "float_str.h"
double tempo_float;
if (numero < 0)
*cadena++ = '-';
numero = -numero;
numero *= 10.0;
largo_entera--;
numero /= 10.0;
largo_entera++;
}
largo_n += largo_entera;
tempo_float /= 10.0;
numero = 1.0;
largo_entera++;
if (largo_entera < 0)
*cadena++ = '0';
*cadena++ = '.';
if (largo_n < 0)
largo_entera -= largo_n;
*cadena++ = '0';
}
tempo_int = numero;
if (cont_for == largo_entera)
*cadena++ = '.';
numero -= tempo_int;
numero *= 10.0;
*cadena = '\0';
//Código main.c
#pragma config CCP2MX = PORTC // CCP2 MUX bit: CCP2 input/output is multiplexed with
RC1
#pragma config PBADEN = OFF // PORTB A/D Enable bit: PORTB<4:0> pins are configured
as digital I/O on Reset
#pragma config LVP = OFF // Single-Supply ICSP Disable bit: Single-Supply ICSP disabled
#pragma config DEBUG = OFF // Background Debugger Enable bit: Background debugger
disabled, RB6 and RB7 are general purpose I/O pins
#include <xc.h>
char buffer[20];
void main()
TRISBbits.RB0 = 0;
TRISBbits.RB1 = 0;
LATBbits.LB0 = 0;
LATBbits.LB1 = 0;
while(1)
Lcd_Clear();
Lcd_Set_Cursor(1,2);
Lcd_Write_String("Sensor HC-SR04");
Lcd_Set_Cursor(2,1);
floattostr(distancia, buffer, 2); // Convierte la variable float a string
Lcd_Write_String("Dist: ");
Lcd_Write_String(" cm");
LATBbits.LB0 = 0;
LATBbits.LB1 = 1;
else
LATBbits.LB0 = 1;
LATBbits.LB1 = 0;
__delay_ms(200);