A TextDisplay driver that supports graphical displays using on of the SED133x conrtrolers. Allows stdout and stderr output to be redirected to the display.
Sed133xLCD.h@9:68ad299df12b, 2011-01-29 (annotated)
- Committer:
- llagendijk
- Date:
- Sat Jan 29 21:28:42 2011 +0000
- Revision:
- 9:68ad299df12b
- Parent:
- 8:66be6a696e4e
First release of my version of TextDisPlay
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
llagendijk | 6:2f8aed3d2be4 | 1 | // mbed Sed133xLCD Library Base Class |
llagendijk | 6:2f8aed3d2be4 | 2 | // Based on TextLCD (Copyright (c) 2007-2009 sford) |
llagendijk | 6:2f8aed3d2be4 | 3 | // Released under the MIT License: http://mbed.org/license/mit |
llagendijk | 6:2f8aed3d2be4 | 4 | // Author: louis Lagendijk |
llagendijk | 6:2f8aed3d2be4 | 5 | // |
llagendijk | 6:2f8aed3d2be4 | 6 | // |
llagendijk | 6:2f8aed3d2be4 | 7 | #include "TextDisplays.h" |
llagendijk | 6:2f8aed3d2be4 | 8 | |
llagendijk | 6:2f8aed3d2be4 | 9 | #ifndef MBED_Sed133xLCD_H |
llagendijk | 6:2f8aed3d2be4 | 10 | #define MBED_Sed133xLCD_H |
llagendijk | 6:2f8aed3d2be4 | 11 | |
llagendijk | 6:2f8aed3d2be4 | 12 | enum dataType_t { |
llagendijk | 6:2f8aed3d2be4 | 13 | t_data = 0, |
llagendijk | 6:2f8aed3d2be4 | 14 | t_command = 1 |
llagendijk | 6:2f8aed3d2be4 | 15 | }; |
llagendijk | 6:2f8aed3d2be4 | 16 | |
llagendijk | 6:2f8aed3d2be4 | 17 | enum command_t { |
llagendijk | 6:2f8aed3d2be4 | 18 | NO_COMMAND = 0, |
llagendijk | 6:2f8aed3d2be4 | 19 | SYSTEM_SET = 0x40, |
llagendijk | 6:2f8aed3d2be4 | 20 | SET_MEM = 0x42, |
llagendijk | 6:2f8aed3d2be4 | 21 | GET_MEM = 0x43, |
llagendijk | 6:2f8aed3d2be4 | 22 | SCROLL_SET = 0x44, |
llagendijk | 6:2f8aed3d2be4 | 23 | SET_CURSOR = 0x46, |
llagendijk | 6:2f8aed3d2be4 | 24 | GET_CURSOR = 0x47, |
llagendijk | 6:2f8aed3d2be4 | 25 | CURSOR_DIR_RIGHT = 0x4c, |
llagendijk | 6:2f8aed3d2be4 | 26 | CURSOR_DIR_LEFT = 0x4d, |
llagendijk | 6:2f8aed3d2be4 | 27 | CURSOR_DIR_UP = 0x4e, |
llagendijk | 6:2f8aed3d2be4 | 28 | CURSOR_DIR_DOWN = 0x4f, |
llagendijk | 6:2f8aed3d2be4 | 29 | SLEEP_IN = 0x53, |
llagendijk | 6:2f8aed3d2be4 | 30 | DISPLAY_OFF = 0x58, |
llagendijk | 6:2f8aed3d2be4 | 31 | DISPLAY_ON = 0x59, |
llagendijk | 6:2f8aed3d2be4 | 32 | HORIZONTAL_SCROLL_POSITION = 0x5a, |
llagendijk | 6:2f8aed3d2be4 | 33 | OVERLAY_FORMAT = 0x5b, |
llagendijk | 6:2f8aed3d2be4 | 34 | CHAR_GEN_RAM_ADDR = 0x5c, |
llagendijk | 6:2f8aed3d2be4 | 35 | CURSOR_FORM = 0x5d |
llagendijk | 6:2f8aed3d2be4 | 36 | }; |
llagendijk | 6:2f8aed3d2be4 | 37 | |
llagendijk | 6:2f8aed3d2be4 | 38 | struct commandName_t { |
llagendijk | 6:2f8aed3d2be4 | 39 | command_t value; |
llagendijk | 6:2f8aed3d2be4 | 40 | char *text; |
llagendijk | 6:2f8aed3d2be4 | 41 | }; |
llagendijk | 6:2f8aed3d2be4 | 42 | |
llagendijk | 6:2f8aed3d2be4 | 43 | /** Sed133xLCD Textdisplay |
llagendijk | 6:2f8aed3d2be4 | 44 | * |
llagendijk | 6:2f8aed3d2be4 | 45 | * Supports SED1330 (and probably the SED1335 and SED1336). |
llagendijk | 6:2f8aed3d2be4 | 46 | * Based on datasheet 268-0.4 |
llagendijk | 6:2f8aed3d2be4 | 47 | |
llagendijk | 7:d79600310cfe | 48 | *This code drives the display using the 8080 interface (SEL1 = 0, SEL2 = 0). |
llagendijk | 7:d79600310cfe | 49 | * Required pins: |
llagendijk | 7:d79600310cfe | 50 | * @code |
llagendijk | 6:2f8aed3d2be4 | 51 | * 8 bits for the databus + |
llagendijk | 8:66be6a696e4e | 52 | * *Reset (note 1) |
llagendijk | 6:2f8aed3d2be4 | 53 | * *Read |
llagendijk | 6:2f8aed3d2be4 | 54 | * *Write |
llagendijk | 6:2f8aed3d2be4 | 55 | * *ChipSelect |
llagendijk | 6:2f8aed3d2be4 | 56 | * A0 |
llagendijk | 6:2f8aed3d2be4 | 57 | * |
llagendijk | 6:2f8aed3d2be4 | 58 | * Note1: Reset is a Schmitt trigger input that can normally not be driven from |
llagendijk | 6:2f8aed3d2be4 | 59 | * an output pin. The other pins can be directly connected to the MBED |
llagendijk | 6:2f8aed3d2be4 | 60 | * +5V |
llagendijk | 6:2f8aed3d2be4 | 61 | * _ |
llagendijk | 6:2f8aed3d2be4 | 62 | * | | 10k |
llagendijk | 6:2f8aed3d2be4 | 63 | * |_| |
llagendijk | 6:2f8aed3d2be4 | 64 | * | |
llagendijk | 6:2f8aed3d2be4 | 65 | * MBED__ |/ |
llagendijk | 6:2f8aed3d2be4 | 66 | * -|___|---| BC547 |
llagendijk | 6:2f8aed3d2be4 | 67 | * 22k |\> |
llagendijk | 6:2f8aed3d2be4 | 68 | * | |
llagendijk | 6:2f8aed3d2be4 | 69 | * ___ |
llagendijk | 6:2f8aed3d2be4 | 70 | * @endcode |
llagendijk | 8:66be6a696e4e | 71 | * |
llagendijk | 8:66be6a696e4e | 72 | * Character sizes can be set as desired (defaults to 6*8). The SED seems to use a |
llagendijk | 8:66be6a696e4e | 73 | * 5*7 font internally other font sizes use additional white space around the |
llagendijk | 8:66be6a696e4e | 74 | * characters. |
llagendijk | 8:66be6a696e4e | 75 | * Font widths of more than 8 pixels are not supported. |
llagendijk | 8:66be6a696e4e | 76 | * The actual size of the display in characters is caluclated from the horizontal/ |
llagendijk | 8:66be6a696e4e | 77 | * vertical resolution and the specified font size. |
llagendijk | 6:2f8aed3d2be4 | 78 | |
llagendijk | 6:2f8aed3d2be4 | 79 | * Example: |
llagendijk | 6:2f8aed3d2be4 | 80 | * @code |
llagendijk | 6:2f8aed3d2be4 | 81 | / simple test for TextDisplay class |
llagendijk | 6:2f8aed3d2be4 | 82 | #include "mbed.h" |
llagendijk | 6:2f8aed3d2be4 | 83 | #include "Sed133xLCD.h" |
llagendijk | 6:2f8aed3d2be4 | 84 | |
llagendijk | 6:2f8aed3d2be4 | 85 | Sed133xLCD lcd(p5, p6, p7, p8, p9, p28, p27, p26, p25, p24, p23, p22, p21,256,128, 6,9, "lcd"); |
llagendijk | 6:2f8aed3d2be4 | 86 | |
llagendijk | 6:2f8aed3d2be4 | 87 | |
llagendijk | 6:2f8aed3d2be4 | 88 | int main() { |
llagendijk | 6:2f8aed3d2be4 | 89 | lcd.printf("Hello TextDisplay world!\r\n"); |
llagendijk | 6:2f8aed3d2be4 | 90 | lcd.claim(stdout); |
llagendijk | 6:2f8aed3d2be4 | 91 | printf("hello stream world\r\n"); |
llagendijk | 6:2f8aed3d2be4 | 92 | } |
llagendijk | 6:2f8aed3d2be4 | 93 | |
llagendijk | 6:2f8aed3d2be4 | 94 | * @endcode |
llagendijk | 6:2f8aed3d2be4 | 95 | */ |
llagendijk | 6:2f8aed3d2be4 | 96 | class Sed133xLCD : public TextDisplay { |
llagendijk | 6:2f8aed3d2be4 | 97 | public: |
llagendijk | 6:2f8aed3d2be4 | 98 | /** Create the TextDisplay interface |
llagendijk | 6:2f8aed3d2be4 | 99 | * |
llagendijk | 6:2f8aed3d2be4 | 100 | * @param reset PinName for reset |
llagendijk | 6:2f8aed3d2be4 | 101 | * @param nRead PinName for /read |
llagendijk | 6:2f8aed3d2be4 | 102 | * @param nWrite PinName for /write |
llagendijk | 6:2f8aed3d2be4 | 103 | * @param nSelect PinName for /select |
llagendijk | 6:2f8aed3d2be4 | 104 | * @param addr0 PinName for addr0 |
llagendijk | 6:2f8aed3d2be4 | 105 | * @param d0-d7 PinName for D0 -D7 |
llagendijk | 8:66be6a696e4e | 106 | * @param hor_dots horizontal resolution of display (in pixels) |
llagendijk | 8:66be6a696e4e | 107 | * @param vert_dots vertical resolution of display (in pixels) |
llagendijk | 8:66be6a696e4e | 108 | * @param char_width disply width of character (in pixels) |
llagendijk | 8:66be6a696e4e | 109 | * @param char_height display height of character (in pixels)8 |
llagendijk | 8:66be6a696e4e | 110 | * @param name name to be used in pathname of the stream |
llagendijk | 6:2f8aed3d2be4 | 111 | */ |
llagendijk | 6:2f8aed3d2be4 | 112 | |
llagendijk | 6:2f8aed3d2be4 | 113 | Sed133xLCD(PinName reset, PinName nRead, PinName nWrite, PinName nSelect,PinName addr0, |
llagendijk | 6:2f8aed3d2be4 | 114 | PinName d0, PinName d1, PinName d2, PinName d3, |
llagendijk | 6:2f8aed3d2be4 | 115 | PinName d4, PinName d5, PinName d6, PinName d7, |
llagendijk | 6:2f8aed3d2be4 | 116 | uint16_t hor_dots = 256, uint16_t vert_dots = 128, |
llagendijk | 6:2f8aed3d2be4 | 117 | uint8_t char_width = 6, uint8_t char_height = 8, const char *name = "sed133x"); |
llagendijk | 6:2f8aed3d2be4 | 118 | virtual void character(uint16_t column, uint16_t row, int c); |
llagendijk | 6:2f8aed3d2be4 | 119 | virtual uint16_t rows() { |
llagendijk | 6:2f8aed3d2be4 | 120 | return _rows; |
llagendijk | 6:2f8aed3d2be4 | 121 | } |
llagendijk | 6:2f8aed3d2be4 | 122 | virtual uint16_t columns() { |
llagendijk | 6:2f8aed3d2be4 | 123 | return _columns; |
llagendijk | 6:2f8aed3d2be4 | 124 | } |
llagendijk | 6:2f8aed3d2be4 | 125 | virtual void initializeSed(); |
llagendijk | 6:2f8aed3d2be4 | 126 | virtual void cls(); |
llagendijk | 6:2f8aed3d2be4 | 127 | |
llagendijk | 6:2f8aed3d2be4 | 128 | // locate, putc, printf come from parent class |
llagendijk | 6:2f8aed3d2be4 | 129 | |
llagendijk | 6:2f8aed3d2be4 | 130 | protected: |
llagendijk | 6:2f8aed3d2be4 | 131 | commandName_t commandNameTab[]; |
llagendijk | 6:2f8aed3d2be4 | 132 | char *commandName(command_t command_val); |
llagendijk | 6:2f8aed3d2be4 | 133 | void busWait(void); |
llagendijk | 6:2f8aed3d2be4 | 134 | void resetSed(void); |
llagendijk | 6:2f8aed3d2be4 | 135 | void sendByte(dataType_t type, uint8_t data); |
llagendijk | 6:2f8aed3d2be4 | 136 | uint8_t getByte(dataType_t type); |
llagendijk | 6:2f8aed3d2be4 | 137 | void sendCommand(uint8_t data); |
llagendijk | 6:2f8aed3d2be4 | 138 | void sendData(uint8_t data); |
llagendijk | 6:2f8aed3d2be4 | 139 | void systemSet(void); |
llagendijk | 6:2f8aed3d2be4 | 140 | void scrollSet(void); |
llagendijk | 6:2f8aed3d2be4 | 141 | void horizontalScrollPosition(void); |
llagendijk | 6:2f8aed3d2be4 | 142 | void overlayFormat(void); |
llagendijk | 6:2f8aed3d2be4 | 143 | void cursorDirection(void); |
llagendijk | 6:2f8aed3d2be4 | 144 | void cursorForm(void); |
llagendijk | 6:2f8aed3d2be4 | 145 | void displayOn(void); |
llagendijk | 6:2f8aed3d2be4 | 146 | void displayOff(void); |
llagendijk | 6:2f8aed3d2be4 | 147 | void charGenRamAddr(void); |
llagendijk | 6:2f8aed3d2be4 | 148 | void init(void); |
llagendijk | 6:2f8aed3d2be4 | 149 | void setCursor(uint8_t column, uint8_t row); |
llagendijk | 6:2f8aed3d2be4 | 150 | void setCursor(int offset); |
llagendijk | 6:2f8aed3d2be4 | 151 | void printText(uint8_t *text); |
llagendijk | 6:2f8aed3d2be4 | 152 | void printData(int len, uint8_t *data); |
llagendijk | 6:2f8aed3d2be4 | 153 | void clsText(void); |
llagendijk | 6:2f8aed3d2be4 | 154 | void clsGraphics(void); |
llagendijk | 6:2f8aed3d2be4 | 155 | void clearCharacterGeneratorRam(void); |
llagendijk | 6:2f8aed3d2be4 | 156 | |
llagendijk | 6:2f8aed3d2be4 | 157 | DigitalOut _reset, _nRead, _nWrite, _nSelect, _addr0; |
llagendijk | 6:2f8aed3d2be4 | 158 | BusInOut _dataBus; |
llagendijk | 6:2f8aed3d2be4 | 159 | uint16_t _hor_dots, _vert_dots, _rows, _columns, _char_width, _char_height; |
llagendijk | 6:2f8aed3d2be4 | 160 | }; |
llagendijk | 6:2f8aed3d2be4 | 161 | #endif |
llagendijk | 6:2f8aed3d2be4 | 162 | |
llagendijk | 6:2f8aed3d2be4 | 163 | |
llagendijk | 6:2f8aed3d2be4 | 164 |