Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
char dato ;
sbit LCD_RS at Rb0_bit;
sbit LCD_EN at Rb3_bit;
sbit LCD_D7 at Rb7_bit;
sbit LCD_D6 at Rb6_bit;
sbit LCD_D5 at Rb5_bit;
sbit LCD_D4 at Rb4_bit;
sbit LCD_RS_Direction at TRISb0_bit;
sbit LCD_EN_Direction at TRISb3_bit;
sbit LCD_D7_Direction at TRISb7_bit;
sbit LCD_D6_Direction at TRISb6_bit;
sbit LCD_D5_Direction at TRISb5_bit;
sbit LCD_D4_Direction at TRISb4_bit;
void main() {
Delay_ms(100);
cmcon = 7 ;
trisa = 0 ;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
UART1_Init(2404);
Delay_ms(100);
while (1) {
if(UART1_Data_Ready()== 1) {
dato = UART1_Read();
Lcd_out_cp(dato);
Lcd_Cmd(_LCD_CLEAR);
dato = 0 ;
delay_ms (1000) ;
}
}
estoy haciendo un código en mikroC para enviar datos por usb pero me sale un error en esta linea de codigo
//Función de rutina USB
//dentro de las interrupciones.
void HID_Inte( void )
{
asm CALL _Hid_InterruptProc //esta parte sale marcada de rojo
asm nop
}
y en el error me sale
undeclarer identifier '_Hid_interruptProc' in expresion
y no doy con el problema
gemte aki les dejo un tutorial acerca de como crear un nuevo projecto en mikroc espero q les sea util saludos
int valor;
char prueba;
valor=EEPROM_Read(0x30);
IntToStr(valor,prueba);
Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);//este da el problema, probe colocando un texto y aparece justo
//en la cuarta linea del LCD tambien probe char prueba[5], *prueba[5] pero imprimen
//caracteres raros
char valor;
char prueba[4];
valor=EEPROM_Read(0x30);
ByteToStr(valor, prueba);
Lcd_Out(2, 1, text1);
Lcd_Out(2, 4, prueba);
void Lcd_Out2(char fila, char col, const char *dat)
{
while(*dat)
{
Lcd_Chr(fila,col++, *dat++);
}
}
Muy buenas, esta librería tenía sus cositas, yo las dejé de usar por el tema este, si usas un int te reserva 7 espacios que va rellenado por la derecha menos el ultimo que lo pone como 0x00 que intdica que es un string, en el caso de usar un byte o char te reserva 4, pero ya no te sirve con valores mayores a 255
Puedes provar con la conversión byte si tus valores no superan este:
Código:char valor; char prueba[4]; valor=EEPROM_Read(0x30); ByteToStr(valor, prueba); Lcd_Out(2, 1, text1); Lcd_Out(2, 4, prueba);
Si este no te sirve (pinsa que el 4º digito es nulo y borrará lo que tengas) solo te quedan 2 alternativas, usar estas librerias y luego tratar la matriz (creando una nueva mas corta y solo poniento los bytes que necesites) o crearte tu propia librería.
esto es lo que hay.
Ah y recuerda (no se si lo puse en este hilo y no se si en nuevas versiones de mikroc ya está arreglado que me parece que no), cuando usas la librería Lcd_Out(x,x,x); el texto que pones consume memoria ram, y si vas a crear un menú con mucho texto constante (tipo: "Menu:", "Configuración", .....) la ram te va a volar y tenemos poca. Pues tienes que usar esto:
Con esto usas la rom en lugar de la ram.Lo pones ahi arriba en tu codigo y se usa de la misma manera:Código:void Lcd_Out2(char fila, char col, const char *dat) { while(*dat) { Lcd_Chr(fila,col++, *dat++); } }
Lcd_Out2(2, 1, "Hola mundo");
Pero solo para texto constante, no variables.
Un saludo
//Definición de pines del LCD
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
//Definición de los TRIS del LCD
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End de la Configuracion
// *************************************************
char Text1[] = "Bienvenido";
char Text2[] = "Bin";
char Text3[] = "Dec";
char Text4[] = "Hex";
char Text5[] = "Punt.F";
char Text6[16];
char Text7[16];
char Text8[16];
char Text9[16];
//Impresión de el Numero 11 en Binario, Decimal, Hexadecimal y Punto Flotante
unsigned int v1 = 1011;
unsigned int v2 = 11;
unsigned int v3, v4;
unsigned float v5 = 11.00;
void main()
{
//Inicio del LCD.
Lcd_Init();
//Borrado del cursor.
Lcd_Cmd(_LCD_CURSOR_OFF);
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR);
//Impresión de Text1 durante 1 segundo.
Lcd_Out(1, 4, Text1);
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
// Impresión de Textos "Text2, Text3, Text4, Text5"
Lcd_Out(1,0, Text2);
Lcd_Out(1,9, Text3);
Lcd_Out(2,0, Text4);
Lcd_Out(2, 6, Text5);
// Conversión de decimal a Binario
IntToStr(v1, Text6);
Lcd_Out(1,4, Text6);
// Conversion de entero a cadena de caracteres para mostrar decimal = 11
IntToStr(v2, Text7);
Lcd_Out(1, 13, Text7);
// Conversión de decimal a hexadecimal
v3 = 11;
v4 = Dec2Bcd16(v3);
IntToStr(v4,Text8);
Lcd_Out(2,4, Text8);
// Conversion de Decimal a Punto Flotante
FloatToStr(v5, Text9);
Lcd_Out(2,10, Text9);
}
Hola a todos.
A ver si me pueden ayudar con este código en mikroc, apenas me estoy iniciando en lenguaje C, por lo tanto no consigo dar con la solución.
En si; lo que quiero hacer es mostrar por la LCD el Numero 11 en "Binario, Decimal, Hexadecimal y Punto Flotante"
N = 11
Binario = 1011
Decimal = 11
Hexadecimal = B
Punto Flotante = 11.00
//Definición de pines del LCD
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
//Definición de los TRIS del LCD
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End de la Configuracion
// *************************************************
//Impresión de el Numero 11 en Binario, Decimal, Hexadecimal y Punto Flotante
void main()
{
char bin_buffer[5];
char Text1[3];
char Text2[5];
char Text3[9];
unsigned int i,valor;
unsigned int v1 = 11;
float v2 = 11.00;
//Inicio del LCD.
Lcd_Init();
//Borrado del cursor.
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
//Impresión de Texto durante 1 segundo.
Lcd_Out(1, 4, "Bienvenido");
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
// Conversión de Decimal a Binario (4 Bits)
valor = v1;
for (i = 0; i < 4; i++)
{
if (valor & 0x08) // Se comprueba el MSB (Bit mas significante "Bit3")
bin_buffer[i] = '1'; // Si este es uno, colocar un 1 en el buffer
else
bin_buffer[i] = '0'; // Si este es cero, colocar un 0 en el buffer
valor <<= 1; // Rotar los Bits a la izquierda 1 Bit
}
lcd_out(1,1,"Bin:");
Lcd_Out(1,6, bin_buffer);
// Conversion de entero a cadena de caracteres para mostrar decimal = 11
lcd_out(2,1,"Dec:");
ByteToStr(v1, Text1);
Lcd_Out(2,5, Text1);
delay_ms(2000);
// Conversión de decimal a hexadecimal
Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,"Hex:");
IntToHex(v1,Text2);
Lcd_Out(1,6, Text2);
// Conversion de Decimal a Punto Flotante
lcd_out(2,1,"Flt:");
FloatToStr(v2, Text3);
Lcd_Out(2,6, Text3);
}