You are on page 1of 4

/*

Autores:
Fecha:
Descripcin:

En este programa se muestra el funcionamiento de la pantalla LCD


donde se muestra dos mensajes un movil y uno fijo ademas podemos
mostrar el resultado de un valor de numero decimal modificando su
numeros decimales.
**********************************************************/
/****Definicin de constantes y alias***************/
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_RS at RD2_bit;
// Pin direction
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_RS_Direction at TRISD2_bit;
/***Variables globales****/
short Vector_Datos[20];
unsigned short i, j2, k, j;
short ent=0;
short dec=0;
/*const char character[] ={1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,0};*/
float numero=1;
float num;
long aux1=1,aux2=1,finalizar=0,coc,resultado;
/****Prototipo de funciones********/
void mConfigPeripherals(void);
void mPresentacionLcd(void);
void mFloatToString(float, unsigned char);
void mForma2(float, unsigned char);
void mVisualizaResultadoLcd(void);
void mVisualizaResultadoLcd2(void);
/****Definicin de funciones*****/
void mConfigPeripherals(void)
{
Lcd_Init();
}
/*void CustomChar(char pos_row, char pos_char)//varios caracteres filas y posici
on
{
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++)
Lcd_Chr_CP(character[i]);
} */
void Move_Delay() {
// Function used for text moving
Delay_ms(300);
// You can change the moving speed here
}
void mPresentacionLcd(void)
{
char txt1[] = "Sistemas";
char txt2[] = "Microprocesados";

char txt3[] = "Integrantes";


char txt4[] = "------------------";
char i1;// Loop variable
Lcd_Cmd(_LCD_CLEAR);
// Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);
// Cursor off
Lcd_Out(1,1,txt3);
// Write text in first row
Lcd_Out(2,1,txt4);

// Write text in second row

Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);

// Clear display

(1,POSICION)
(ABAJO,",tx

Lcd_Out(1,1,txt1);
// Write text in first row
Lcd_Out(2,2,txt2);
// Write text in second row
Delay_ms(2000);
/**************TEXTO MOVIL*************/
for(i1=0; i1<3; i1++) {
// Move text to the right 3 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
for(i1=0; i1<5; i1++) {
// Move text to the right 5 times
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}
}
void mFloatToString(float num, unsigned char num_dec) {
if(num<0)
{
num*=-1;
Vector_datos[0]=-3;
}
else
Vector_datos[0]=-16;
for(i=0;num>1;i++)
{
num=num/10;
ent++;
}
for(i=1;i<ent+num_dec+1;i++)
{
num*=10;
Vector_datos[i]=num;
num-=Vector_datos[i];
}
}
void mVisualizaResultadoLcd(void)
{ // Write text in second row
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"F1="); //Funcion de mikroC
for(i=0;i<ent+1;i++)
{
Lcd_Chr_Cp(Vector_datos[i]+48);
}
Lcd_Out_Cp(".");
for(i=ent+1;i<ent+dec+1;i++)
{
Lcd_Chr_Cp(Vector_datos[i]+48);
}
}

/******forma 2**********/
void mForma2(float num, unsigned char deci) {
Lcd_Out(2,1,"F2=");
if(num<0)
{
num=num*-1;
}
for(j=0;j<(dec);j++) //aux1
{
aux1=aux1*10;
}
numero=(num*aux1);
while(finalizar!=1)
{
coc=(long)(numero/(aux1));
if(coc>0)
{
i++;
}
else
{
finalizar=1;
}
aux1=aux1*10;
}
ent=i;
//aux2 para eliminar decimales
for(j2=0;j2<dec+(i-1);j2++)
{
aux2= aux2*10;
}
for(j2 =(dec+(i));j2>0;j2-- )
{
coc=(long )(numero/(aux2));
resultado=(long )(numero-((aux2)*coc));
aux2=(aux2/10);
Vector_datos[k]=(coc+48);
numero=resultado;
k++;
}
}
void mVisualizaResultadoLcd2(void)
{
for(j2=0; j2<=dec+ent; j2++)
{
if(num<0)
{
Lcd_chr_cp('-');
}
if(ent==0)
{
Lcd_chr_cp(46);
}
if(j2==ent)
{
Lcd_chr_cp(46);
}
Lcd_Chr_Cp(Vector_datos[j2]);
}
}

/*****Definicin del programa principal*****/


void main()
{
float numero= 356.3456789 ;
unsigned char decimales=4;
char j;
dec=decimales;
mConfigPeripherals();
mPresentacionLcd();
mFloatToString(numero, decimales);
mVisualizaResultadoLcd();
mForma2(numero, decimales);
while(1)
continue;
}

You might also like