Microcontroladores - control de display mediante 8051

 
Vista:

control de display mediante 8051

Publicado por Toni (1 intervención) el 03/05/2006 10:37:04
Hola a tod@s!

Estoy un poco perdido en esto de programar microcontroladores i tengo de hacer un pequeño trabajo sobre el control de un display, el trabajo es el siguiente "visualisació de mensajes numèricos enviados al puerto serie a un display de siete segmentos de 8digitos y dos linias para poder escrivir en el i el display conectado al puerto P1 de micro8051 el programa tiene de ser en C".
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:control de display mediante 8051

Publicado por rigoberto (1 intervención) el 08/07/2009 15:32:21
Programa para el Funcionamiento del TECLADO LOS LED`S Y LA LCD
;
;
;***************************************************************************
;*********************************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 ' '
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar