Autor Tema: pic16f628+lcd  (Leído 2183 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado lord_exilio

  • PIC10
  • *
  • Mensajes: 7
pic16f628+lcd
« en: 27 de Julio de 2006, 13:36:22 »
hola este es mi primer post y publico el programa que hice para controlar un LCD, de AND (16x4), un excelente display por su precio y calidad.

Que lo disfruten, posteriormente publicare el circuito de aplicacion, tambien me gustaria portarlo en lenguaje c
Citar
   
Código: C++
  1. ;programa que maneja un display de 16 caracteres X 4 lineas
  2.         ;modelo ("fusil") AND731GST/GST-LED emplea el controlador HD44780 o equivalente
  3.         #include p16f628a.inc
  4.         org 00h
  5.         MOVLW 07H;desactiva comparadores
  6.         MOVWF CMCON
  7.  
  8.         ;---CONFIGURACION DE PUERTOS---
  9.         bsf STATUS,RP0;accendiendo al banco 1
  10.         clrf TRISB;Puerto B como salida
  11.         movlw 0f0h;configuracion de los pines menos significativos del puerto A como salida
  12.         movwf TRISA;
  13.         bcf STATUS,RP0;regreso al banco 0
  14.  
  15.         ;---INICIALIZACION DEL DISPLAY---
  16.         call r_18ms; tiempo necesario para inicializar el display
  17.         clrf PORTA
  18.         movlw b'00111000';FUNCTION SET
  19.         call manda_com
  20.         movlw b'0011000';FUNCTION SET
  21.         call manda_com
  22.         ;(4)
  23.         ;***FUNCTION SET CONFIGURACION DEL LCD***
  24.         ;Indicar la longitud del bus (8 bits en este caso)
  25.         ;Function Set (*DL=1 8 bits) DL se encuentra en DB4 y esta conectado con RB4
  26.         ;DB3===>RB3 N=0:1 lineas,DB2===>RB2 F=0:5x7        
  27.         movlw b'00111000'
  28.         call manda_com
  29.        
  30.         ;***DISPLAY Off***
  31.         movlw b'00001000'
  32.         call manda_com
  33.        
  34.         ;***DISPLAY CLEAR
  35.         call limpia_lcd
  36.         ;***MODO DE ENTRADA***
  37.         movlw b'00000111'
  38.         call manda_com
  39.  
  40.         ;---FIN DE INICIALIZACION
  41.        
  42.         ;***DISPLAY ON***
  43.         movlw b'00001111'
  44.         call manda_com
  45.         ;***CURSOR O DISPLAY SHIFT
  46.         movlw b'00010100'
  47.         call manda_com
  48.         ;***SET DD RAM Adress
  49.         movlw b'10000011'
  50.         call manda_com
  51.         ;***MENSAJE
  52.         call escribe
  53.         ;***SET DD RAM Adress (2)
  54.         movlw b'11000010'
  55.         call manda_com
  56.         ;***MODO DE ENTRADA*** (2)
  57.         movlw b'00000111'
  58.         call manda_com
  59.         ;***CURSOR O DISPLAY SHIFT (2)
  60.         movlw b'00010100'
  61.         call manda_com
  62.         ;MENSAJE 2
  63.         call escribe2
  64.         ;***RETURN HOME***
  65.         movlw b'00000010'
  66.         call manda_com
  67. acaba:
  68.         goto acaba
  69. ;***LIMPIAR DISPLAY***
  70. limpia_lcd:
  71.         movlw b'00000001'
  72.         call manda_com 
  73. ;***retardo de 18ms.***
  74. r_18ms:
  75.         movlw .17
  76.         movwf 40h      
  77. v1: movlw .17
  78.         movwf 41h
  79. v2: movlw .17
  80.         movwf 42h
  81. v3: decfsz 42h,1
  82.         goto v3
  83.         decfsz 41h,1
  84.         goto v2
  85.         decfsz 40h,1
  86.         goto v1
  87.         return
  88. escribe:
  89.         movlw .11
  90.         movwf 30h
  91.         clrf 20h
  92.         bsf PORTA,0
  93. letra:
  94.         movf 20h,0
  95.         call mensaje   
  96.         call manda_com
  97.         incf 20h,1
  98.         decfsz 30h,1
  99.         goto letra
  100.         bcf PORTA,0
  101.         return
  102. escribe2:
  103.         movlw .13
  104.         movwf 30h
  105.         clrf 20h
  106.         bsf PORTA,0
  107. letra2:
  108.         movf 20h,0
  109.         call mensaje2  
  110.         call manda_com
  111.         incf 20h,1
  112.         decfsz 30h,1
  113.         goto letra2
  114.         bcf PORTA,0
  115.         return
  116. manda_com:
  117.         movwf PORTB
  118.         bsf PORTA,2
  119.         call r_18ms
  120.         bcf PORTA,2
  121.         return
  122. mensaje:
  123.         addwf PCL,1
  124.         dt 'L','O','R','D',' ','K','R','A','K','E','N'
  125. mensaje2:
  126.         addwf PCL,1
  127.         dt 'T','O','D','O',' ','P','I','C'
  128.         end
« Última modificación: 27 de Julio de 2006, 17:00:38 por lord_exilio »

Deimos

  • Visitante
Re: pic16f628+lcd
« Respuesta #1 en: 27 de Julio de 2006, 14:02:01 »
Si te sirve de ayuda, Microchip ya tiene rutinas prefabricadas para controlar LCDs. Lo único que hay que hacer es pasarle a la rutina la frase que se quiere visualizar y listos. Ella misma lo pasa a ASCII, no hace falta hacer ningun tipo de conversion de caracter a su equivalente numérico.

Te puede servir de referencia

Atentamente

Deimos

http://astroelectronica.iespana.es/