Luis Silvio Cordova Rivadeneira
/
UPSM_TextLCD
Manejo de pantallas de texto con varias interfaces de comunicación
main.cpp@6:8b78e3cddd78, 2020-02-12 (annotated)
- Committer:
- lscordovar
- Date:
- Wed Feb 12 21:51:46 2020 +0000
- Revision:
- 6:8b78e3cddd78
- Parent:
- 5:2e4e5085d597
Ejemplos de uso de la libreria LCD pro I2C
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wim | 0:a75049de1a82 | 1 | #include "mbed.h" |
wim | 0:a75049de1a82 | 2 | #include "TextLCD.h" |
lscordovar | 5:2e4e5085d597 | 3 | |
lscordovar | 5:2e4e5085d597 | 4 | Serial pc(PA_2,PA_3); // tx, rx |
lscordovar | 6:8b78e3cddd78 | 5 | I2C i2c_lcd(PB_9, PB_8); // SDA, SCL |
lscordovar | 6:8b78e3cddd78 | 6 | TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4); |
lscordovar | 5:2e4e5085d597 | 7 | |
lscordovar | 6:8b78e3cddd78 | 8 | /* |
lscordovar | 6:8b78e3cddd78 | 9 | Para usar su LCD con el PCF8574 o el PCF8574A deben cambiar en la linea 73 del |
lscordovar | 6:8b78e3cddd78 | 10 | archivo TextLCD_Config.h que esta en la libreria adjunta esto: |
lscordovar | 6:8b78e3cddd78 | 11 | #define DFROBOT 0 |
lscordovar | 6:8b78e3cddd78 | 12 | Por esto: |
lscordovar | 6:8b78e3cddd78 | 13 | #define DFROBOT 1 |
lscordovar | 6:8b78e3cddd78 | 14 | |
lscordovar | 6:8b78e3cddd78 | 15 | Pueden probar tambien estas otras opciones, me funciona bien casi para todas |
lscordovar | 6:8b78e3cddd78 | 16 | excepto las que tienen un comentario con un //no |
lscordovar | 5:2e4e5085d597 | 17 | |
lscordovar | 6:8b78e3cddd78 | 18 | #define DEFAULT 0//no |
lscordovar | 6:8b78e3cddd78 | 19 | #define ADAFRUIT 0//no |
lscordovar | 6:8b78e3cddd78 | 20 | #define DFROBOT 0 |
lscordovar | 6:8b78e3cddd78 | 21 | #define LCM1602 0 |
lscordovar | 6:8b78e3cddd78 | 22 | #define YWROBOT 0 |
lscordovar | 6:8b78e3cddd78 | 23 | #define GYLCD 0//no |
lscordovar | 6:8b78e3cddd78 | 24 | #define MJKDZ 0//no |
lscordovar | 6:8b78e3cddd78 | 25 | #define SYDZ 1 |
lscordovar | 6:8b78e3cddd78 | 26 | #define WIDEHK 0//no |
lscordovar | 6:8b78e3cddd78 | 27 | #define LCDPLUG 0//no |
lscordovar | 6:8b78e3cddd78 | 28 | */ |
wim | 0:a75049de1a82 | 29 | |
lscordovar | 6:8b78e3cddd78 | 30 | //Para el ejemplo presente use #define SYDZ 1 |
lscordovar | 6:8b78e3cddd78 | 31 | //esto debe ir solo en el archivo mencionado |
lscordovar | 6:8b78e3cddd78 | 32 | |
lscordovar | 5:2e4e5085d597 | 33 | |
lscordovar | 5:2e4e5085d597 | 34 | int main() |
lscordovar | 5:2e4e5085d597 | 35 | { |
lscordovar | 5:2e4e5085d597 | 36 | Timer t; |
lscordovar | 5:2e4e5085d597 | 37 | |
lscordovar | 5:2e4e5085d597 | 38 | pc.printf("TextLCD Enhanced Test. Columns=%d, Rows=%d\n\r", lcd.columns(), lcd.rows()); |
lscordovar | 5:2e4e5085d597 | 39 | |
lscordovar | 5:2e4e5085d597 | 40 | for (int row=0; row<lcd.rows(); row++) { |
lscordovar | 5:2e4e5085d597 | 41 | int col=0; |
wim | 0:a75049de1a82 | 42 | |
lscordovar | 5:2e4e5085d597 | 43 | pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row)); |
wim | 4:a3e4bb2053cb | 44 | // lcd.putc('-'); |
lscordovar | 5:2e4e5085d597 | 45 | lcd.putc('0' + row); |
lscordovar | 5:2e4e5085d597 | 46 | |
lscordovar | 5:2e4e5085d597 | 47 | for (col=1; col<lcd.columns()-1; col++) { |
lscordovar | 5:2e4e5085d597 | 48 | lcd.putc('*'); |
lscordovar | 5:2e4e5085d597 | 49 | } |
lscordovar | 5:2e4e5085d597 | 50 | |
lscordovar | 5:2e4e5085d597 | 51 | pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row)); |
lscordovar | 5:2e4e5085d597 | 52 | lcd.putc('+'); |
wim | 4:a3e4bb2053cb | 53 | } |
lscordovar | 5:2e4e5085d597 | 54 | wait(1); |
lscordovar | 5:2e4e5085d597 | 55 | // Fill screen again and time it |
lscordovar | 5:2e4e5085d597 | 56 | t.start(); |
wim | 0:a75049de1a82 | 57 | |
lscordovar | 5:2e4e5085d597 | 58 | for (int row=0; row<lcd.rows(); row++) { |
lscordovar | 5:2e4e5085d597 | 59 | int col=0; |
lscordovar | 5:2e4e5085d597 | 60 | |
lscordovar | 5:2e4e5085d597 | 61 | lcd.putc('0' + row); |
wim | 3:f238b4f7874f | 62 | |
lscordovar | 5:2e4e5085d597 | 63 | for (col=1; col<lcd.columns()-1; col++) { |
lscordovar | 5:2e4e5085d597 | 64 | lcd.putc('*'); |
lscordovar | 5:2e4e5085d597 | 65 | } |
lscordovar | 5:2e4e5085d597 | 66 | |
lscordovar | 5:2e4e5085d597 | 67 | lcd.putc('+'); |
wim | 4:a3e4bb2053cb | 68 | } |
lscordovar | 5:2e4e5085d597 | 69 | t.stop(); |
lscordovar | 5:2e4e5085d597 | 70 | pc.printf("All my hard work took %f sec\r\n", t.read()); |
lscordovar | 5:2e4e5085d597 | 71 | wait(1); |
lscordovar | 5:2e4e5085d597 | 72 | |
wim | 1:ef419b21167d | 73 | |
wim | 4:a3e4bb2053cb | 74 | // Show cursor as blinking character |
lscordovar | 5:2e4e5085d597 | 75 | lcd.setCursor(TextLCD::CurOff_BlkOn); |
lscordovar | 5:2e4e5085d597 | 76 | |
wim | 4:a3e4bb2053cb | 77 | // Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780. |
lscordovar | 5:2e4e5085d597 | 78 | // They are defined by a 5x7 bitpattern. |
lscordovar | 5:2e4e5085d597 | 79 | lcd.setUDC(0, (char *) udc_0); // Show |> |
lscordovar | 5:2e4e5085d597 | 80 | lcd.putc(0); |
lscordovar | 5:2e4e5085d597 | 81 | lcd.setUDC(1, (char *) udc_1); // Show <| |
lscordovar | 5:2e4e5085d597 | 82 | lcd.putc(1); |
lscordovar | 5:2e4e5085d597 | 83 | |
lscordovar | 6:8b78e3cddd78 | 84 | pc.printf("Bye now in original example \r\n"); |
lscordovar | 5:2e4e5085d597 | 85 | |
lscordovar | 5:2e4e5085d597 | 86 | wait(1); |
lscordovar | 5:2e4e5085d597 | 87 | |
lscordovar | 6:8b78e3cddd78 | 88 | |
lscordovar | 6:8b78e3cddd78 | 89 | /*****************************************************************************/ |
lscordovar | 6:8b78e3cddd78 | 90 | pc.printf("From here is a new example for Master classes in UPS Guayaquil \r\n"); |
lscordovar | 6:8b78e3cddd78 | 91 | |
lscordovar | 5:2e4e5085d597 | 92 | // Clear the screen and locate to 0,0 |
lscordovar | 5:2e4e5085d597 | 93 | lcd.cls(); |
lscordovar | 5:2e4e5085d597 | 94 | |
lscordovar | 5:2e4e5085d597 | 95 | // LCD Backlight control |
lscordovar | 5:2e4e5085d597 | 96 | lcd.setBacklight(TextLCD::LightOn); |
lscordovar | 5:2e4e5085d597 | 97 | |
lscordovar | 5:2e4e5085d597 | 98 | // LCD Orientation control, supported for some Controllers |
lscordovar | 5:2e4e5085d597 | 99 | //lcd.setOrient(TextLCD::Bottom); |
lscordovar | 5:2e4e5085d597 | 100 | |
lscordovar | 5:2e4e5085d597 | 101 | // LCD BigFont control, supported for some Controllers |
lscordovar | 5:2e4e5085d597 | 102 | //lcd.LCDBigFont(TextLCD::TopBottomLine); |
lscordovar | 5:2e4e5085d597 | 103 | |
lscordovar | 5:2e4e5085d597 | 104 | // Locate cursor to a screen column and row |
lscordovar | 5:2e4e5085d597 | 105 | int col = 0; |
lscordovar | 5:2e4e5085d597 | 106 | int row = 0; |
lscordovar | 5:2e4e5085d597 | 107 | lcd.locate(col,row); |
lscordovar | 6:8b78e3cddd78 | 108 | lcd.printf("Iniciando..."); |
lscordovar | 5:2e4e5085d597 | 109 | wait(1); |
lscordovar | 5:2e4e5085d597 | 110 | |
lscordovar | 6:8b78e3cddd78 | 111 | //No Show cursor as blinking character |
lscordovar | 6:8b78e3cddd78 | 112 | lcd.setCursor(TextLCD::CurOff_BlkOff); |
lscordovar | 6:8b78e3cddd78 | 113 | |
lscordovar | 5:2e4e5085d597 | 114 | // Write a character to the LCD "ARROW" |
lscordovar | 5:2e4e5085d597 | 115 | int c = 1; |
lscordovar | 6:8b78e3cddd78 | 116 | lcd.cls(); |
lscordovar | 6:8b78e3cddd78 | 117 | lcd.locate(0,0); |
lscordovar | 6:8b78e3cddd78 | 118 | for (int row=0; row<4; row++) { |
lscordovar | 6:8b78e3cddd78 | 119 | lcd.putc(c); |
lscordovar | 6:8b78e3cddd78 | 120 | wait(0.01); |
lscordovar | 5:2e4e5085d597 | 121 | |
lscordovar | 6:8b78e3cddd78 | 122 | for (col=0; col<19; col++) { |
lscordovar | 6:8b78e3cddd78 | 123 | lcd.putc(c); |
lscordovar | 6:8b78e3cddd78 | 124 | wait(0.01); |
lscordovar | 5:2e4e5085d597 | 125 | } |
lscordovar | 5:2e4e5085d597 | 126 | } |
lscordovar | 5:2e4e5085d597 | 127 | wait(2); |
lscordovar | 5:2e4e5085d597 | 128 | |
lscordovar | 5:2e4e5085d597 | 129 | // Write a raw string to the LCD |
lscordovar | 6:8b78e3cddd78 | 130 | const char* text = "Hola a todos!!"; |
lscordovar | 5:2e4e5085d597 | 131 | lcd.cls(); |
lscordovar | 6:8b78e3cddd78 | 132 | lcd.locate(3,0); |
lscordovar | 5:2e4e5085d597 | 133 | lcd.printf(text); |
lscordovar | 5:2e4e5085d597 | 134 | wait(1); |
lscordovar | 5:2e4e5085d597 | 135 | |
lscordovar | 5:2e4e5085d597 | 136 | // Write a raw string to the LCD *-> pointer* |
lscordovar | 6:8b78e3cddd78 | 137 | |
lscordovar | 6:8b78e3cddd78 | 138 | lcd.locate(0,1); |
lscordovar | 6:8b78e3cddd78 | 139 | lcd.printf("/*----------------*/"); |
lscordovar | 6:8b78e3cddd78 | 140 | |
lscordovar | 6:8b78e3cddd78 | 141 | const char* msg = "Mensaje con punteros"; |
lscordovar | 5:2e4e5085d597 | 142 | int string_size = strlen (msg); |
lscordovar | 6:8b78e3cddd78 | 143 | lcd.locate(0,2); |
lscordovar | 6:8b78e3cddd78 | 144 | lcd.printf("%.*s", string_size, msg); |
lscordovar | 6:8b78e3cddd78 | 145 | |
lscordovar | 6:8b78e3cddd78 | 146 | lcd.locate(0,3); |
lscordovar | 6:8b78e3cddd78 | 147 | const char* msg2 = "\"TXT: %.*s\",size,msg"; |
lscordovar | 6:8b78e3cddd78 | 148 | int string_size2 = strlen (msg2); |
lscordovar | 6:8b78e3cddd78 | 149 | lcd.printf("%.*s", string_size2, msg2); |
lscordovar | 5:2e4e5085d597 | 150 | wait(1); |
lscordovar | 5:2e4e5085d597 | 151 | |
lscordovar | 5:2e4e5085d597 | 152 | |
lscordovar | 5:2e4e5085d597 | 153 | |
lscordovar | 5:2e4e5085d597 | 154 | // Return the memoryaddress of screen column and row location |
lscordovar | 5:2e4e5085d597 | 155 | lcd.getAddress(col,row); |
lscordovar | 5:2e4e5085d597 | 156 | pc.printf("column %d\trow %d\r\n",col,row); |
lscordovar | 5:2e4e5085d597 | 157 | wait(1); |
lscordovar | 5:2e4e5085d597 | 158 | |
lscordovar | 5:2e4e5085d597 | 159 | |
lscordovar | 5:2e4e5085d597 | 160 | |
lscordovar | 5:2e4e5085d597 | 161 | // Return the number of rows ans columns |
lscordovar | 5:2e4e5085d597 | 162 | pc.printf("column %d\trow %d\r\n",lcd.rows(),lcd.columns()); |
lscordovar | 5:2e4e5085d597 | 163 | wait(1); |
lscordovar | 5:2e4e5085d597 | 164 | |
lscordovar | 5:2e4e5085d597 | 165 | |
lscordovar | 5:2e4e5085d597 | 166 | |
wim | 4:a3e4bb2053cb | 167 | } |
wim | 3:f238b4f7874f | 168 | |
wim | 3:f238b4f7874f | 169 | |
wim | 0:a75049de1a82 | 170 |