Iniciado por
Cuidadoso
Falta un rato para la versión robot jaja
Estuve trabajando un poco con el display lcd, resultados y código a disposición
Código:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int read_LCD_buttons() // para leer los botones
{ adc_key_in = analogRead(0); // Leemos A0
// Verificar valores de btns
// Comparación con valores
if (adc_key_in > 1023) return btnNONE; // Sin pulsar btn
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 450) return btnLEFT;
if (adc_key_in < 650) return btnSELECT;
return btnNONE; // En mi caso limpiará la pantalla " "
}
void setup()
{ lcd.begin(16, 2); // Inicializa el LCD
lcd.setCursor(0,0);
lcd.print("Cuidadoso Bander");
}
void loop() { //lcd.setCursor(9,1); // Cursor a col 9, fila 2
//lcd.print(millis()/1000); // Imprime segundos
lcd.setCursor(14, 1); // Cursor a col 14, fila 2
lcd.print(lcd_key); // Imprime el valor leido en la puerta A0 lo cambie lcd.print(lcd_key)
lcd.setCursor(0,1); // Cursor col 1, fila 2
lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT)
lcd.print("ESTE ");
else if ( lcd_key == btnLEFT 14)
lcd.print("OESTE ");
else if ( lcd_key == btnUP)
lcd.print("NORTE ");
else if ( lcd_key == btnDOWN)
lcd.print("SUR ");
else if ( lcd_key == btnSELECT)
lcd.print("SELECT");
else if ( lcd_key == btnNONE)
lcd.print(" ");
}
Espero sus aportes!
Esto lo hice en 5to con un Q2 de Freescale:
^Circuito del lcd con el 555.
Este fue el codigo:
Código:
PROGRAMA: Por un display LCD se visualiza un texto enviado por el PORTB
; este mensaje se cambia por medio de un pulsador.
;
; Estructura de Control: "Bucle que se repite infinitamente"
; Programadores: Federico Juan Martin
; Blanco Matias
; Año y div: 5to ET 3ra
; ET N°1 OTTO KRAUSE
;****************************************************************************
;****************************************************************************
; Incluir archivo con asociación entre etiqueta / nombre y las direcciones
; de los registros asociados al microcontrolador
;----------------------------------------------------------------------------
$Include 'C:\pemicro\ics08qtqyz\qtqy_registers.inc' ;se indica la ruta o PATH
;donde esta el archivo
;
;ubicar el archivo .inc
;en la carpeta del .asm
;-----------------------------------------------------------------------------
; Definición de orígenes de las memorias a utilizar
;-----------------------------------------------------------------------------
RAMStart EQU $0080
FLASHROMStart EQU $F800
VECTORStart EQU $FFFE
;---------------------------------------------------------------------------
; Especificación del inicio de la RAM
;---------------------------------------------------------------------------
ORG RAMStart
;-----------------------------------------------------------------------------
; Reservar espacios de memoria ram y asignar etiquetas o números
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; Especificación del inicio del programa, que se almacena en la ROM ;a partir de la dirección indicada
;-----------------------------------------------------------------------------
ORG FLASHROMStart ;
;-----------------------------------------------------------------------------
; Subrutina que genera un retardo (Enable)
;-----------------------------------------------------------------------------
retardo: lda #$FF
sta $0080
lazo2: lda #$40
sta $0081
lazo1: dec $0081
bne lazo1
dec $0080
bne lazo2
rts
;-----------------------------------------------------------------------------
; Configuración de registros, como el de OSC, EL CONFIG1 - COP -
;-----------------------------------------------------------------------------
Init: mov #$01,config1 ;
;-----------------------------------------------------------------------------
; Configuración de registros de los puertos y los módulos
;-----------------------------------------------------------------------------
mov #$FF,DDRB ;Todo portb es salida
mov #$30,DDRA ;Pines de Rs y E son salida
;-----------------------------------------------------------------------------
; Programa Principal
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; Inicialización del display
;-----------------------------------------------------------------------------
main: jsr retardo
lda #$10 ;Enable nivel alto,Rs bajo
sta PORTA ;Envía al puerto A el dato
lda #$38 ;Primer dato para la inicialización
sta PORTB ;Envía el dato anterior al puerto B
clr PORTA ;Pone en 0 al porta para bajar el enable
jsr retardo ;Va a la subrutina de retardo
lda #$10
sta PORTA
lda #$06 ;Segundo dato para la inicialización
sta PORTB
clr PORTA
jsr retardo
lda #$10
sta PORTA
lda #$0C
sta PORTB
clr PORTA ;Tercer dato para la inicialización
jsr retardo
;-----------------------------------------------------------------------------
; Mensaje 1
;-----------------------------------------------------------------------------
mensaje1: lda #$10 ;borrar
sta PORTA
lda #$01
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto para cargar datos
sta PORTA
lda #'G' ;Desde aquí se comienza a enviar los datos
sta PORTB ;para visualizar el mensaje 1
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'c'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'i'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$10 ;Enable nivel alto,Rs nivel bajo
sta PORTA
lda #$C0 ;Código para bajar a la 2da línea
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto
sta PORTA
lda #'M' ;Se envían los datos para el
sta PORTB ;texto que será visualizado
lda #$20 ;en la 2da línea del display
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'e'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'l'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'o'
sta PORTB
lda #$20
sta PORTA
jsr retardo
bucle1: brset 3,PORTA,mensaje2 ;bucle que se repite a menos
jmp bucle1 ;que se accione el pulsador,
;de ser así pasa al 2do
;mensaje
;-----------------------------------------------------------------------------
; Mensaje 2
;-----------------------------------------------------------------------------
mensaje2: jsr retardo
lda #$10 ;borrar
sta PORTA
lda #$01
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto se
sta PORTA ;cargan los datos
lda #' ' ;Desde aquí se comienza a
sta PORTB ;enviar los datos del texto
lda #$20 ;que va ser visualizado en
sta PORTA ;el display
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'O'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'t'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'t'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'o'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'K'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'u'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'s'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'e'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$10 ;E en nivel alto, Rs bajo para bajar a la
sta PORTA ;2da línea
lda #$C0 ;Código para bajar a la 2da línea
sta PORTB
clr PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'5'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'E'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'T'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'3'
sta PORTB
lda #$20
sta PORTA
jsr retardo
bucle: brclr 3,PORTA,asd ;Condición de salto
jmp mensaje1 ;al mensaje 1 o sino
asd: jsr retardo ;continua en el bucle
jmp bucle ;infinitamente hasta que
;se pulse el botón
;-----------------------------------------------------------------------------
; Indicación del origen de los vectores de int.
;-----------------------------------------------------------------------------
; ORG VECTORStart
;-----------------------------------------------------------------------------
; Asignación de saltos para cada vector
;-----------------------------------------------------------------------------; dw init
;-----------------------------------------------------------------------------
Despues si puedo en casa tengo la placa, pero es muy simple :P