Programa lcd en avr
Objetivo
Familiarizar al estudiante con el manejo de los displays de cristal líquido (LCD).
Trabajo Preparatorio
2. Crear las subrutinas para el manejo del LCD (Asembler)
Estas subrutinas se utilizaron en el programa en Assembler.
3. Elaborar un programa (en Asembler y otro en BASIC) que cumpla las siguientes condiciones: Pantalla de presentación: (Presentar un despliegue de: El nombre de la Institución y la materia y luego de 5 segundos los nombres de los integrantes del grupo)
Pantalla de trabajo:
LINEA1 del LCD:
Se deberá escribir: MENSAJE (Línea 1)
Donde MENSAJE :
"DESCENDENTE" si se presionó P1
"ASCENDENTE" si se presionó P2
"DECREMENTA" si se presiono P3""INCREMENTA si se presionó P4
LINEA2 del LCD:
Se escribirá: DATO = yyy (Línea 2)
PROGRAMACION EN ASSEMBLER:
;PRACTICA Nº 3
;MANEJO DE DISPLAY DE CRISTAL LIQUIDO
.include "m164Pdef.inc"
.def temp0=r16
.def temp1=r17
.def temp2=r18
.def temp3=r19
.def temp4=r20
.def cont=r21
.def unidad=r22
.def decena=r23
.def centena=r24
.cseg
.org 0x00rjmp inicio
.org 0x02
Rjmp EXT_INT0
reti
inicio:
ldi temp0,high(ramend)
out sph,temp0
ldi temp0,low(ramend)
out spl,temp0
ser temp0;salidas
out ddra,temp0
out ddrb,temp0
clr temp0;entradas
out ddrc,temp0
out ddrd,temp0
ldi temp0,0x0A;interrupciones
out mcucr,temp0
LDI TEMP0,0B00000001
OUT EIMSK,TEMP0
ldi temp0,0b00000010sts eicra,temp0
sei
lcd:
rcall ini_lcd
ldi temp0,0x80
rcall dir_1
ldi temp0,0xC0 rcall dir_2
ldi temp0,0x80
rcall ver_n1;NOMBRE1
ldi temp1,1
rcall retar_500m
ldi temp0,0xC0
rcall ver_n2;NOMBRE2
ldi temp1,4
rcall retar_500m
clr cont
clr temp4
loop: ldi temp1,6
rcall retar_500m
ldi temp0,0x80
rcall ver_op
lditemp0,0xC0
rcall ver_p12
ldi temp1,6
rcall retar_500m
ldi temp0,0xC0
rcall ver_p34
cpi temp4,0
brne accion
rjmp loop
end: rjmp end
accion:;PARA SABER CUAL SE PULSO
cpi temp4,1
breq descend
cpi temp4,2
breq ascend
cpi temp4,4
breq decrement
cpi temp4,8
breq increment
rjmp accion
descend:
ldi temp0,0xC0
rcall ver_nadarcall dECREMENTAR
rjmp accion
ascend:
ldi temp0,0xC0
rcall ver_nada
rcall incrementar
rjmp accion
decrement:
ldi temp0,0xC0
rcall ver_nada
rcall descender
rjmp accion
increment:
ldi temp0,0xC0
rcall ver_nada
rcall ASCENDER
rjmp accion
incrementar:;ASCENDENTE
ldi temp0,0x80
rcall ver_asc
ldi temp0,0xC0
rcall ver_dat
cpi cont,255
breqv255 inc cont
v255: rcall poner
ldi temp1,1
rcall retar_500m
f_inc: ret
decrementar:
ldi temp0,0x80
rcall ver_des
ldi temp0,0xC0
rcall ver_dat
cpi cont,0
breq v0
dec cont
v0: rcall poner
ldi temp1,1
rcall retar_500m
f_dec: ret
descender:
ldi temp0,0x80
rcall ver_dec
ldi temp0,0xC0
rcall ver_dat
rcallponer
ret
ascender: ldi temp0,0x80
rcall ver_inc
ldi temp0,0xC0
rcall ver_dat
rcall poner
ret
poner: rcall bin_bcd
ldi temp0,0xCB
ldi temp1,3;54us
rcall secuencia
mov temp0,centena
rcall ver_num
ldi temp0,0xCC
ldi temp1,3 ;54us
rcall secuencia
mov temp0,decena
rcall ver_num
ldi temp0,0xCD
ldi temp1,3 ;54us
rcall secuenciamov temp0,unidad
rcall ver_num
ret
dir_1:
ldi temp1,3;54us
rcall secuencia
ldi zh,high(texto1*2)
ldi zl,low(texto1*2)
ldi temp1,0
rcall dat_carg
ret
dir_2:
ldi temp1,3 ;54us
rcall secuencia
ldi zh,high(texto2*2)
ldi zl,low(texto2*2)
ldi temp1,0
rcall dat_carg
ret
ver_n1:
ldi temp1,3 ;54us
rcall secuencia
ldi zh,high(nombre1*2)
ldi...
Regístrate para leer el documento completo.