Estoy tratando de desplazar un texto en la primera fila de un LCD 16x2 usando PIC16F688 (usando el compilador MikroC). En este momento quiero hacer una función que ingrese un texto y lo desplace de derecha a izquierda, como el primer carácter aparece a la derecha y cuando entra el siguiente carácter, el último se mueve una columna hacia la izquierda. ¿Es posible hacer esto como una función general (método) que calcula automáticamente el número de caracteres? Si fuera C # o algo más, sabría que es posible hacerlo con la función STRLEN. Pero ¿qué hay de hacer esto en PIC:
void leftScroll(char text[])
{
int chars = strlen(text); //get number of characters in given text
char number[] = chars; // store number of charcters
Lcd_Out(1,1, chars); //show number of characters (DEBUG)
}
Cualquier sugerencia sería agradable!
Aquí está mi programa hasta ahora. Esto desplaza el texto de derecha a izquierda. Pero quiero que mi mensaje comience desde la izquierda y carácter por carácter.
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections
char Message1[] = "Sean Walter"; //Top line message
char Message2[] = "Welcome to my LCD project!";
char i;
void main()
{
ANSEL = 0b00000100; // RA2/AN2 is analog input
ADCON0 = 0b00001000; // Analog channel select @ AN2
ADCON1 = 0x00;
CMCON0 = 0x07 ; // Disbale comparators
TRISC = 0b00000000; // PORTC All Outputs
TRISA = 0b00001100; // PORTA All Outputs, Except RA3 and RA2
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,Message1);
Lcd_Out(2,1, Message2);
do
{
delay_ms(50);
for(i=0; i<2; i++) { // Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
}
delay_ms(50);
}
while(1);
}