Você está na página 1de 4

ACTIVIDAD TRES: MOSTRAR LA VARIACION DE VOLTAJE DE ACUERDO AL POTENCIOMETRO EN L

A LCD, TX Y 7 SEGMENTOS
// PIC16F887 Opciones de los Bits de configuracione
#include <xc.h>
#include <stdio.h>

//Librera del Microcontrolador en C

// CONFIG1
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma

config
config
config
config
config
config
config
config
config
config

FOSC = XT
WDTE = OFF
PWRTE = ON
MCLRE = ON
CP = OFF
CPD = OFF
BOREN = ON
IESO = ON
FCMEN = ON
LVP = OFF

//Oscladores
//Activacin del Perro Guardin
//Configuracin del Master Clear
//Proteccin del Cdigo

//Programacin con alto o Bajo voltaje

// CONFIG2
#pragma config BOR4V = BOR40V
#pragma config WRT = OFF

//Sin reset por encima de de 4V o 2V

//Encabezado
#define _XTAL_FREQ 4000000

//Declaracin del Oscilador

#define LCD_RS RD6


#define LCD_EN RD7
#define BUS_DE_DATOS PORTB

//Asociar la variable LCD_RS al PIN RD6


//Asociar la variable LCD_EN al PIN RD7
//Asociar BUS_DE_DATOS al PUERTOB

char unidades, decenas, centenas, miles, diezmiles, unidadesd, decenasd, centena


sd, milesd, diezmilesd;
int x = 0, y, digital;
int unsigned voltajelcd,aux, auxd ;
float voltaje;
void
void
void
void
void
void

lcd_init(void);
set_lcd(void);
lcd_puts(const char * s);
lcd_putch(char c);
lcd_goto(unsigned char pos);
lcd_write(unsigned char c);

void Binbcd(void) {
aux = voltajelcd;
unidades = 0;
decenas = 0;
centenas = 0;
miles = 0;
diezmiles = 0;
while (aux >= 10000) {
aux = aux - 10000;
diezmiles = diezmiles + 1;

}
while (aux >= 1000) {
aux = aux - 1000;
miles = miles + 1;
}
while (aux >= 100) {
aux = aux - 100;
centenas = centenas + 1;
}
while (aux >= 10) {
aux = aux - 10;
decenas = decenas + 1;
}
unidades = aux;
}
void Binbcdd(void) {
auxd = voltajelcd;
unidadesd = 0;
decenasd = 0;
centenasd = 0;
milesd = 0;
diezmilesd = 0;
while (auxd >= 10000) {
auxd = auxd - 10000;
diezmilesd = diezmilesd + 1;
}
while (auxd >= 1000) {
auxd = auxd - 1000;
milesd = milesd + 1;
}
while (auxd >= 100) {
auxd = auxd - 100;
centenasd = centenasd + 1;
}
while (auxd >= 10) {
auxd = auxd - 10;
decenasd = decenasd + 1;
}
unidadesd = auxd;
}
void Multiplex(void) {
PORTC = diezmilesd;
PORTD = 0X01;
__delay_ms(1);
PORTC = milesd;
PORTD = 0X02;
__delay_ms(1);
PORTC = centenasd;
PORTD = 0X04;
__delay_ms(1);
}

void main() {
ANSEL = 0X20;
ANSELH = 0;
TRISC = 0X80;
TRISE = 0X01;
TRISB = 0;
TRISD = 0X38;
PORTE = 0;
PORTB = 0;
PORTD = 0;
PORTC = 0;
TXSTA = 0X24;
RCSTA = 0X80;
SPBRG = 25;
ADCON0 = 0X95;
ADCON1 = 0X80;
lcd_init();
lcd_goto(0X80); // selecciono primera lnea
lcd_puts("OSCAR E IVAN XSI");
lcd_goto(0XC0); // Selecciono segunda lnea
lcd_puts("VOLTAJE:
");
while (1) {
GO = 1;
while(GO == 1)
continue;
digital = (ADRESL + (ADRESH * 256));
voltajelcd = digital * 49;
Binbcd();
lcd_goto(0XCA);
lcd_putch(diezmiles + 48);
lcd_goto(0XCB);
lcd_putch(44);
lcd_goto(0XCC);
lcd_putch(miles + 48);
lcd_goto(0XCD);
lcd_putch(centenas + 48);
lcd_goto(0XCF);
lcd_putch('V');
voltaje = digital * 0.00488;
printf("El voltaje es: %f\n\r", voltaje);
Binbcdd();
for (y = 0; y <= 170; y++) {
Multiplex();
}
//__delay_ms(1000);
}
}

void putch(unsigned char Byte) {


TXREG = Byte;
while (TRMT == 0)
continue;
}
void lcd_init(void) {
BUS_DE_DATOS = 2; //
set_lcd();
BUS_DE_DATOS = 56; //Comunicacin con 8Bits, Utilizar las dos filas, Tamao 5x7
set_lcd();
BUS_DE_DATOS = 12; //
set_lcd();
BUS_DE_DATOS = 6;
set_lcd();
BUS_DE_DATOS = 1; //Borrar contenido y devuelve el cursor a la posicin 0
set_lcd();
}
void set_lcd(void) {
LCD_RS = 0; //Modo control de la LCD
LCD_EN = 1; //Habilitar la LCD
__delay_ms(2);
LCD_EN = 0;
}
void lcd_goto(unsigned char pos) {
LCD_RS = 0; //Modo control de la LCD
lcd_write(pos);
}
void lcd_write(unsigned char c) {
LCD_EN = 1; //Habilitar la LCD
BUS_DE_DATOS = (c);
__delay_ms(1);
LCD_EN = 0;
}
/* Imprimir una cadena de caracteres en la LCD */
void lcd_puts(const char * s) {
LCD_RS = 1; //Modo imprimir caracteres en la LCD
while (*s)
lcd_write(*s++);
}
/* Imprimir un caracter en la LCD */
void lcd_putch(char c) {
LCD_RS = 1; // Modo imprimir caracteres en la LCD
lcd_write(c);
}