Prueba todas las maneras de configurar una pantalla LCD alfanumérica en diferentes puertos
Dependencies: FRDM_TSI TextLCD mbed
main.cpp@8:39219ab1efd9, 2019-05-08 (annotated)
- Committer:
- Antulius
- Date:
- Wed May 08 07:39:20 2019 +0000
- Revision:
- 8:39219ab1efd9
- Parent:
- 7:af295ac5f904
- Child:
- 9:26618de199fc
Who changed what in which revision?
User | Revision | Line number | New 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 | 6:333a2763ad29 | 10 | ** Este proyecto hace... |
Antulius | 6:333a2763ad29 | 11 | ** This module contains user's application code. |
Antulius | 6:333a2763ad29 | 12 | ** Componentes : GPIO, Timer, etc . |
Antulius | 6:333a2763ad29 | 13 | ** Configuraciones : Includes, Stacks y Drivers externos |
Antulius | 6:333a2763ad29 | 14 | ** Autores : |
Antulius | 6:333a2763ad29 | 15 | ** ATEAM Development Group: |
Antulius | 6:333a2763ad29 | 16 | ** - Antulio Morgado Valle |
Antulius | 6:333a2763ad29 | 17 | ** |
Antulius | 6:333a2763ad29 | 18 | ** Versión : Beta |
Antulius | 6:333a2763ad29 | 19 | ** Revisión : A |
Antulius | 6:333a2763ad29 | 20 | ** Release : 0 |
Antulius | 8:39219ab1efd9 | 21 | ** Date : 20/10/2019 |
Antulius | 6:333a2763ad29 | 22 | ** Bugs & Fixes : |
Antulius | 6:333a2763ad29 | 23 | ** Added support for Led_RGB |
Antulius | 6:333a2763ad29 | 24 | ** 22/09/2018 |
Antulius | 6:333a2763ad29 | 25 | ** Added LCD Menu, Beta version (with bugs) |
Antulius | 6:333a2763ad29 | 26 | ** |
Antulius | 6:333a2763ad29 | 27 | ** ###########################################################################*/ |
Antulius | 6:333a2763ad29 | 28 | /* |
Antulius | 6:333a2763ad29 | 29 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
Antulius | 6:333a2763ad29 | 30 | : Includes |
Antulius | 6:333a2763ad29 | 31 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
Antulius | 6:333a2763ad29 | 32 | */ |
emilmont | 0:0f00f07ebde0 | 33 | #include "mbed.h" |
Antulius | 8:39219ab1efd9 | 34 | #include "I2C.h" |
Antulius | 8:39219ab1efd9 | 35 | #include "SPI.h" |
Antulius | 8:39219ab1efd9 | 36 | #include "Serial.h" |
Antulius | 8:39219ab1efd9 | 37 | #include "TextLCD.h" |
Antulius | 8:39219ab1efd9 | 38 | #include "stdio.h" |
Antulius | 6:333a2763ad29 | 39 | /* |
Antulius | 6:333a2763ad29 | 40 | :............................................................................... |
Antulius | 6:333a2763ad29 | 41 | : Definiciones |
Antulius | 6:333a2763ad29 | 42 | :............................................................................... |
Antulius | 6:333a2763ad29 | 43 | */ |
Antulius | 8:39219ab1efd9 | 44 | #define Ticker_Rate 1000 // Periodo de interrupción (us) |
Antulius | 8:39219ab1efd9 | 45 | #define LCD_Filas 4 // Número de Renglones del LCD |
Antulius | 8:39219ab1efd9 | 46 | #define LCD_Columnas 20 // Número de Caracteres x Renglón del LCD |
Antulius | 8:39219ab1efd9 | 47 | #define Buzz_On 1 // Estado para Buzzer Encendido |
Antulius | 8:39219ab1efd9 | 48 | #define Buzz_Off 0 // Estado para Buzzer Apagado |
Antulius | 8:39219ab1efd9 | 49 | #define on 0 // Estado para botón presionado |
Antulius | 8:39219ab1efd9 | 50 | #define off 1 // Estado para botón sin presionar |
Antulius | 8:39219ab1efd9 | 51 | #define hold 2 // Estado para botón mantenido presionado |
Antulius | 8:39219ab1efd9 | 52 | #define release 3 // Estado para botón al liberarse |
Antulius | 6:333a2763ad29 | 53 | /* |
Antulius | 6:333a2763ad29 | 54 | +------------------------------------------------------------------------------- |
Antulius | 6:333a2763ad29 | 55 | | Configuración de Puertos |
Antulius | 6:333a2763ad29 | 56 | +------------------------------------------------------------------------------- |
Antulius | 6:333a2763ad29 | 57 | */ |
Antulius | 8:39219ab1efd9 | 58 | Ticker TimerInt; // Inicializa la Interrupción por Timer |
Antulius | 8:39219ab1efd9 | 59 | DigitalOut led_monitor(LED2); // Inicializa el LED Monitor |
Antulius | 8:39219ab1efd9 | 60 | DigitalOut buzzer (PTE31); // Inicializa el Buzzer Piezo Eléctrico |
Antulius | 8:39219ab1efd9 | 61 | //PwmOut buzzer (PTE31); // PWM Control del Elemento Calefactor |
Antulius | 8:39219ab1efd9 | 62 | /* |
Antulius | 8:39219ab1efd9 | 63 | ** ------------------------------------------------------------------- |
Antulius | 8:39219ab1efd9 | 64 | ** Inicialización de los Pines de Funciones Especiales. |
Antulius | 8:39219ab1efd9 | 65 | ** ------------------------------------------------------------------- |
Antulius | 8:39219ab1efd9 | 66 | */ |
Antulius | 8:39219ab1efd9 | 67 | |
Antulius | 8:39219ab1efd9 | 68 | /************************************************* |
Antulius | 8:39219ab1efd9 | 69 | * Host PC Communication channels |
Antulius | 8:39219ab1efd9 | 70 | **************************************************/ |
Antulius | 7:af295ac5f904 | 71 | Serial terminal(USBTX, USBRX); // Inicializa la Comunicación Serial a la PC |
Antulius | 8:39219ab1efd9 | 72 | //Serial terminal(PTA2,PTA1); // Terminal Serial |
Antulius | 8:39219ab1efd9 | 73 | //Serial terminal(PTE0, PTE1); // Tx, Rx Using MAX3232 or BlueTooth |
Antulius | 8:39219ab1efd9 | 74 | |
Antulius | 8:39219ab1efd9 | 75 | /************************************************* |
Antulius | 8:39219ab1efd9 | 76 | * Bluetooth Communication support |
Antulius | 8:39219ab1efd9 | 77 | ************************************************** |
Antulius | 8:39219ab1efd9 | 78 | * Initialize the library with the numbers of the interface pins |
Antulius | 8:39219ab1efd9 | 79 | * Board Freedom FRDM-KL46Z |
Antulius | 8:39219ab1efd9 | 80 | * IDE Mbed On Line Compiler |
Antulius | 8:39219ab1efd9 | 81 | ***************************************************/ |
Antulius | 8:39219ab1efd9 | 82 | Serial bluetooth(PTE0, PTE1); // Tx, Rx |
Antulius | 8:39219ab1efd9 | 83 | |
Antulius | 8:39219ab1efd9 | 84 | /************************************************* |
Antulius | 8:39219ab1efd9 | 85 | * I2C Communication |
Antulius | 8:39219ab1efd9 | 86 | ************************************************** |
Antulius | 8:39219ab1efd9 | 87 | * Initialize the library with the numbers of the interface pins |
Antulius | 8:39219ab1efd9 | 88 | * Board Freedom FRDM-KL46Z |
Antulius | 8:39219ab1efd9 | 89 | * IDE Mbed On Line Compiler |
Antulius | 8:39219ab1efd9 | 90 | * LCD I2C PCF8574A |
Antulius | 8:39219ab1efd9 | 91 | * Pin Board LCD |
Antulius | 8:39219ab1efd9 | 92 | * I2C_SCL SCL (white) + resistance pull-up 4.7k |
Antulius | 8:39219ab1efd9 | 93 | * I2C_SDA SDA (blue) + resistance pull-up 4.7k |
Antulius | 8:39219ab1efd9 | 94 | * 5V 5V (red) |
Antulius | 8:39219ab1efd9 | 95 | * GND GND (black) |
Antulius | 8:39219ab1efd9 | 96 | ***************************************************/ |
Antulius | 8:39219ab1efd9 | 97 | //I2C i2c_lcd(PTC2,PTC1); // SDA, SCL |
Antulius | 8:39219ab1efd9 | 98 | |
Antulius | 8:39219ab1efd9 | 99 | /************************************************* |
Antulius | 8:39219ab1efd9 | 100 | * SPI Communication |
Antulius | 8:39219ab1efd9 | 101 | ************************************************** |
Antulius | 8:39219ab1efd9 | 102 | * Initialize the library with the numbers of the interface pins |
Antulius | 8:39219ab1efd9 | 103 | * Board Freedom FRDM-KL46Z |
Antulius | 8:39219ab1efd9 | 104 | * IDE Mbed On Line Compiler |
Antulius | 8:39219ab1efd9 | 105 | * LCD SPI SN74HC595 |
Antulius | 8:39219ab1efd9 | 106 | * Pin Board LCD |
Antulius | 8:39219ab1efd9 | 107 | * SPI_MOSI SER (white) |
Antulius | 8:39219ab1efd9 | 108 | * SPI_MISO none (blue) |
Antulius | 8:39219ab1efd9 | 109 | * SPI_CLK SRCLK |
Antulius | 8:39219ab1efd9 | 110 | * SPI_PCS RCLK |
Antulius | 8:39219ab1efd9 | 111 | * 5V 5V (red) |
Antulius | 8:39219ab1efd9 | 112 | * GND GND (black) |
Antulius | 8:39219ab1efd9 | 113 | ***************************************************/ |
Antulius | 8:39219ab1efd9 | 114 | SPI spi_lcd(PTD6,PTD7,PTD5,PTD4); // MOSI, MISO, SCLK, SSEL |
Antulius | 8:39219ab1efd9 | 115 | |
Antulius | 8:39219ab1efd9 | 116 | /************************************************* |
Antulius | 8:39219ab1efd9 | 117 | * LCD instantiation |
Antulius | 8:39219ab1efd9 | 118 | **************************************************/ |
Antulius | 8:39219ab1efd9 | 119 | //TextLCD LCD(PTC5, PTC6, PTC8, PTC9, PTC10, PCT11, TextLCD::LCD20x2); // 4bit bus: rs, e, d4-d7 |
Antulius | 8:39219ab1efd9 | 120 | //TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4); // I2C bus, PCF8574A Arduino Shield, LCD Type |
Antulius | 8:39219ab1efd9 | 121 | TextLCD_SPI lcd(&spi_lcd, PTD4, TextLCD::LCD16x4, TextLCD::HD44780); // SPI bus, SN74595 expander, CS pin, LCD Type |
Antulius | 8:39219ab1efd9 | 122 | |
Antulius | 6:333a2763ad29 | 123 | /* |
Antulius | 8:39219ab1efd9 | 124 | ** =================================================================== |
Antulius | 8:39219ab1efd9 | 125 | ** Variables Globales del Programa |
Antulius | 8:39219ab1efd9 | 126 | ** =================================================================== |
Antulius | 6:333a2763ad29 | 127 | */ |
Antulius | 7:af295ac5f904 | 128 | uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms) |
Antulius | 7:af295ac5f904 | 129 | uint16_t counter=250; // Cuenta inicial de 250us |
Antulius | 8:39219ab1efd9 | 130 | int16_t N_Interrupciones; // Contador de Overrunig |
Antulius | 6:333a2763ad29 | 131 | /* |
Antulius | 6:333a2763ad29 | 132 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Antulius | 7:af295ac5f904 | 133 | | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción |
Antulius | 6:333a2763ad29 | 134 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Antulius | 6:333a2763ad29 | 135 | */ |
Antulius | 8:39219ab1efd9 | 136 | void setup(void); // Rutina de Inicialización para el Hardware |
Antulius | 8:39219ab1efd9 | 137 | void Ticker_OnInterrupt(void); // Rutina de Atención para el Ticker |
Antulius | 8:39219ab1efd9 | 138 | void buzzer_beep(void); // Pitidos del Buzzer |
Antulius | 8:39219ab1efd9 | 139 | //void I2C_scanner(void); // Busca dispositivos conectados al bus I2C |
Antulius | 8:39219ab1efd9 | 140 | void test_LCD(void); // Prueba la operación del LCD |
Antulius | 8:39219ab1efd9 | 141 | void blinking_led(void); // Rutina de Parpadeo del Led monitor |
Antulius | 6:333a2763ad29 | 142 | /* |
Antulius | 6:333a2763ad29 | 143 | #=============================================================================== |
Antulius | 6:333a2763ad29 | 144 | | |
Antulius | 6:333a2763ad29 | 145 | | P R O G R A M A P R I N C I P A L |
Antulius | 6:333a2763ad29 | 146 | | |
Antulius | 6:333a2763ad29 | 147 | #=============================================================================== |
Antulius | 6:333a2763ad29 | 148 | */ |
Antulius | 6:333a2763ad29 | 149 | int main() |
Antulius | 6:333a2763ad29 | 150 | { |
Antulius | 6:333a2763ad29 | 151 | // Inicialización de variables, puertos e interrupciones |
Antulius | 8:39219ab1efd9 | 152 | terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial. |
Antulius | 7:af295ac5f904 | 153 | terminal.printf(" System is Wake Up!.\n\r"); |
Antulius | 8:39219ab1efd9 | 154 | setup(); //Inicializa el Hardware Principal |
Antulius | 7:af295ac5f904 | 155 | |
Antulius | 7:af295ac5f904 | 156 | while (true) // El Lazo del Programa principal está aquí !!! |
Antulius | 6:333a2763ad29 | 157 | { |
Antulius | 8:39219ab1efd9 | 158 | lcd.cls(); |
Antulius | 8:39219ab1efd9 | 159 | lcd.locate(0,0); |
Antulius | 8:39219ab1efd9 | 160 | lcd.printf("Bienvenidos Sean"); // El LCD saluda al Mundo |
Antulius | 8:39219ab1efd9 | 161 | lcd.printf(" a la \n"); // y a la |
Antulius | 8:39219ab1efd9 | 162 | // lcd.setInvert(on); |
Antulius | 8:39219ab1efd9 | 163 | lcd.printf("Gloriosa ESIME !\n"); // Gloriosa ESIME ! |
Antulius | 8:39219ab1efd9 | 164 | // lcd.setInvert(off); |
Antulius | 8:39219ab1efd9 | 165 | lcd.locate(0,4); |
Antulius | 8:39219ab1efd9 | 166 | lcd.printf("Flashings: %d",N_Interrupciones); // Led Flasings Transcurridos |
Antulius | 8:39219ab1efd9 | 167 | wait(0.5); |
Antulius | 8:39219ab1efd9 | 168 | |
Antulius | 8:39219ab1efd9 | 169 | // Blinking_Led(); // Parapadeo del LED por Software |
emilmont | 0:0f00f07ebde0 | 170 | } |
Antulius | 6:333a2763ad29 | 171 | } |
Antulius | 7:af295ac5f904 | 172 | /* END main */ |
Antulius | 7:af295ac5f904 | 173 | |
Antulius | 7:af295ac5f904 | 174 | /* |
Antulius | 7:af295ac5f904 | 175 | ................................................................................ |
Antulius | 7:af295ac5f904 | 176 | : Rutinas de los Vectores de Interrupción |
Antulius | 7:af295ac5f904 | 177 | ................................................................................ |
Antulius | 7:af295ac5f904 | 178 | */ |
Antulius | 8:39219ab1efd9 | 179 | void Ticker_OnInterrupt() // Rutina de Atención al Ticker |
Antulius | 7:af295ac5f904 | 180 | { |
Antulius | 7:af295ac5f904 | 181 | counter--; // Aquí va la Rutina de Servicio ! |
Antulius | 7:af295ac5f904 | 182 | if (!counter) |
Antulius | 7:af295ac5f904 | 183 | { |
Antulius | 7:af295ac5f904 | 184 | terminal.printf("Counter Finish! \r\n"); |
Antulius | 7:af295ac5f904 | 185 | led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (Toggle the LED) |
Antulius | 8:39219ab1efd9 | 186 | N_Interrupciones++; |
Antulius | 7:af295ac5f904 | 187 | counter = Rate; // Restablece el contador |
Antulius | 8:39219ab1efd9 | 188 | } |
Antulius | 7:af295ac5f904 | 189 | } |
Antulius | 7:af295ac5f904 | 190 | /* END Events */ |
Antulius | 7:af295ac5f904 | 191 | /* |
Antulius | 7:af295ac5f904 | 192 | ________________________________________________________________________________ |
Antulius | 7:af295ac5f904 | 193 | | |
Antulius | 7:af295ac5f904 | 194 | | Funciones Prototipo |
Antulius | 7:af295ac5f904 | 195 | |_______________________________________________________________________________ |
Antulius | 7:af295ac5f904 | 196 | */ |
Antulius | 7:af295ac5f904 | 197 | // Las Funciones Prototipo van aquí ! |
Antulius | 8:39219ab1efd9 | 198 | void setup() // Inicialización del Hardware del Sistema |
Antulius | 8:39219ab1efd9 | 199 | { |
Antulius | 8:39219ab1efd9 | 200 | /* Inicia la comunicación la Terminal */ /* 115200 Bauds, 8 bits, 1 stop, N parity */ |
Antulius | 8:39219ab1efd9 | 201 | terminal.baud(115200); // Se inicia la comunicación serial. |
Antulius | 8:39219ab1efd9 | 202 | terminal.printf(" System is Wake Up!.\n\r"); |
Antulius | 8:39219ab1efd9 | 203 | |
Antulius | 8:39219ab1efd9 | 204 | /* Inicialización del Bluetooth */ |
Antulius | 8:39219ab1efd9 | 205 | bluetooth.baud(115200); // Se inicia la comunicación Bluetooth. |
Antulius | 8:39219ab1efd9 | 206 | // bluetooth.scanf("%s", buf); //Lee un carácter desde el Bluetooth |
Antulius | 8:39219ab1efd9 | 207 | // bluetooth.printf("recv: %s", buf); //Hace eco al Bluetooth |
Antulius | 8:39219ab1efd9 | 208 | // terminal.printf("recv: %s\r\n", buf); //Imprime en la Terminal el caracter recibido |
Antulius | 8:39219ab1efd9 | 209 | bluetooth.printf("Bluetooth Starting OK! ... \n\r"); |
Antulius | 8:39219ab1efd9 | 210 | terminal.printf("Bluetooth Starting OK! ... \n\r"); |
Antulius | 8:39219ab1efd9 | 211 | /* Prueba del Buzzer */ |
Antulius | 8:39219ab1efd9 | 212 | terminal.printf("Testing Buzzer... \n\r"); |
Antulius | 8:39219ab1efd9 | 213 | buzzer_beep(); |
Antulius | 8:39219ab1efd9 | 214 | |
Antulius | 8:39219ab1efd9 | 215 | /* Configufración del Display LCD */ /* Mucho OjO !!! */ |
Antulius | 8:39219ab1efd9 | 216 | |
Antulius | 8:39219ab1efd9 | 217 | /* LCD Utilizando el SPI */ |
Antulius | 8:39219ab1efd9 | 218 | spi_lcd.frequency(1000000); // Frecuencia de operación para el SPI |
Antulius | 8:39219ab1efd9 | 219 | spi_lcd.format(8,0); // Modo de Operación para el SPI |
Antulius | 8:39219ab1efd9 | 220 | |
Antulius | 8:39219ab1efd9 | 221 | /* LCD Utilizando el I2C */ |
Antulius | 8:39219ab1efd9 | 222 | // I2C_scanner(); // Busca Dispositivos I2C conectados al Bus |
Antulius | 8:39219ab1efd9 | 223 | /* i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz) |
Antulius | 8:39219ab1efd9 | 224 | i2c_lcd.start(); // Inicio de operación para el I2C |
Antulius | 8:39219ab1efd9 | 225 | // lcd.setBacklight(LightOn ); // Enciende la luz de fondo del LCD |
Antulius | 8:39219ab1efd9 | 226 | terminal.printf("I2C Initialized...\n\r"); |
Antulius | 8:39219ab1efd9 | 227 | */ |
Antulius | 8:39219ab1efd9 | 228 | /* Prueba de operación del LCD */ |
Antulius | 8:39219ab1efd9 | 229 | terminal.printf("LCD Test, please wait...\n\r"); |
Antulius | 8:39219ab1efd9 | 230 | test_LCD(); // Rutina de pueba del LCD |
Antulius | 8:39219ab1efd9 | 231 | terminal.printf("LCD Initialized Succesfuly...\n\r"); |
Antulius | 8:39219ab1efd9 | 232 | /* Arranque de la interrupción por el Ticker */ |
Antulius | 8:39219ab1efd9 | 233 | terminal.printf("Ticker Starting Now...\n\r"); |
Antulius | 8:39219ab1efd9 | 234 | TimerInt.attach_us(&Ticker_OnInterrupt, Ticker_Rate); // Le asigna el periodo de barrido de 1ms (Ticker_Rate=1000) |
Antulius | 8:39219ab1efd9 | 235 | } |
Antulius | 8:39219ab1efd9 | 236 | |
Antulius | 8:39219ab1efd9 | 237 | void test_LCD() |
Antulius | 8:39219ab1efd9 | 238 | { |
Antulius | 8:39219ab1efd9 | 239 | lcd.cls(); |
Antulius | 8:39219ab1efd9 | 240 | lcd.printf("Hello World!\n"); // El LCD saluda al Mundo! |
Antulius | 8:39219ab1efd9 | 241 | lcd.setInvert(on); |
Antulius | 8:39219ab1efd9 | 242 | lcd.printf("Hola Mundo!\n"); // El LCD saluda al Mundo! |
Antulius | 8:39219ab1efd9 | 243 | lcd.setInvert(off); |
Antulius | 8:39219ab1efd9 | 244 | lcd.printf("Ciao Mondo!\n"); // El LCD saluda al Mundo! |
Antulius | 8:39219ab1efd9 | 245 | lcd.setInvert(on); |
Antulius | 8:39219ab1efd9 | 246 | lcd.printf("Bonjour le Monde"); // El LCD saluda al Mundo! |
Antulius | 8:39219ab1efd9 | 247 | wait(10); |
Antulius | 8:39219ab1efd9 | 248 | lcd.cls(); // Limpia el Display LCD |
Antulius | 8:39219ab1efd9 | 249 | lcd.setBacklight(TextLCD::LightOff); // Apaga la Iluminación de Fondo |
Antulius | 8:39219ab1efd9 | 250 | Timer Elpased_Time; //Inicializa el Tiempo a Transcurrir |
Antulius | 8:39219ab1efd9 | 251 | Elpased_Time.start(); |
Antulius | 8:39219ab1efd9 | 252 | for (int row=0; row<lcd.rows(); row++)// Prueba toda la Pantalla |
Antulius | 8:39219ab1efd9 | 253 | { |
Antulius | 8:39219ab1efd9 | 254 | uint16_t col=0; |
Antulius | 8:39219ab1efd9 | 255 | lcd.putc('0' + row); |
Antulius | 8:39219ab1efd9 | 256 | for (col=1; col<lcd.columns()-1; col++) |
Antulius | 8:39219ab1efd9 | 257 | { |
Antulius | 8:39219ab1efd9 | 258 | lcd.putc('*'); // Llena lalinea con el carácter "*" |
Antulius | 8:39219ab1efd9 | 259 | } |
Antulius | 8:39219ab1efd9 | 260 | lcd.putc('+'); // Al final pone el carácter "+" |
Antulius | 8:39219ab1efd9 | 261 | } |
Antulius | 8:39219ab1efd9 | 262 | Elpased_Time.start(); // Calcula el tiempo transcurrido |
Antulius | 8:39219ab1efd9 | 263 | terminal.printf("All my hard work took %f sec\r\n", Elpased_Time.read()); |
Antulius | 8:39219ab1efd9 | 264 | wait(1); |
Antulius | 8:39219ab1efd9 | 265 | terminal.printf("LCD Display and TextLCD Enhanced Test Completed.\n\r"); |
Antulius | 8:39219ab1efd9 | 266 | lcd.cls(); |
Antulius | 8:39219ab1efd9 | 267 | lcd.setCursor(TextLCD::CurOff_BlkOn); // |
Antulius | 8:39219ab1efd9 | 268 | // Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780. |
Antulius | 8:39219ab1efd9 | 269 | // They are defined by a 5x7 bitpattern. |
Antulius | 8:39219ab1efd9 | 270 | lcd.setUDC(0, (char *) udc_0); // Muestra el cursor |> |
Antulius | 8:39219ab1efd9 | 271 | lcd.putc(0); |
Antulius | 8:39219ab1efd9 | 272 | terminal.printf("LCD Starting OK! ... \n\r"); |
Antulius | 8:39219ab1efd9 | 273 | } |
Antulius | 8:39219ab1efd9 | 274 | |
Antulius | 8:39219ab1efd9 | 275 | void buzzer_beep() |
Antulius | 8:39219ab1efd9 | 276 | { |
Antulius | 8:39219ab1efd9 | 277 | buzzer = Buzz_On; |
Antulius | 8:39219ab1efd9 | 278 | wait_ms(750); |
Antulius | 8:39219ab1efd9 | 279 | buzzer = Buzz_Off; |
Antulius | 8:39219ab1efd9 | 280 | wait_ms(125); |
Antulius | 8:39219ab1efd9 | 281 | buzzer = Buzz_On; |
Antulius | 8:39219ab1efd9 | 282 | wait_ms(250); |
Antulius | 8:39219ab1efd9 | 283 | buzzer = Buzz_Off; |
Antulius | 8:39219ab1efd9 | 284 | wait_ms(125); |
Antulius | 8:39219ab1efd9 | 285 | buzzer = Buzz_On; |
Antulius | 8:39219ab1efd9 | 286 | wait_ms(500); |
Antulius | 8:39219ab1efd9 | 287 | buzzer = Buzz_Off; |
Antulius | 8:39219ab1efd9 | 288 | } |
Antulius | 8:39219ab1efd9 | 289 | |
Antulius | 8:39219ab1efd9 | 290 | void blinking_led() // Software Blinking routine for LED |
Antulius | 7:af295ac5f904 | 291 | { |
Antulius | 7:af295ac5f904 | 292 | // The on-board LED is connected, via a resistor, to +3.3V (not to GND). |
Antulius | 7:af295ac5f904 | 293 | // So to turn the LED on or off we have to set it to 0 or 1 respectively |
Antulius | 7:af295ac5f904 | 294 | led_monitor = 0; // turn the LED on |
Antulius | 7:af295ac5f904 | 295 | wait_ms(200); // 200 millisecond |
Antulius | 7:af295ac5f904 | 296 | led_monitor = 1; // turn the LED off |
Antulius | 7:af295ac5f904 | 297 | wait_ms(1000); // 1000 millisecond |
Antulius | 7:af295ac5f904 | 298 | } |
Antulius | 8:39219ab1efd9 | 299 | /* |
Antulius | 8:39219ab1efd9 | 300 | void I2C_scanner() |
Antulius | 8:39219ab1efd9 | 301 | { |
Antulius | 8:39219ab1efd9 | 302 | terminal.printf ("I2C scanner. Scanning ..."); |
Antulius | 8:39219ab1efd9 | 303 | uint8_t count = 0; |
Antulius | 8:39219ab1efd9 | 304 | char test[] = { 0b00000000, 0b00000000, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=DB6=DB7=0 en datos |
Antulius | 8:39219ab1efd9 | 305 | 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos, |
Antulius | 8:39219ab1efd9 | 306 | 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos, |
Antulius | 8:39219ab1efd9 | 307 | 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos, |
Antulius | 8:39219ab1efd9 | 308 | 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos, |
Antulius | 8:39219ab1efd9 | 309 | 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos, |
Antulius | 8:39219ab1efd9 | 310 | 0b01100110, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=N=1 2 líneas, DB6=F=0 5x7puntos, |
Antulius | 8:39219ab1efd9 | 311 | 0b01100000, 0b00100000, // => Display ON/OFF Control. |
Antulius | 8:39219ab1efd9 | 312 | 0b01100001, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=1 (Display off, cursor off, blink off) |
Antulius | 8:39219ab1efd9 | 313 | 0b01100000, 0b00100000, // => Display Clear. |
Antulius | 8:39219ab1efd9 | 314 | 0b01101000, 0b00101000};// RS=0, EN=1,0, LED+=1, NC, DB4=1 en datos, (Cursor Home}; // Patrón de Prueba |
Antulius | 8:39219ab1efd9 | 315 | |
Antulius | 8:39219ab1efd9 | 316 | // char test[2] = {0x55,0xAA};// Patrón de Prueba |
Antulius | 8:39219ab1efd9 | 317 | i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz) |
Antulius | 8:39219ab1efd9 | 318 | i2c_lcd.start(); // Inicio de operación para el I2C |
Antulius | 8:39219ab1efd9 | 319 | for (int i = 8; i < 128; i++) |
Antulius | 8:39219ab1efd9 | 320 | { |
Antulius | 8:39219ab1efd9 | 321 | uint8_t acknoledge = i2c_lcd.write (i,test,22,1); //(dirección, ap_datos, N°_datos, repetición) |
Antulius | 8:39219ab1efd9 | 322 | if (acknoledge == 0) |
Antulius | 8:39219ab1efd9 | 323 | { |
Antulius | 8:39219ab1efd9 | 324 | terminal.printf ("\n\rFound address: "); |
Antulius | 8:39219ab1efd9 | 325 | terminal.printf ("%u DEC",i); // Valor de la dirección en Decimal |
Antulius | 8:39219ab1efd9 | 326 | terminal.printf (" (0x%x HEX)\n\r",i); // Valor de la dirección en Hexadecimal |
Antulius | 8:39219ab1efd9 | 327 | // terminal.printf (" (0x%hd HEX)\n\r",i); // Valor de la dirección en Hexadecimal |
Antulius | 8:39219ab1efd9 | 328 | count++; |
Antulius | 8:39219ab1efd9 | 329 | |
Antulius | 8:39219ab1efd9 | 330 | wait (1); // maybe unneeded? |
Antulius | 8:39219ab1efd9 | 331 | } // end of good response |
Antulius | 8:39219ab1efd9 | 332 | led_monitor = !led_monitor; // Parapadeo del LED |
Antulius | 8:39219ab1efd9 | 333 | } // end of for loop |
Antulius | 8:39219ab1efd9 | 334 | led_monitor = 1; // Apaga el LED |
Antulius | 8:39219ab1efd9 | 335 | i2c_lcd.stop(); // Fin de operación para el I2C |
Antulius | 8:39219ab1efd9 | 336 | terminal.printf ("\n\rDone.\n\r"); |
Antulius | 8:39219ab1efd9 | 337 | terminal.printf ("Found %d Device(s)\n\r",count); |
Antulius | 8:39219ab1efd9 | 338 | } // end of setup |
Antulius | 8:39219ab1efd9 | 339 | */ |
Antulius | 7:af295ac5f904 | 340 | |
Antulius | 7:af295ac5f904 | 341 | /* END Program */ |
Antulius | 7:af295ac5f904 | 342 | |
Antulius | 7:af295ac5f904 | 343 | /* END Mbed */ |