;***************************************************************************
;
;Escuela de Telecomunicaciones
;Fundamento de Micro
;
; Programa para el Funcionamiento del TECLADO LOS LED`S Y LA LCD
;
; Mary Christian
;***************************************************************************
;*********************************VARIABLES*********************************
FILA1 BIT P2.0
FILA2 BIT P2.1
FILA3 BIT P2.2
FILA4 BIT P2.3
COLM1 BIT P2.4
COLM2 BIT P2.5
COLM3 BIT P2.6
BITS DATA 20H
TECLA EQU 30H
CHEQUEO BIT BITS.0
E EQU P3.1
RS EQU P3.0
BUSDATO EQU P1
;******************************INICIO DEL ROGRAMA****************************
ORG 00H
INICIO:
MOV P0,#00000000H
MOV P2,#0FFH
CALL MENSAJE1
MOV P0,#11111111H
CALL MENSAJE2
LEER:
CALL TECLADO
JNB CHEQUEO,LEER
MOV A,TECLA
CJNE A,#1H,LEER2
CALL MENSAJE3
JMP LEER
LEER2:
CJNE A,#2H,LEER3
CALL MENSAJE4
JMP LEER
LEER3:
CJNE A,#3H,LEER4
CALL MENSAJE5
JMP LEER
LEER4:
CJNE A,#4H,LEER
CALL MENSAJE6
CALL LUCES
JMP LEER
;*********************** PRINCIPAL *******************************
LUCES:
CALL MENSAJE7
CALL GIRAR_L
CALL GIRO_L
CALL RETARDO1S
CALL GIRAR_R
CALL GIRO_R
;***************************************************************************
GIRAR_L:
MOV R5,#8
MOV A,#11111110B
GIRO_L:
MOV P0,A
CALL RETARDO1S
RL A
DJNZ R5,GIRO_L
RET
GIRAR_R:
MOV R5,#8
MOV A,#01111111B
GIRO_R:
MOV P0,A
CALL RETARDO1S
RR A
DJNZ R5,GIRO_R
RET
;********************* MENSAJES ****************************
MENSAJE1: ;PRUB@ 2 LCD
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ1
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE2: ;PRUB@ 1 L€D`S
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ2
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE3: ;PRUB@ 3 TKL2
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ3
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE4: ;PRUB@ 1 Y 2 B?€N
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ4
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE5: ;PRUB@ 3 €X?TOS@
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ5
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE6: ;@LUMN@: M@RY CH
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ6
CALL IMPRIME_LCD
CALL LINEA_2
RET
MENSAJE7: ;C.I:
CALL INI_LCD2
MOV BUSDATO,#80H
CALL CONTROL_LCD
MOV DPTR, #MENSAJ7
CALL IMPRIME_LCD
CALL LINEA_2
RET
;************* RUTINA PARA OBTENER EL DATO POR TECLADO *****************
TECLADO:
MOV P2,#0FFH
CLR CHEQUEO
CLR FILA1
UNO:
JB COLM1,DOS
CALL TEMPO
MOV TECLA,#1H
MOV A,#'1'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
DOS:
JB COLM2,TRES
CALL TEMPO
MOV TECLA,#2H
MOV A,#'2'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
TRES:
JB COLM3,CUATRO
CALL TEMPO
MOV TECLA,#3H
MOV A,#'3'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
CUATRO:
SETB FILA1
CLR FILA2
JB COLM1,CINCO
CALL TEMPO
MOV TECLA,#4H
MOV A,#'4'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
CINCO:
JB COLM2,SEIS
CALL TEMPO
MOV TECLA,#5H
MOV A,#'5'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
SEIS:
JB COLM3,SIETE
CALL TEMPO
MOV TECLA,#6H
MOV A,#'6'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
SIETE:
SETB FILA2
CLR FILA3
JB COLM1,OCHO
CALL TEMPO
MOV TECLA,#7H
MOV A,#'7'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
OCHO:
JB COLM2,NUEVE
CALL TEMPO
MOV TECLA,#8H
MOV A,#'8'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
NUEVE:
JB COLM3,DIEZ
CALL TEMPO
MOV TECLA,#9H
MOV A,#'9'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
DIEZ:
SETB FILA3
CLR FILA4
JB COLM1,ONCE
CALL TEMPO
MOV TECLA,#'*'
MOV A,TECLA
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
ONCE:
JB COLM2,DOCE
CALL TEMPO
MOV TECLA,#0H
MOV A,#'0'
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
DOCE:
JB COLM3,TRECE
CALL TEMPO
MOV TECLA,#'#'
MOV A,TECLA
MOV BUSDATO,A
CALL ESCRITURA_LCD
CALL DELAY
SETB CHEQUEO
MOV P2,#0FFH
RET
TRECE:
MOV P2,#0FFH
CALL DELAY
RET
;****************************************************************;
; RUTINA PARA INICIALIZAR Y CONFIGURAR LA LCD PARA DOS LINEAS ;
;****************************************************************;
INI_LCD2: MOV P1,#01H ;LIMPIAR PANTALLA
CALL CONTROL_LCD
MOV P1,#02H ;RETORNAR CURSOR
CALL CONTROL_LCD
MOV P1,#06H ;ENTRY MODE SET
CALL CONTROL_LCD
MOV P1,#0EH ;ON/OFF
CALL CONTROL_LCD
MOV P1,#38H ;2 LINEA
CALL CONTROL_LCD
CALL RATO
CALL RATO
RET
;***************************************************************;
; RUTINA PARA REGRESAR AL CURSOR A LA COLUMNA O DE LA PRIMERA ;
; FILA DE LA LCD ;
;***************************************************************;
REGRE_CURSOR: MOV P1,#02H ;RETORNAR CURSOR
CALL CONTROL_LCD
RET
;***************************************************************;
; RUTINA PARA PASAR A LA SIGUIENTE LINEA ;
;***************************************************************;
LINEA_2: MOV P1, #11000000B
CALL CONTROL_LCD
RET
;***************************************************************;
; RUTINA QUE PROPORCIONA SEÑAL DE CONTROL A LA LCD ;
;***************************************************************;
CONTROL_LCD: SETB E
CLR RS
CALL RATO
CLR E
RET
;*****************************************************************;
; RUTINA QUE PROPORCIONA LAS SEÑALES DE CONTROL A LA LCD PARA ;
; ENVIAR POSTERIORMENTE UNA PALABRA DE DATO ;
;*****************************************************************;
ESCRITURA_LCD: SETB E ;E=1
SETB RS ;RS=1
CALL RATO
CLR E ;E=0
CLR RS ;RS=0
RET
RATO: MOV R0, #04H
LONGITUD: MOV R1, #0FFH
LONGI: DJNZ R1, LONGI
DJNZ R0, LONGITUD
RET
;*******************************************************************;
; RUTINA QUE DA INTRUCCIONES A LA LCD PARA QUE LIMPIE LA PANTALLA ;
;*******************************************************************;
BARRIDO_LCD: MOV P1,#01H
CALL CONTROL_LCD
RET
;**********************************************************************;
; RUTINA ENCARGADA DE IMPRIMIR EN LA PANTALLA UNA CADENA DE CARACTERES ;
; CON DB ' ' Y COLOCADAS EN EL DPTR ;
;**********************************************************************;
IMPRIME_LCD: MOV R3,#00H
REPITA:
MOV A,#00H
MOVC A,@A+DPTR
MOV BUSDATO,A
CALL ESCRITURA_LCD
INC DPTR
INC R3
CJNE R3,#16,REPITA
CALL RETARDO1S
CALL RETARDO1S
CALL RETARDO1S
CALL RETARDO1S
CALL RETARDO1S
RET
;**************************RUTINAS DE TIEMPO*********************************
TIEMPO: MOV R0,#03 ;0.0014 SEG APROX
BA1: MOV R1,#05
BA2: MOV R2,#10
BA3: DJNZ R2,BA3
DJNZ R1,BA2
DJNZ R0,BA1
RET
TEMPO: MOV R0,#20 ;0.08 SEG APROX
TEMP: MOV R1,#20
TEM: MOV R2,#100
TE: DJNZ R2,TE
DJNZ R1,TEM
DJNZ R0,TEMP
RET
DELAY: MOV R0,#20 ;0.12 SEG APROX
BU1: MOV R1,#40
BU2: MOV R2,#70
BU3: DJNZ R2,BU3
DJNZ R1,BU2
DJNZ R0,BU1
RET
RETARDO1S: MOV R0,#36 ; 1 SEG APROX
RE3: MOV R1,#50
RE2: MOV R2,#254
RE1: DJNZ R2,RE1
DJNZ R1,RE2
DJNZ R0,RE3
RET
;************************************************************************
; TABLA DE MENSAJES
;************************************************************************
MENSAJ1: DB ' PRUB@ 2 LCD '
MENSAJ2: DB ' PRUB@ 1 L€D`S '
MENSAJ3: DB ' PRUB@ 3 TKL2 '
MENSAJ4: DB 'PRUB@ 1 Y 2 B?€N'
MENSAJ5: DB 'PRUB@ 3 €X?TOS@ '
MENSAJ6: DB '@LUMN@: M@RY CH '
MENSAJ7: DB ' '