Prueba todas las maneras de configurar una pantalla LCD alfanumérica en diferentes puertos

Dependencies:   FRDM_TSI TextLCD mbed

Committer:
Antulius
Date:
Fri May 17 20:52:57 2019 +0000
Revision:
9:26618de199fc
Parent:
8:39219ab1efd9
FRDM-KL46Z_LCD_Test  Prueba todas las configuraciones de puertos para TextLCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 6:333a2763ad29 1 /* ###########################################################################
Antulius 6:333a2763ad29 2 ** Archivo : main.c
Antulius 8:39219ab1efd9 3 ** Proyecto : FRDM-KL46Z_LCD_Test
Antulius 6:333a2763ad29 4 ** Procesador : MKL46Z256VLL4
Antulius 6:333a2763ad29 5 ** Herramienta : Mbed
Antulius 6:333a2763ad29 6 ** Version : Driver 01.01
Antulius 6:333a2763ad29 7 ** Compilador : GNU C Compiler
Antulius 6:333a2763ad29 8 ** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0
Antulius 6:333a2763ad29 9 ** Descripción :
Antulius 9:26618de199fc 10 ** Este proyecto prueba todas las configuraciones para operar un
Antulius 9:26618de199fc 11 ** display LCD alfanumérico en modo de 4 bits
Antulius 9:26618de199fc 12 ** - Utilizando los GPIO's
Antulius 9:26618de199fc 13 ** - Utilizando el SPI y el C.I. SN74HC595 o CD4094
Antulius 9:26618de199fc 14 ** - Utilizando el I2C y el Modulo PCF8574 y PCF8574A
Antulius 9:26618de199fc 15 ** soporta las siguintes pantallas LCD alfanuméricas:
Antulius 9:26618de199fc 16 ** 1x8, 1x16, 2x16, 2x20, 4x16, 4x20
Antulius 9:26618de199fc 17 ** Componentes : GPIO, Timer, SPI, I2C, TextLCD.
Antulius 9:26618de199fc 18 ** Configuraciones : TextLCD, TextLCD_SPI, TextLCD_I2C
Antulius 6:333a2763ad29 19 ** Autores :
Antulius 6:333a2763ad29 20 ** ATEAM Development Group:
Antulius 6:333a2763ad29 21 ** - Antulio Morgado Valle
Antulius 6:333a2763ad29 22 **
Antulius 6:333a2763ad29 23 ** Versión : Beta
Antulius 6:333a2763ad29 24 ** Revisión : A
Antulius 6:333a2763ad29 25 ** Release : 0
Antulius 8:39219ab1efd9 26 ** Date : 20/10/2019
Antulius 6:333a2763ad29 27 ** Bugs & Fixes :
Antulius 6:333a2763ad29 28 ** Added support for Led_RGB
Antulius 6:333a2763ad29 29 ** 22/09/2018
Antulius 6:333a2763ad29 30 ** Added LCD Menu, Beta version (with bugs)
Antulius 6:333a2763ad29 31 **
Antulius 9:26618de199fc 32 ** El permiso se otorga por este medio, sin cargo, a cualquier persona que
Antulius 9:26618de199fc 33 ** obtenga una copia de este software y los archivos de documentación asociados
Antulius 9:26618de199fc 34 ** (el "Software"), para operar en el Software sin restricciones, incluidos,
Antulius 9:26618de199fc 35 ** entre otros, los derechos de uso, copia, modificación, fusión, publicación,
Antulius 9:26618de199fc 36 ** distribución, sublicencia y/o venta de copias de el Software, y para permitir
Antulius 9:26618de199fc 37 ** que las personas a quienes se suministra el Software lo hagan, sujeto a las
Antulius 9:26618de199fc 38 ** siguientes condiciones:
Antulius 9:26618de199fc 39 **
Antulius 9:26618de199fc 40 ** El aviso de copyright anterior y este aviso de permiso se incluirán en todas
Antulius 9:26618de199fc 41 ** las copias o partes sustanciales del Software.
Antulius 9:26618de199fc 42 **
Antulius 9:26618de199fc 43 ** EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESO
Antulius 9:26618de199fc 44 ** O IMPLÍCITO, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD,
Antulius 9:26618de199fc 45 ** APTITUD PARA UN PROPÓSITO PARTICULAR Y NO INCUMPLIMIENTO. EN NINGÚN CASO,
Antulius 9:26618de199fc 46 ** LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES POR CUALQUIER
Antulius 9:26618de199fc 47 ** RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA QUE SEA RESPONSABLE DE UN
Antulius 9:26618de199fc 48 ** CONTRATO, CORTE U OTRA MANERA, DERIVADOS DE, FUERA O EN CONEXIÓN CON
Antulius 9:26618de199fc 49 ** EL SOFTWARE O EL USO O OTRAS REPARACIONES EN EL SOFTWARE.
Antulius 6:333a2763ad29 50 ** ###########################################################################*/
Antulius 6:333a2763ad29 51 /*
Antulius 6:333a2763ad29 52 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 6:333a2763ad29 53 : Includes
Antulius 6:333a2763ad29 54 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 6:333a2763ad29 55 */
emilmont 0:0f00f07ebde0 56 #include "mbed.h"
Antulius 9:26618de199fc 57 #include "TextLCD.h"
Antulius 8:39219ab1efd9 58 #include "I2C.h"
Antulius 8:39219ab1efd9 59 #include "SPI.h"
Antulius 8:39219ab1efd9 60 #include "Serial.h"
Antulius 8:39219ab1efd9 61 #include "stdio.h"
Antulius 6:333a2763ad29 62 /*
Antulius 6:333a2763ad29 63 :...............................................................................
Antulius 6:333a2763ad29 64 : Definiciones
Antulius 6:333a2763ad29 65 :...............................................................................
Antulius 6:333a2763ad29 66 */
Antulius 8:39219ab1efd9 67 #define Ticker_Rate 1000 // Periodo de interrupción (us)
Antulius 8:39219ab1efd9 68 #define LCD_Filas 4 // Número de Renglones del LCD
Antulius 8:39219ab1efd9 69 #define LCD_Columnas 20 // Número de Caracteres x Renglón del LCD
Antulius 8:39219ab1efd9 70 #define Buzz_On 1 // Estado para Buzzer Encendido
Antulius 8:39219ab1efd9 71 #define Buzz_Off 0 // Estado para Buzzer Apagado
Antulius 8:39219ab1efd9 72 #define on 0 // Estado para botón presionado
Antulius 8:39219ab1efd9 73 #define off 1 // Estado para botón sin presionar
Antulius 8:39219ab1efd9 74 #define hold 2 // Estado para botón mantenido presionado
Antulius 8:39219ab1efd9 75 #define release 3 // Estado para botón al liberarse
Antulius 6:333a2763ad29 76 /*
Antulius 6:333a2763ad29 77 +-------------------------------------------------------------------------------
Antulius 6:333a2763ad29 78 | Configuración de Puertos
Antulius 6:333a2763ad29 79 +-------------------------------------------------------------------------------
Antulius 6:333a2763ad29 80 */
Antulius 8:39219ab1efd9 81 Ticker TimerInt; // Inicializa la Interrupción por Timer
Antulius 8:39219ab1efd9 82 DigitalOut led_monitor(LED2); // Inicializa el LED Monitor
Antulius 8:39219ab1efd9 83 DigitalOut buzzer (PTE31); // Inicializa el Buzzer Piezo Eléctrico
Antulius 8:39219ab1efd9 84 //PwmOut buzzer (PTE31); // PWM Control del Elemento Calefactor
Antulius 8:39219ab1efd9 85 /*
Antulius 8:39219ab1efd9 86 ** -------------------------------------------------------------------
Antulius 8:39219ab1efd9 87 ** Inicialización de los Pines de Funciones Especiales.
Antulius 8:39219ab1efd9 88 ** -------------------------------------------------------------------
Antulius 8:39219ab1efd9 89 */
Antulius 8:39219ab1efd9 90
Antulius 8:39219ab1efd9 91 /*************************************************
Antulius 8:39219ab1efd9 92 * Host PC Communication channels
Antulius 8:39219ab1efd9 93 **************************************************/
Antulius 7:af295ac5f904 94 Serial terminal(USBTX, USBRX); // Inicializa la Comunicación Serial a la PC
Antulius 8:39219ab1efd9 95 //Serial terminal(PTA2,PTA1); // Terminal Serial
Antulius 8:39219ab1efd9 96 //Serial terminal(PTE0, PTE1); // Tx, Rx Using MAX3232 or BlueTooth
Antulius 8:39219ab1efd9 97
Antulius 8:39219ab1efd9 98 /*************************************************
Antulius 8:39219ab1efd9 99 * Bluetooth Communication support
Antulius 8:39219ab1efd9 100 **************************************************
Antulius 8:39219ab1efd9 101 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 102 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 103 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 104 ***************************************************/
Antulius 8:39219ab1efd9 105 Serial bluetooth(PTE0, PTE1); // Tx, Rx
Antulius 8:39219ab1efd9 106
Antulius 8:39219ab1efd9 107 /*************************************************
Antulius 8:39219ab1efd9 108 * I2C Communication
Antulius 8:39219ab1efd9 109 **************************************************
Antulius 8:39219ab1efd9 110 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 111 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 112 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 113 * LCD I2C PCF8574A
Antulius 8:39219ab1efd9 114 * Pin Board LCD
Antulius 8:39219ab1efd9 115 * I2C_SCL SCL (white) + resistance pull-up 4.7k
Antulius 8:39219ab1efd9 116 * I2C_SDA SDA (blue) + resistance pull-up 4.7k
Antulius 8:39219ab1efd9 117 * 5V 5V (red)
Antulius 8:39219ab1efd9 118 * GND GND (black)
Antulius 8:39219ab1efd9 119 ***************************************************/
Antulius 9:26618de199fc 120 I2C i2c_lcd(PTC2,PTC1); // SDA, SCL
Antulius 8:39219ab1efd9 121
Antulius 8:39219ab1efd9 122 /*************************************************
Antulius 8:39219ab1efd9 123 * SPI Communication
Antulius 8:39219ab1efd9 124 **************************************************
Antulius 8:39219ab1efd9 125 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 126 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 127 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 128 * LCD SPI SN74HC595
Antulius 8:39219ab1efd9 129 * Pin Board LCD
Antulius 8:39219ab1efd9 130 * SPI_MOSI SER (white)
Antulius 8:39219ab1efd9 131 * SPI_MISO none (blue)
Antulius 8:39219ab1efd9 132 * SPI_CLK SRCLK
Antulius 8:39219ab1efd9 133 * SPI_PCS RCLK
Antulius 8:39219ab1efd9 134 * 5V 5V (red)
Antulius 8:39219ab1efd9 135 * GND GND (black)
Antulius 8:39219ab1efd9 136 ***************************************************/
Antulius 9:26618de199fc 137 //SPI spi_lcd(PTD6,PTD7,PTD5,PTD4); // MOSI, MISO, SCLK, SSEL
Antulius 8:39219ab1efd9 138
Antulius 9:26618de199fc 139 // LCD instantiation
Antulius 9:26618de199fc 140 /*************************************************
Antulius 9:26618de199fc 141 * Instantiation for creating a TextLCD interface
Antulius 9:26618de199fc 142 * for using control and functions over selected port
Antulius 9:26618de199fc 143 ***************************************************/
Antulius 9:26618de199fc 144 //TextLCD lcd(PTC6,PTC7, PTC8, PTC9, PTC10, PCT11, TextLCD::LCD16x2); // 4bit bus: rs, e, d4-d7
Antulius 9:26618de199fc 145 TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4); // I2C bus, PCF8574A Arduino Shield, LCD Type
Antulius 9:26618de199fc 146 //TextLCD_SPI lcd(&spi_lcd, PTD4, TextLCD::LCD16x4, TextLCD::HD44780); // SPI bus, SN74595 expander, CS pin, LCD Type
Antulius 8:39219ab1efd9 147
Antulius 6:333a2763ad29 148 /*
Antulius 8:39219ab1efd9 149 ** ===================================================================
Antulius 8:39219ab1efd9 150 ** Variables Globales del Programa
Antulius 8:39219ab1efd9 151 ** ===================================================================
Antulius 6:333a2763ad29 152 */
Antulius 7:af295ac5f904 153 uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms)
Antulius 7:af295ac5f904 154 uint16_t counter=250; // Cuenta inicial de 250us
Antulius 8:39219ab1efd9 155 int16_t N_Interrupciones; // Contador de Overrunig
Antulius 6:333a2763ad29 156 /*
Antulius 6:333a2763ad29 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 7:af295ac5f904 158 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 6:333a2763ad29 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 6:333a2763ad29 160 */
Antulius 8:39219ab1efd9 161 void setup(void); // Rutina de Inicialización para el Hardware
Antulius 9:26618de199fc 162 void Ticker_OnInterrupt(void); // Rutina de Atención para el Ticker
Antulius 8:39219ab1efd9 163 void buzzer_beep(void); // Pitidos del Buzzer
Antulius 9:26618de199fc 164 void I2C_scanner(void); // Busca dispositivos conectados al bus I2C
Antulius 8:39219ab1efd9 165 void test_LCD(void); // Prueba la operación del LCD
Antulius 8:39219ab1efd9 166 void blinking_led(void); // Rutina de Parpadeo del Led monitor
Antulius 9:26618de199fc 167 /* END definitions */
Antulius 6:333a2763ad29 168 /*
Antulius 6:333a2763ad29 169 #===============================================================================
Antulius 6:333a2763ad29 170 |
Antulius 6:333a2763ad29 171 | P R O G R A M A P R I N C I P A L
Antulius 6:333a2763ad29 172 |
Antulius 6:333a2763ad29 173 #===============================================================================
Antulius 6:333a2763ad29 174 */
Antulius 6:333a2763ad29 175 int main()
Antulius 6:333a2763ad29 176 {
Antulius 6:333a2763ad29 177 // Inicialización de variables, puertos e interrupciones
Antulius 8:39219ab1efd9 178 terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial.
Antulius 7:af295ac5f904 179 terminal.printf(" System is Wake Up!.\n\r");
Antulius 8:39219ab1efd9 180 setup(); //Inicializa el Hardware Principal
Antulius 9:26618de199fc 181 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 7:af295ac5f904 182 while (true) // El Lazo del Programa principal está aquí !!!
Antulius 6:333a2763ad29 183 {
Antulius 8:39219ab1efd9 184 lcd.cls();
Antulius 8:39219ab1efd9 185 lcd.locate(0,0);
Antulius 8:39219ab1efd9 186 lcd.printf("Bienvenidos Sean"); // El LCD saluda al Mundo
Antulius 8:39219ab1efd9 187 lcd.printf(" a la \n"); // y a la
Antulius 9:26618de199fc 188 lcd.setInvert(on);
Antulius 8:39219ab1efd9 189 lcd.printf("Gloriosa ESIME !\n"); // Gloriosa ESIME !
Antulius 9:26618de199fc 190 lcd.setInvert(off);
Antulius 8:39219ab1efd9 191 lcd.locate(0,4);
Antulius 8:39219ab1efd9 192 lcd.printf("Flashings: %d",N_Interrupciones); // Led Flasings Transcurridos
Antulius 8:39219ab1efd9 193 wait(0.5);
Antulius 8:39219ab1efd9 194
Antulius 8:39219ab1efd9 195 // Blinking_Led(); // Parapadeo del LED por Software
emilmont 0:0f00f07ebde0 196 }
Antulius 6:333a2763ad29 197 }
Antulius 7:af295ac5f904 198 /* END main */
Antulius 7:af295ac5f904 199
Antulius 7:af295ac5f904 200 /*
Antulius 7:af295ac5f904 201 ................................................................................
Antulius 7:af295ac5f904 202 : Rutinas de los Vectores de Interrupción
Antulius 7:af295ac5f904 203 ................................................................................
Antulius 7:af295ac5f904 204 */
Antulius 9:26618de199fc 205 void Ticker_OnInterrupt() // Rutina de Atención al Ticker
Antulius 7:af295ac5f904 206 {
Antulius 7:af295ac5f904 207 counter--; // Aquí va la Rutina de Servicio !
Antulius 7:af295ac5f904 208 if (!counter)
Antulius 7:af295ac5f904 209 {
Antulius 9:26618de199fc 210 N_Interrupciones++;
Antulius 9:26618de199fc 211 terminal.printf("Counter Finish! %d Times \r",N_Interrupciones);
Antulius 7:af295ac5f904 212 led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (Toggle the LED)
Antulius 7:af295ac5f904 213 counter = Rate; // Restablece el contador
Antulius 8:39219ab1efd9 214 }
Antulius 7:af295ac5f904 215 }
Antulius 7:af295ac5f904 216 /* END Events */
Antulius 7:af295ac5f904 217 /*
Antulius 7:af295ac5f904 218 ________________________________________________________________________________
Antulius 7:af295ac5f904 219 |
Antulius 7:af295ac5f904 220 | Funciones Prototipo
Antulius 7:af295ac5f904 221 |_______________________________________________________________________________
Antulius 7:af295ac5f904 222 */
Antulius 7:af295ac5f904 223 // Las Funciones Prototipo van aquí !
Antulius 8:39219ab1efd9 224 void setup() // Inicialización del Hardware del Sistema
Antulius 8:39219ab1efd9 225 {
Antulius 8:39219ab1efd9 226 /* Inicia la comunicación la Terminal */ /* 115200 Bauds, 8 bits, 1 stop, N parity */
Antulius 8:39219ab1efd9 227 terminal.baud(115200); // Se inicia la comunicación serial.
Antulius 9:26618de199fc 228 terminal.printf("Beginig Start Up, Please wait...\n\r");
Antulius 9:26618de199fc 229 terminal.printf("Testing Buzzer... \n\r");
Antulius 9:26618de199fc 230 buzzer_beep();
Antulius 8:39219ab1efd9 231 /* Inicialización del Bluetooth */
Antulius 8:39219ab1efd9 232 bluetooth.baud(115200); // Se inicia la comunicación Bluetooth.
Antulius 8:39219ab1efd9 233 // bluetooth.scanf("%s", buf); //Lee un carácter desde el Bluetooth
Antulius 8:39219ab1efd9 234 // bluetooth.printf("recv: %s", buf); //Hace eco al Bluetooth
Antulius 8:39219ab1efd9 235 // terminal.printf("recv: %s\r\n", buf); //Imprime en la Terminal el caracter recibido
Antulius 8:39219ab1efd9 236 bluetooth.printf("Bluetooth Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 237 terminal.printf("Bluetooth Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 238 /* Prueba del Buzzer */
Antulius 9:26618de199fc 239
Antulius 8:39219ab1efd9 240
Antulius 8:39219ab1efd9 241 /* Configufración del Display LCD */ /* Mucho OjO !!! */
Antulius 8:39219ab1efd9 242
Antulius 8:39219ab1efd9 243 /* LCD Utilizando el SPI */
Antulius 9:26618de199fc 244 // spi_lcd.frequency(1000000); // Frecuencia de operación para el SPI
Antulius 9:26618de199fc 245 // spi_lcd.format(8,0); // Modo de Operación para el SPI
Antulius 9:26618de199fc 246 // terminal.printf("SPI Initalzed...\n\r");
Antulius 8:39219ab1efd9 247 /* LCD Utilizando el I2C */
Antulius 9:26618de199fc 248 I2C_scanner(); // Busca Dispositivos I2C conectados al Bus
Antulius 9:26618de199fc 249 i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz)
Antulius 8:39219ab1efd9 250 i2c_lcd.start(); // Inicio de operación para el I2C
Antulius 8:39219ab1efd9 251 terminal.printf("I2C Initialized...\n\r");
Antulius 8:39219ab1efd9 252 /* Prueba de operación del LCD */
Antulius 8:39219ab1efd9 253 terminal.printf("LCD Test, please wait...\n\r");
Antulius 9:26618de199fc 254 test_LCD(); // Rutina de prueba del LCD
Antulius 8:39219ab1efd9 255 terminal.printf("LCD Initialized Succesfuly...\n\r");
Antulius 8:39219ab1efd9 256 /* Arranque de la interrupción por el Ticker */
Antulius 8:39219ab1efd9 257 terminal.printf("Ticker Starting Now...\n\r");
Antulius 9:26618de199fc 258 TimerInt.attach_us(&Ticker_OnInterrupt, Ticker_Rate); // Le asigna el periodo de barrido de 1ms (Ticker_Rate=1000)
Antulius 8:39219ab1efd9 259 }
Antulius 8:39219ab1efd9 260
Antulius 8:39219ab1efd9 261 void test_LCD()
Antulius 8:39219ab1efd9 262 {
Antulius 9:26618de199fc 263 // lcd.init(TextLCD::LCDDatalength, 4 ); // Configura el LCD en Modo 4 Bits (Modo GPIO)
Antulius 9:26618de199fc 264 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 9:26618de199fc 265 lcd.setCursor(TextLCD::CurOff_BlkOff);// Apaga el Cursor y Apaga el Parpadeo
Antulius 9:26618de199fc 266 lcd.cls(); // Limpia la Pantalla LCD
Antulius 9:26618de199fc 267 lcd.printf("Hello World!\n"); // El LCD saluda al Mundo!
Antulius 8:39219ab1efd9 268 lcd.setInvert(on);
Antulius 9:26618de199fc 269 lcd.printf("Hola Mundo!\n"); // El LCD saluda al Mundo!
Antulius 9:26618de199fc 270 lcd.setInvert(off);
Antulius 9:26618de199fc 271 lcd.printf("Ciao Mondo!\n"); // El LCD saluda al Mundo!
Antulius 9:26618de199fc 272 lcd.setInvert(on);
Antulius 9:26618de199fc 273 lcd.printf("Bonjour le Monde"); // El LCD saluda al Mundo!
Antulius 9:26618de199fc 274 wait(5);
Antulius 8:39219ab1efd9 275 lcd.cls(); // Limpia el Display LCD
Antulius 9:26618de199fc 276 lcd.setCursor(TextLCD::CurOn_BlkOn); // Cursor Encendido, Parpadeo Encendido
Antulius 9:26618de199fc 277 terminal.printf("TextLCD Enhanced Test. Columns=%d, Rows=%d\n\r", lcd.columns(), lcd.rows());
Antulius 9:26618de199fc 278 Timer Elpased_Time; // Inicializa el Tiempo a Transcurrir
Antulius 9:26618de199fc 279 Elpased_Time.start(); // Comienza a contar el tiempo transcurrido
Antulius 8:39219ab1efd9 280 for (int row=0; row<lcd.rows(); row++)// Prueba toda la Pantalla
Antulius 8:39219ab1efd9 281 {
Antulius 9:26618de199fc 282 int col=0;
Antulius 9:26618de199fc 283 terminal.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row));
Antulius 9:26618de199fc 284 lcd.putc('0' + row); // Enumera los renglones
Antulius 8:39219ab1efd9 285 for (col=1; col<lcd.columns()-1; col++)
Antulius 8:39219ab1efd9 286 {
Antulius 9:26618de199fc 287 lcd.putc('*'); // Llena la linea con el carácter "*"
Antulius 8:39219ab1efd9 288 }
Antulius 9:26618de199fc 289 terminal.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row));
Antulius 9:26618de199fc 290 lcd.putc('+'); // Al final de la línea agrega el "+"
Antulius 8:39219ab1efd9 291 }
Antulius 9:26618de199fc 292 Elpased_Time.stop(); // Detiene el Contador de Ticks
Antulius 9:26618de199fc 293 terminal.printf("All my hard work took %f sec\r\n", Elpased_Time.read()); // Calcula el tiempo transcurrido
Antulius 9:26618de199fc 294 wait(1); // Espera por 1 segundo
Antulius 9:26618de199fc 295 terminal.printf("LCD Display and TextLCD Enhanced Test Completed.\n\r");
Antulius 9:26618de199fc 296 wait(1); // Espera 1 segundo
Antulius 9:26618de199fc 297 lcd.cls(); // Limpia la Pantalla
Antulius 9:26618de199fc 298 // lcd.setBacklight(TextLCD::LightOff); // Apaga la Iluminación de Fondo
Antulius 9:26618de199fc 299 lcd.setCursor(TextLCD::CurOff_BlkOn); // Apaga el Cursor y Enciende el Parpadeo
Antulius 8:39219ab1efd9 300 // Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780.
Antulius 8:39219ab1efd9 301 // They are defined by a 5x7 bitpattern.
Antulius 9:26618de199fc 302 lcd.setUDC(0, (char *) udc_0); // Selecciona el caracter para el cursor |>
Antulius 9:26618de199fc 303 lcd.putc(0); // Lo imprime en la Pantalla LCD
Antulius 9:26618de199fc 304 lcd.printf(" LCD Ready... "); // El LCD está listo para usarse
Antulius 9:26618de199fc 305 wait(2); // Espera 2 segundos
Antulius 9:26618de199fc 306 lcd.setCursor(TextLCD::CurOff_BlkOff);// Apaga el Cursor y Apaga el Parpadeo
Antulius 9:26618de199fc 307 terminal.printf("LCD Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 308 }
Antulius 8:39219ab1efd9 309
Antulius 9:26618de199fc 310 void buzzer_beep() // Software routine for Buzzer Beep
Antulius 8:39219ab1efd9 311 {
Antulius 9:26618de199fc 312 buzzer = Buzz_On;
Antulius 9:26618de199fc 313 wait_ms(750);
Antulius 9:26618de199fc 314 buzzer = Buzz_Off;
Antulius 9:26618de199fc 315 wait_ms(125);
Antulius 9:26618de199fc 316 buzzer = Buzz_On;
Antulius 9:26618de199fc 317 wait_ms(250);
Antulius 9:26618de199fc 318 buzzer = Buzz_Off;
Antulius 9:26618de199fc 319 wait_ms(125);
Antulius 9:26618de199fc 320 buzzer = Buzz_On;
Antulius 9:26618de199fc 321 wait_ms(500);
Antulius 9:26618de199fc 322 buzzer = Buzz_Off;
Antulius 8:39219ab1efd9 323 }
Antulius 8:39219ab1efd9 324
Antulius 8:39219ab1efd9 325 void blinking_led() // Software Blinking routine for LED
Antulius 7:af295ac5f904 326 {
Antulius 7:af295ac5f904 327 // The on-board LED is connected, via a resistor, to +3.3V (not to GND).
Antulius 7:af295ac5f904 328 // So to turn the LED on or off we have to set it to 0 or 1 respectively
Antulius 7:af295ac5f904 329 led_monitor = 0; // turn the LED on
Antulius 7:af295ac5f904 330 wait_ms(200); // 200 millisecond
Antulius 7:af295ac5f904 331 led_monitor = 1; // turn the LED off
Antulius 7:af295ac5f904 332 wait_ms(1000); // 1000 millisecond
Antulius 7:af295ac5f904 333 }
Antulius 9:26618de199fc 334
Antulius 8:39219ab1efd9 335 void I2C_scanner()
Antulius 8:39219ab1efd9 336 {
Antulius 8:39219ab1efd9 337 terminal.printf ("I2C scanner. Scanning ...");
Antulius 8:39219ab1efd9 338 uint8_t count = 0;
Antulius 8:39219ab1efd9 339 char test[] = { 0b00000000, 0b00000000, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=DB6=DB7=0 en datos
Antulius 8:39219ab1efd9 340 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 341 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 342 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 343 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos,
Antulius 8:39219ab1efd9 344 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos,
Antulius 8:39219ab1efd9 345 0b01100110, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=N=1 2 líneas, DB6=F=0 5x7puntos,
Antulius 8:39219ab1efd9 346 0b01100000, 0b00100000, // => Display ON/OFF Control.
Antulius 8:39219ab1efd9 347 0b01100001, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=1 (Display off, cursor off, blink off)
Antulius 8:39219ab1efd9 348 0b01100000, 0b00100000, // => Display Clear.
Antulius 8:39219ab1efd9 349 0b01101000, 0b00101000};// RS=0, EN=1,0, LED+=1, NC, DB4=1 en datos, (Cursor Home}; // Patrón de Prueba
Antulius 8:39219ab1efd9 350
Antulius 9:26618de199fc 351 // char test[] = {0x55,0xAA,0x0F,0xF0,0xFF,0x00};// Patrón de Prueba
Antulius 8:39219ab1efd9 352 i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz)
Antulius 8:39219ab1efd9 353 i2c_lcd.start(); // Inicio de operación para el I2C
Antulius 8:39219ab1efd9 354 for (int i = 8; i < 128; i++)
Antulius 8:39219ab1efd9 355 {
Antulius 8:39219ab1efd9 356 uint8_t acknoledge = i2c_lcd.write (i,test,22,1); //(dirección, ap_datos, N°_datos, repetición)
Antulius 8:39219ab1efd9 357 if (acknoledge == 0)
Antulius 8:39219ab1efd9 358 {
Antulius 8:39219ab1efd9 359 terminal.printf ("\n\rFound address: ");
Antulius 8:39219ab1efd9 360 terminal.printf ("%u DEC",i); // Valor de la dirección en Decimal
Antulius 9:26618de199fc 361 terminal.printf (" (0x%x HEX)\n\r",i);// Valor de la dirección en Hexadecimal
Antulius 9:26618de199fc 362 char data = i2c_lcd.read (i); // Lee el dato en la dirección
Antulius 9:26618de199fc 363 terminal.printf ("Data: (0x%hd HEX)\n\r",data); // Valor del último dato en la dirección en Hexadecimal
Antulius 8:39219ab1efd9 364 count++;
Antulius 8:39219ab1efd9 365
Antulius 8:39219ab1efd9 366 wait (1); // maybe unneeded?
Antulius 8:39219ab1efd9 367 } // end of good response
Antulius 8:39219ab1efd9 368 led_monitor = !led_monitor; // Parapadeo del LED
Antulius 8:39219ab1efd9 369 } // end of for loop
Antulius 8:39219ab1efd9 370 led_monitor = 1; // Apaga el LED
Antulius 8:39219ab1efd9 371 i2c_lcd.stop(); // Fin de operación para el I2C
Antulius 8:39219ab1efd9 372 terminal.printf ("\n\rDone.\n\r");
Antulius 8:39219ab1efd9 373 terminal.printf ("Found %d Device(s)\n\r",count);
Antulius 8:39219ab1efd9 374 } // end of setup
Antulius 7:af295ac5f904 375
Antulius 7:af295ac5f904 376 /* END Program */
Antulius 7:af295ac5f904 377
Antulius 9:26618de199fc 378 /*+-----------------------------------------------------------------------------
Antulius 9:26618de199fc 379 *+ Direccinamiento de la RAM del Display:
Antulius 9:26618de199fc 380 *+
Antulius 9:26618de199fc 381 *+ Los módulos de 8x1 (obsoletos) están arreglados como una líneas de
Antulius 9:26618de199fc 382 *+ 8 caracteres de lada a lado.
Antulius 9:26618de199fc 383 *+ "Linea 1" Las direcciones comienzan en 80h a 87h
Antulius 9:26618de199fc 384 *+
Antulius 9:26618de199fc 385 *+ Los módulos de 16x1 están arreglados como dos líneas de 8 caracteres de lada a lado.
Antulius 9:26618de199fc 386 *+ "Linea 1" Las direcciones comienzan en 80h a 87h (primera parte de la línea)
Antulius 9:26618de199fc 387 *+ "Linea 1" Las direcciones comienzan en C0h a C7h (segunda parte de la línea)
Antulius 9:26618de199fc 388 *+ de manera que al escribir caracteres al módulo, el cursor se incrementará automaticamente
Antulius 9:26618de199fc 389 *+ hasta alcanzar el 9° caracter entonces tendrá que mover el cursor a la dirección C0h antes
Antulius 9:26618de199fc 390 *+ de escribir el 9° caracter en el módulo de 1x16.
Antulius 9:26618de199fc 391 *+
Antulius 9:26618de199fc 392 *+ Módulo de 16x2 es dos líneas por 16 caracteres
Antulius 9:26618de199fc 393 *+ "Linea 1" Las direcciones comienzan en 80h a 8Fh
Antulius 9:26618de199fc 394 *+ "Linea 2" Las direcciones comienzan en C0h a CFh
Antulius 9:26618de199fc 395 *+
Antulius 9:26618de199fc 396 *+ Módulo de 16x4
Antulius 9:26618de199fc 397 *+ "Linea 1" Las direcciones comienzan en 80h a 8Fh
Antulius 9:26618de199fc 398 *+ "Linea 2" Las direcciones comienzan en C0h a CFh
Antulius 9:26618de199fc 399 *+ "Linea 3" Las direcciones comienzan en 90h a 9Fh
Antulius 9:26618de199fc 400 *+ "Linea 4" Las direcciones comienzan en D0h a DFh
Antulius 9:26618de199fc 401 *+
Antulius 9:26618de199fc 402 *+ Módulo de 20x1
Antulius 9:26618de199fc 403 *+ "Linea 1" Las direcciones comienzan en 80h a 93h
Antulius 9:26618de199fc 404 *+
Antulius 9:26618de199fc 405 *+ Módulo de 20x2
Antulius 9:26618de199fc 406 *+ "Linea 1" Las direcciones comienzan en 80h a 93h
Antulius 9:26618de199fc 407 *+ "Linea 2" Las direcciones comienzan en C0h a D3h
Antulius 9:26618de199fc 408 *+
Antulius 9:26618de199fc 409 *+ Módulo de 20x4
Antulius 9:26618de199fc 410 *+ "Linea 1" Las direcciones comienzan en 80h a 93h
Antulius 9:26618de199fc 411 *+ "Linea 2" Las direcciones comienzan en C0h a D3h
Antulius 9:26618de199fc 412 *+ "Linea 3" Las direcciones comienzan en 94h a A7h
Antulius 9:26618de199fc 413 *+ "Linea 4" Las direcciones comienzan en D4h a E7h
Antulius 9:26618de199fc 414 *+
Antulius 9:26618de199fc 415 *+ Módulo de 24x2
Antulius 9:26618de199fc 416 *+ "Linea 1" Las direcciones comienzan en 80h a 98h
Antulius 9:26618de199fc 417 *+ "Linea 2" Las direcciones comienzan en C0h a D8h
Antulius 9:26618de199fc 418 *+
Antulius 9:26618de199fc 419 *+ Módulo de 32x2
Antulius 9:26618de199fc 420 *+ "Linea 1" Las direcciones comienzan en 80h a A0h
Antulius 9:26618de199fc 421 *+ "Linea 2" Las direcciones comienzan en C0h a E0h
Antulius 9:26618de199fc 422 *+
Antulius 9:26618de199fc 423 *+ Módulo de 40x2
Antulius 9:26618de199fc 424 *+ "Linea 1" Las direcciones comienzan en 80h a A7h
Antulius 9:26618de199fc 425 *+ "Linea 2" Las direcciones comienzna en C0h a E7h
Antulius 9:26618de199fc 426 *+
Antulius 9:26618de199fc 427 *+
Antulius 9:26618de199fc 428 *+--------------------------------------------------------------------------- */
Antulius 9:26618de199fc 429
Antulius 9:26618de199fc 430 /*+-----------------------------------------------------------------------------
Antulius 9:26618de199fc 431 *+ Inicializaci¢n del Display de Cristal Líquido Alfanumérico en modo de 4 bits
Antulius 9:26618de199fc 432 *+
Antulius 9:26618de199fc 433 *+ Definici¢n de pines:
Antulius 9:26618de199fc 434 *+ __ Vdd GND
Antulius 9:26618de199fc 435 *+ MOSI MISO SCK SS | |
Antulius 9:26618de199fc 436 *+ | | | | 10K |
Antulius 9:26618de199fc 437 *+ | | | | | |
Antulius 9:26618de199fc 438 *+ CD 4094 DATA NC CLOCK STROBE NC OE QS ---> DATA en la siguiente etapa
Antulius 9:26618de199fc 439 *+ 74HC 595 SER NC SCLK RCLK SCLR G QH' ---> SER en la siguiente etapa
Antulius 9:26618de199fc 440 *+
Antulius 9:26618de199fc 441 *+ CD 4094 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
Antulius 9:26618de199fc 442 *+ 74HC 595 QA QB QC QD QE QF QG QH
Antulius 9:26618de199fc 443 *+ | | | | | | | |
Antulius 9:26618de199fc 444 *+ | | | | | | | |
Antulius 9:26618de199fc 445 *+ HD44780 R/S RW E BL DB4 DB5 DB6 DB7
Antulius 9:26618de199fc 446 *+
Antulius 9:26618de199fc 447 *+ Notas: El pin RW del LCD debe estar estar siempre en "L" o conectado a GND.
Antulius 9:26618de199fc 448 *+ El pin E2 es usado solo para el LCD40x4 (segundo controlador)
Antulius 9:26618de199fc 449 *+ La señal BL = LED+ y debe ser usado para control del Backlight
Antulius 9:26618de199fc 450 *+ Para enviar cualquier dato o instrucci¢n hay que hacer una _
Antulius 9:26618de199fc 451 *+ transici¢n de bajo a alto en el pin de E (Enable) del LCD. _| |_
Antulius 9:26618de199fc 452 *+
Antulius 9:26618de199fc 453 *+------------------------------------------------------------------------------
Antulius 9:26618de199fc 454 *+
Antulius 9:26618de199fc 455 *+ Ubicaciónn de pines:
Antulius 9:26618de199fc 456 *+ ---------------------------------------------------------------------
Antulius 9:26618de199fc 457 *+ | _______________________________________________________________ |
Antulius 9:26618de199fc 458 *+ | | | |
Antulius 9:26618de199fc 459 *+ | | | |
Antulius 9:26618de199fc 460 *+ | | | |
Antulius 9:26618de199fc 461 *+ | | | |
Antulius 9:26618de199fc 462 *+ | | | |
Antulius 9:26618de199fc 463 *+ | | | |
Antulius 9:26618de199fc 464 *+ | |_______________________________________________________________| |
Antulius 9:26618de199fc 465 *+ | |
Antulius 9:26618de199fc 466 *+ ---------------------------------------------------------------------
Antulius 9:26618de199fc 467 *+ | | | | | | | | | | | | | | | |
Antulius 9:26618de199fc 468 *+ | | | | | | | | | | | | | | | |
Antulius 9:26618de199fc 469 *+ 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Antulius 9:26618de199fc 470 *+
Antulius 9:26618de199fc 471 *+ 1 Vss - GND
Antulius 9:26618de199fc 472 *+ 2 Vdd - Vcc
Antulius 9:26618de199fc 473 *+ 3 Vee - Ajuste de contraste
Antulius 9:26618de199fc 474 *+ 4 RS - (Register/String) 0=Entrada de Instrucción, 1=Entrada de Dato
Antulius 9:26618de199fc 475 *+ 5 RW - Lectura/Escritura 0=Escribe al LCD, 1=Lee del LCD
Antulius 9:26618de199fc 476 *+ 6 E - Señal de Habilitación "101"
Antulius 9:26618de199fc 477 *+ 7 DB0 - Línea 0 del bus de datos
Antulius 9:26618de199fc 478 *+ 8 DB1 - Línea 1 del bus de datos
Antulius 9:26618de199fc 479 *+ 9 DB2 - Línea 2 del bus de datos
Antulius 9:26618de199fc 480 *+ 10 DB3 - Línea 3 del bus de datos _
Antulius 9:26618de199fc 481 *+ 11 DB4 - Línea 4 del bus de datos |
Antulius 9:26618de199fc 482 *+ 12 DB5 - Línea 5 del bus de datos \ Operación en 4 bits
Antulius 9:26618de199fc 483 *+ 13 DB6 - Línea 6 del bus de datos /
Antulius 9:26618de199fc 484 *+ 14 DB7 - Línea 7 del bus de datos _|
Antulius 9:26618de199fc 485 *+ 15 LED+ Ánodo Backlight
Antulius 9:26618de199fc 486 *+ 16 LED- Cátodo Backlight
Antulius 9:26618de199fc 487 *+
Antulius 9:26618de199fc 488 *+------------------------------------------------------------------------------
Antulius 9:26618de199fc 489 *+
Antulius 9:26618de199fc 490 *+ +5V ------------*----------- Vcc PTE19 PTE18 PTE20 PTE21 PTE22 PTE23
Antulius 9:26618de199fc 491 *+ | RS E D4 D5 D6 D7
Antulius 9:26618de199fc 492 *+ /
Antulius 9:26618de199fc 493 *+ 10k to \<---------- Vee R/W ---> GND
Antulius 9:26618de199fc 494 *+ 20k pot / A ---> PWM1 o R=330 ---> Vcc
Antulius 9:26618de199fc 495 *+ \ K ---> GND
Antulius 9:26618de199fc 496 *+ |
Antulius 9:26618de199fc 497 *+ GND ------------*----------- Vss
Antulius 9:26618de199fc 498 *+
Antulius 9:26618de199fc 499 *+------------------------------------------------------------------------------
Antulius 9:26618de199fc 500 *+
Antulius 9:26618de199fc 501 *+ Definici¢n de bits:
Antulius 9:26618de199fc 502 *+
Antulius 9:26618de199fc 503 *+ I/D=1: (Increment/Decrement) Incremento (+) del Cursor
Antulius 9:26618de199fc 504 *+ I/D=0: (Increment/Decrement) Decremento (-) del Cursor
Antulius 9:26618de199fc 505 *+ D=0: (Display) Apaga el Display
Antulius 9:26618de199fc 506 *+ D=1: (Display) Enciende el Display
Antulius 9:26618de199fc 507 *+ C=0: (Cursor) Apaga el Cursor
Antulius 9:26618de199fc 508 *+ C=1: (Cursor) Enciende el Cursor
Antulius 9:26618de199fc 509 *+ B=0: (Blinking) Apaga el parpadeo del Cursor
Antulius 9:26618de199fc 510 *+ B=1: (Blinking) Enciende el parpadeo del Cursor
Antulius 9:26618de199fc 511 *+ S=0: (Shift) Sin corrimiento del Display
Antulius 9:26618de199fc 512 *+ S=1: (Shift) Con corrimiento del Display
Antulius 9:26618de199fc 513 *+ S/C=1: (Shift/Cursor) Con corrimiento del Display
Antulius 9:26618de199fc 514 *+ S/C=0: (Shift/Cursor) Con Movimiento del Cursor
Antulius 9:26618de199fc 515 *+ R/L=1: (Right/Left) Corrimiento a la Derecha
Antulius 9:26618de199fc 516 *+ R/L=0: (Right/Left) Corrimiento a la Izquierda
Antulius 9:26618de199fc 517 *+ DL=1: (Data Lenght) 8 Bits de datos
Antulius 9:26618de199fc 518 *+ DL=0: (Data Lenght) 4 Bits de datos
Antulius 9:26618de199fc 519 *+ N=1: (Number Lines) Modo de 2 Líneas de despliege
Antulius 9:26618de199fc 520 *+ N=0: (Number Lines) Modo de 1 Línea de despliege
Antulius 9:26618de199fc 521 *+ F=1: (Font) 5X10 Puntos por caracter
Antulius 9:26618de199fc 522 *+ F=0: (Font) 5X7 Puntos por caracter
Antulius 9:26618de199fc 523 *+ BF=1: (Busy Flag) Operación interna en proceso
Antulius 9:26618de199fc 524 *+ BF=0: (Busy Flag) Listo para aceptar instrucciones/datos
Antulius 9:26618de199fc 525 *+ DDRAM: (Display Data Ram)
Antulius 9:26618de199fc 526 *+ CGRAM: (Character Generator RAM)
Antulius 9:26618de199fc 527 *+ ACC: Address of CGRAM
Antulius 9:26618de199fc 528 *+ ADD: Address of DDRAM These correspond to curser addresses.
Antulius 9:26618de199fc 529 *+ AC: Address counter used for both DDRAM and CGRAM
Antulius 9:26618de199fc 530 *+
Antulius 9:26618de199fc 531 *+ RS RW MSB LSB
Antulius 9:26618de199fc 532 *+ Clear Display 0 0 0 0 0 0 0 0 0 1
Antulius 9:26618de199fc 533 *+ Cursor at Home 0 0 0 0 0 0 0 0 1 0
Antulius 9:26618de199fc 534 *+ Entry Mode Set 0 0 0 0 0 0 0 1 I/D S
Antulius 9:26618de199fc 535 *+ Display ON/OFF control 0 0 0 0 0 0 1 D C B
Antulius 9:26618de199fc 536 *+ Cursor/Display Shift 0 0 0 0 0 1 S/C R/L x x
Antulius 9:26618de199fc 537 *+ Function Set 0 0 0 0 1 DL N F x x
Antulius 9:26618de199fc 538 *+ CGRAM 0 0 0 1 -------- ACC --------
Antulius 9:26618de199fc 539 *+ DDRAM 0 0 1 ---------- ADD ----------
Antulius 9:26618de199fc 540 *+ Busy Flag/Address Read 0 1 1 -----------AC------------
Antulius 9:26618de199fc 541 *+ CGRAM/CDDRAM Data Write 1 0 Write Data
Antulius 9:26618de199fc 542 *+ CGRAM/CDDRAM Data Read 1 1 Read Data
Antulius 9:26618de199fc 543 *+
Antulius 9:26618de199fc 544 *+
Antulius 9:26618de199fc 545 *+ Tiempos de Ejecución:
Antulius 9:26618de199fc 546 *+ Dependiendo del Oscilador Interno del LCD los tiempos de ejecución de las
Antulius 9:26618de199fc 547 *+ instrucciones pueden variar.
Antulius 9:26618de199fc 548 *+ Fosc
Antulius 9:26618de199fc 549 *+ INSTRUCCION 160Khz 250Khz 270Khz
Antulius 9:26618de199fc 550 *+ Clear Display 120us~4.9ms 82us~1.6ms 40us~1.5ms
Antulius 9:26618de199fc 551 *+ Cursor Home 120us 40~1.6ms 37us~1.5ms
Antulius 9:26618de199fc 552 *+ Todas las demás 120us 40us 37us
Antulius 9:26618de199fc 553 *+ Lectura/Escritura 120us 40us 37us
Antulius 9:26618de199fc 554 *+ Lectura de Busy Flag 1us 1us 1us
Antulius 9:26618de199fc 555
Antulius 9:26618de199fc 556 *+ El controlador podría estar en modo de 8 bits (reinicio de encendido)
Antulius 9:26618de199fc 557 *+ o en modo de 4 bits (reinicio en caliente) en este punto.
Antulius 9:26618de199fc 558 *+ Siga este procedimiento para asegurarse de que el controlador entre en el
Antulius 9:26618de199fc 559 *+ estado correcto.
Antulius 9:26618de199fc 560 *+
Antulius 9:26618de199fc 561 *+******************************************************************************
Antulius 9:26618de199fc 562 *+// Patrón de Configuración del LCD en modo de 4 bits (LSN first)
Antulius 9:26618de199fc 563 *+******************************************************************************
Antulius 9:26618de199fc 564 *+ char init_LCD[] = {0b00000000, 0b00000000, // Datos en DB7=DB6=DB5=DB4=0, LED+=0, EN=0,RW=0,RS=0
Antulius 9:26618de199fc 565 *+ 0b00111110, 0b00111010, // Datos en DB5=DB4=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 566 *+ 0b00111110, 0b00111010, // Datos en DB5=DB4=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 567 *+ 0b00111110, 0b00111010, // Datos en DB5=DB4=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 568 *+ 0b00101110, 0b00100010, // Datos en DB5=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 569 *+ 0b00101110, 0b00100010, // => Function Set Control: DB5=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 570 *+ 0b10001110, 0b10001110, // => Function Set Control: DB7=N=1 2 líneas, DB6=F=0 5x7puntos, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 571 *+ 0b00001110, 0b00000010, // => Display ON/OFF Control: DB7=DB6=DB5=DB4=0, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 572 *+ 0b00101110, 0b00100010, // => Display ON/OFF Control: DB7=1 (Display off, cursor off, blink off),LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 573 *+ 0b00001110, 0b00000010, // => Display Clear: DB7=DB6=DB5=DB4=0, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 574 *+ 0b00011110, 0b00010010, // => Display Clear: D4=1, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 575 *+ 0b00001110, 0b00000010, // => Cursor Home: DB7=DB6=DB5=DB4=0, LED+=1, EN=1,0,RW=1,RS=0
Antulius 9:26618de199fc 576 *+ 0b00101110, 0b00100010, // => Cursor Home: DB5=1, LED+=1, EN=1,0,RW=1,RS=0 , (Cursor Home};
Antulius 9:26618de199fc 577 *+ 0b01001111, 0b00001011, // => Text 0x48: DB5=1, LED+=1, EN=1,0,RW=1,RS=1
Antulius 9:26618de199fc 578 *+ 0b10001111, 0b00101011, // => Text "H" : DB7=1, LED+=1, EN=1,0,RW=1,RS=1 , (ASCII "H"}
Antulius 9:26618de199fc 579 *+ 0b01101111, 0b01101011, // => Text 0x6F: DB5=1, LED+=1, EN=1,0,RW=1,RS=1
Antulius 9:26618de199fc 580 *+ 0b11111111, 0b11111011, // => Text "o" : DB7=DB6=DB5=DB4=1, LED+=1, EN=1,0,RW=1,RS=1 , (ASCII "o"}
Antulius 9:26618de199fc 581 *+ 0b01101111, 0b01101011, // => Text 0x6C: DB6=DB5=1, LED+=1, EN=1,0,RW=1,RS=1
Antulius 9:26618de199fc 582 *+ 0b11001111, 0b11001011, // => Text "l" : DB7=DB6=1, LED+=1, EN=1,0,RW=1,RS=1 , (ASCII "l"}
Antulius 9:26618de199fc 583 *+ 0b01101111, 0b01101011, // => Text 0x61: DB6=DB5=1, LED+=1, EN=1,0,RW=1,RS=1
Antulius 9:26618de199fc 584 *+ 0b00011111, 0b00011011, // => Text "a" : DB4=1, LED+=1, EN=1,0,RW=1,RS=1 , (ASCII "a"}
Antulius 9:26618de199fc 585 *+ 0b00101111, 0b00101011, // => Text 0x21: DB5=1, LED+=1, EN=1,0,RW=1,RS=1
Antulius 9:26618de199fc 586 *+ 0b00011111, 0b00011011};// => Text "!" : DB4=1, LED+=1, EN=1,0,RW=1,RS=1 , (ASCII "!"}
Antulius 9:26618de199fc 587 *+
Antulius 9:26618de199fc 588 *+ La interfaz de hardware entre el MCU y la LCD en modo de 8 bits solo puede
Antulius 9:26618de199fc 589 *+ recibir los 4 bits más significativos (Nibble más significativo, MSN)
Antulius 9:26618de199fc 590 *+ como instrucción para cambier a modo 4.
Antulius 9:26618de199fc 591 *+ En el modo de 4 bits, la pantalla LCD espera el MSN primero, seguido del LSN.
Antulius 9:26618de199fc 592 *+----------------------------------------------------------------------------*
Antulius 9:26618de199fc 593 *+
Antulius 9:26618de199fc 594 *+ Powered by
Antulius 9:26618de199fc 595 *+
Antulius 9:26618de199fc 596 *+ T H E A N T U L I U ' S T E A M R&D Unltd
Antulius 9:26618de199fc 597 *+
Antulius 9:26618de199fc 598 *+ Research, Development, Systems, Equipment, Support & Spare Parts.
Antulius 9:26618de199fc 599 *+ (C) Copyright 1989-2019, All Rights Reserved
Antulius 9:26618de199fc 600 *+
Antulius 9:26618de199fc 601 *+ Welcome to The Beaners Proyect Community!
Antulius 9:26618de199fc 602 *+----------------------------------------------------------------------------*/
Antulius 9:26618de199fc 603
Antulius 7:af295ac5f904 604 /* END Mbed */