Texto animado en lcd de pic16f84

#1
Trabajo en este programa hace algún tiempo pero ya no se que hacer para lograr lo que el texto corra tal como se ve en el gif, quiero que corra de izquierda a derecha con continuidad.:rolleyes:

universidad_04640.gif

Código:
;******************************************************************
; Proyecto:            Visualización de texto en un display LCD
;                      empleando una tabla
; Archivo de proyecto: CMC1007.mclsprj
; Archivo fuente:      CMC1007.asm
; Editor:              hpolster
; Fecha:               05.10.05
; Software:            GPASM
; Hardware:            Unidad ISP PIC
;                      Unidad LCD I2C con PORTB
;                      SCL = RB3
;                      SDA = RB4
;
;******************************************************************

;------------------------------------------------------------------
; Configuración del PIC
; -----------------------------------------------------------------
   LIST  p=16f84

; Palabra de configuración para el microcontrolador
; code protection off/ power up timer off/ wdt off /XT oscillator
   __config   0x3ff9   

; -----------------------------------------------------------------
; Variables en RAM a partir de la dirección 0x10
; -----------------------------------------------------------------
cblock 0x10
   lcdcount
      lcdcount1
      lcdcount2
   offset
endc

   org    0
start:
   call   IIC_INIT      ; inicializar interfaz I2C
   call   LCD_INIT      ; inicializar LCD
   call   Display       ; visualizar posiciones BCD en display LCD
   goto   start
main:
   goto   main          ; bucle infinito

; -----------------------------------------------------------------
; Subrutinas
; -----------------------------------------------------------------
Display:
   movlw   D'12'         ; columna 0 de LCD hacia W
   movwf   lcdcount2      ; W hacia columna

   movlw   D'12'         ; columna 0 de LCD hacia W
   movwf   lcdcount1      ; W hacia columna

   movlw   D'0'         ; columna 0 de LCD hacia W
   movwf   columna      ; W hacia columna

xxx:
   movlw   0x20         ; dirección de LCD línea 2 hacia W
   movwf   línea        ; W hacia línea
   call    LCD_GOTO_XY  ; posicionar cursor LCD

   movf    lcdcount2,0
   movwf   lcdcount2        ; valor de lcdcount hacia W
   movwf   lcdcount     ; W hacia lcdcount (12 caracteres)
   
   movlw   D'0'          ; posición de tabla 0 hacia W
   movwf   offset        ; W hacia offset para tabla "text1"

loop1:
   movf   offset,w       ; posición de tabla hacia W
   call   text1          ; buscar carácter
   call   LCD_SEND_ASCII ; visualizar en LCD
   incf   offset,f       ; offset para siguiente carácter en "text1"
 
   decfsz lcdcount,f     ; lcdcount - 1 -> =0?
   goto   loop1          ; no -> saltar a loop1
   decfsz lcdcount2,f     ; lcdcount - 1 -> =0?

   incfsz columna,f  ;izqu a der
   decfsz lcdcount1,f
   goto   xxx      
   call wait_480ms

   return
; -----------------------------------------------------------------
; Cadenas de texto
; -----------------------------------------------------------------
text1:
      addwf   PCL,f
      retlw   ' '
      retlw   'U'
      retlw   'N'
      retlw   'I'
      retlw   'V'
      retlw   'E'
      retlw   'R'
      retlw   'S'
      retlw   'I'
      retlw   'D'
      retlw   'A'
      retlw   'D'
    return
      
; -----------------------------------------------------------------
; Archivos de inclusión
; -----------------------------------------------------------------
include "p16f84.inc"     ; definiciones de controlador de destino
include "time.inc"       ; subrutinas de retardo de tiempo
                         ; por software
include "iic.inc"        ; subrutinas IIC
include "lcd.inc"        ; subrutinas LCD

; -----------------------------------------------------------------
   end
 
Última edición por un moderador:
#2
te recomiendo que uses las librerías del libro "pic16f84A desarrollo de proyectos" con estas es muy facil.
y una pregunta porque usas librerias i2c?
 
#3
En assembler no te puedo ayudar pero, en CCS puedes hacerlo así.
Haber si te sirve :D!

PHP:
/****************************************************************
*   Proyecto: Manejo de LCD                                     *
*   Desarrollado: Luis Alberto Zamora Lara                      *
*              Diciembre 2013                                   *
*                                                               *
*****************************************************************/   


#include <16F84A.h>
#Fuses XT,NOWDT,NOPROTECT
//#device ADC=10
#Use Delay(Clock=4 000 000)
#include <lcd.c>
#byte puerto_b = 06

int var,i,k;
char a[14]=0x20, 0x55,0x4E,0x49,0x56,0x45, 0x52, 0x53, 0x49, 0x44, 0x41, 0x44, 0x00, 0x00;


void main(void){
   set_tris_b(0b00001000);
   set_tris_a(0b00110111);
   lcd_init();
   delay_ms(10);
   var=3;
   k=0;
   i=1;

   while(true){ 
   lcd_putc("\f");
   delay_ms(200);
   for(k=16;k!=-16;k--) //al lado contrario   for(k=-16;k!=32;k++)
   {
   lcd_gotoxy(k,1);
   delay_ms(70);
   printf(lcd_putc " UNIVERSIDAD ");
   }
   }
 }
 
Última edición:

Temas similares


Arriba