"Teoría es cuando se sabe todo y nada funciona. Práctica es cuando todo funciona y nadie sabe porqué. En este recinto se conjugan Teoría y Práctica: nada funciona y nadie sabe porqué..."

---------------------------------------------------------------


Rutinas para inicializar un LCD con mC51

Con estas pequeñas rutinas podras enviar un dato (D_LCD) o un comando (C_LCD) a un display de cristal liquido LCD mediante los microcontroladores de la familia INTEL mC51. El puerto P0 se usa para enviar la información y los pines WR y RD para control del LCD (RS y EN respectivamente; la terminal R/W' del display debe ser conectada a 0 volts). La información debes colocarla en el acumulador. Puedes hacer uso del Sistema de Desarrollo mC51.

;***********************************
; Rutina de configuracion del DISPLAY LCD
;---------------------------------------------

INI_LCD:
mov A,#38H
acall C_LCD
mov A,#01H
acall C_LCD
mov A,#0CH
acall C_LCD
mov A,#80H
acall C_LCD
ret

;-----------------------------------------------------------
; Rutinas para enviar un comando y/o dato al DISPLAY LCD
;-----------------------------------------------------------

C_LCD:
clr WR ;envia comando
sjmp L00
D_LCD:
setb WR ;envia dato en ascii
L00:
mov P0,A
djnz R7,$
clr RD ;habilita la pantalla
djnz R7,$
setb RD ;deshabilita la pantalla
ret

Rutina para leer un Teclado Matricial con MC51

Con esta rutina podras leer un teclado matricial de 16 teclas (4 renglones y 4 columnas). En el puerto P2 del microcontrolador de la familia MC51 se conecta el teclado. El código de la tecla solicitada se regresa en el acumulador (de 00H a 0FH para teclas individuales, 10H si no se oprimio ninguna tecla y 11H si se oprimieron mas de una tecla). Puedes hacer uso del Sistema de Desarrollo mC51. La distribución de las teclas es la siguiente:




;**************************************
; ------- Rutina para detectar una tecla -------
;-----------------------------------------------------
TECLADO:
mov R6,#0EFH ;inicia las columnas (nibble alto)
mov A,R6

CHK_TEC:
mov P2,A ;envia columna
djnz R7,$
mov A,P2 ;lee el renglón
mov R5,A
anl A,#0FH
cjne A,#0FH,TEC_00 ;verifica si hay tecla
mov A,R6
rl A ;siguiente columna
mov R6,A
cjne A,#0FEH,CHK_TEC ;verifica última columna
mov A,#10H ;código de no_tecla
ret
;------------------------------------------------------------

TEC_00:
mov A,R5
cjne A,#7EH,TEC01
mov A,#0FH
ret

TEC_01:
cjne A,#7DH,TEC02
mov A,#0BH
ret

TEC02:
cjne A,#7BH,TEC03
mov A,#00H
ret

TEC03:
cjne A,#77H,TEC04
mov A,#0AH
ret

TEC04:
cjne A,#0BEH,TEC05
mov A,#0EH
ret

TEC05:
cjne A,#0BDH,TEC06
mov A,#09H
ret

TEC06:
cjne A,#0BBH,TEC07
mov A,#08H
ret

TEC07:
cjne A,#0B7H,TEC08
mov A,#07H
ret

TEC08:
cjne A,#0DEH,TEC09
mov A,#0DH
ret

TEC09:
cjne A,#0DDH,TEC0A
mov A,#06H
ret

TEC0A:
cjne A,#0DBH,TEC0B
mov A,#05H
ret

TEC0B:
cjne A,#0D7H,TEC0C
mov A,#04H
ret

TEC0C:
cjne A,#0EEH,TEC0D
mov A,#0CH
ret

TEC0D:
cjne A,#0EDH,TEC0E
mov A,#03H
ret

TEC0E:
cjne A,#0EBH,TEC0F
mov A,#02H
ret

TEC0F:
cjne A,#0E7H,TEC_ERR
mov A,#01H
ret

TEC_ERR:
mov A,#11H ;código de más de una tecla
ret