Akizuki I2C 8x2 Character LCD AQM0802A driver class for LPC1768
Fork of AQM0802A by
AQM0802A.h@5:92e827dc6b1f, 2014-09-29 (annotated)
- Committer:
- mataro777
- Date:
- Mon Sep 29 17:56:02 2014 +0000
- Revision:
- 5:92e827dc6b1f
- Parent:
- 4:5cc8d4df601d
It seems, the LPC1768 doesn't support the send byte array function?; ; ;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tetsuya256 | 0:2b187f29704e | 1 | #ifndef AQM0802A_H |
tetsuya256 | 0:2b187f29704e | 2 | #define AQM0802A_H |
tetsuya256 | 0:2b187f29704e | 3 | |
tetsuya256 | 0:2b187f29704e | 4 | #include "mbed.h" |
tetsuya256 | 0:2b187f29704e | 5 | |
tetsuya256 | 0:2b187f29704e | 6 | #define AQM0802A_ADDR 0x7C // I2C slave address |
tetsuya256 | 0:2b187f29704e | 7 | #define AQM0802A_COLS 8 |
tetsuya256 | 0:2b187f29704e | 8 | #define AQM0802A_ROWS 2 |
tetsuya256 | 0:2b187f29704e | 9 | #define AQM0802A_MAX_COLS (1 << 6) |
tetsuya256 | 0:2b187f29704e | 10 | #define AQM0802A_MAX_ROWS (1 << 2) |
tetsuya256 | 2:1fe32f818e43 | 11 | #define AQM0802A_CMD_WAIT 27 // wait time after sent lcd command (us) |
tetsuya256 | 0:2b187f29704e | 12 | #define I2C_FREQUENCY 400000 // I2C bus speed (uses only constructor of AQM0802A(PinName, PinName)) |
tetsuya256 | 0:2b187f29704e | 13 | |
tetsuya256 | 0:2b187f29704e | 14 | /** |
tetsuya256 | 0:2b187f29704e | 15 | * Akizuki I2C 8x2 Character LCD AQM0802A driver class.<br /> |
tetsuya256 | 0:2b187f29704e | 16 | * 秋月 I2C 8x2 小型キャラクタLCD AQM0802A用 ドライバクラスです。<br /> |
tetsuya256 | 0:2b187f29704e | 17 | * http://akizukidenshi.com/catalog/g/gK-06795/<br /> |
tetsuya256 | 0:2b187f29704e | 18 | * Copyright(C)2014 T.Hoshino<br /> |
tetsuya256 | 0:2b187f29704e | 19 | * <br /> |
tetsuya256 | 0:2b187f29704e | 20 | * CAUTION: My English is very poor, it might be wrong. (I rely on Google Translate almost.) |
tetsuya256 | 0:2b187f29704e | 21 | * <ul> |
tetsuya256 | 0:2b187f29704e | 22 | * <li>Stream 継承なので、printf() 等も利用可能です。<br /> |
tetsuya256 | 0:2b187f29704e | 23 | * This class inherits Stream, Its public methods (printf() etc.) are also available.</li> |
tetsuya256 | 0:2b187f29704e | 24 | * <li>文字コード '\\r'(0x0D) の出力でカーソル位置は行頭に移動します。<br /> |
tetsuya256 | 0:2b187f29704e | 25 | * When you output the character code '\\r'(0x0D), the cursor position is move to the beginning of line.</li> |
tetsuya256 | 0:2b187f29704e | 26 | * <li>文字コード '\\n'(0x0A) の出力でカーソル位置は次の行の先頭に移動します。<br /> |
tetsuya256 | 0:2b187f29704e | 27 | * When you output the character code '\\n'(0x0A), the cursor position is move to the beginning of next line.</li> |
tetsuya256 | 0:2b187f29704e | 28 | * </ul> |
tetsuya256 | 0:2b187f29704e | 29 | * @code |
tetsuya256 | 0:2b187f29704e | 30 | //---------------------------------------- |
tetsuya256 | 0:2b187f29704e | 31 | // Sample code for ST Nucleo F401RE |
tetsuya256 | 0:2b187f29704e | 32 | //---------------------------------------- |
tetsuya256 | 0:2b187f29704e | 33 | #include <mbed.h> |
tetsuya256 | 0:2b187f29704e | 34 | #include <AQM0802A.h> |
tetsuya256 | 0:2b187f29704e | 35 | |
tetsuya256 | 0:2b187f29704e | 36 | AQM0802A lcd(D14, D15); // <-- this ! |
tetsuya256 | 0:2b187f29704e | 37 | Ticker ticker; |
tetsuya256 | 0:2b187f29704e | 38 | |
tetsuya256 | 0:2b187f29704e | 39 | void tick() { |
tetsuya256 | 0:2b187f29704e | 40 | static int count = 0; |
tetsuya256 | 0:2b187f29704e | 41 | lcd.cls(); |
tetsuya256 | 0:2b187f29704e | 42 | lcd.printf("Hello\n %d", count++); |
tetsuya256 | 0:2b187f29704e | 43 | } |
tetsuya256 | 0:2b187f29704e | 44 | |
tetsuya256 | 0:2b187f29704e | 45 | int main() { |
tetsuya256 | 0:2b187f29704e | 46 | ticker.attach(&tick, 0.1); |
tetsuya256 | 0:2b187f29704e | 47 | while(1) { |
tetsuya256 | 0:2b187f29704e | 48 | } |
tetsuya256 | 0:2b187f29704e | 49 | } |
tetsuya256 | 0:2b187f29704e | 50 | * @endcode |
tetsuya256 | 0:2b187f29704e | 51 | * ご自由にお使いいただけますが、無保証です。使用は自己責任でどうぞ。<br /> |
tetsuya256 | 0:2b187f29704e | 52 | * The use of this is free, but no warranty. please use at your own risk.<br /> |
tetsuya256 | 0:2b187f29704e | 53 | */ |
tetsuya256 | 0:2b187f29704e | 54 | class AQM0802A : public Stream { |
tetsuya256 | 0:2b187f29704e | 55 | public: |
tetsuya256 | 0:2b187f29704e | 56 | /** |
tetsuya256 | 0:2b187f29704e | 57 | * Constructor. |
tetsuya256 | 0:2b187f29704e | 58 | * @param sda serial data pin |
tetsuya256 | 0:2b187f29704e | 59 | * @param scl serial clock pin |
tetsuya256 | 0:2b187f29704e | 60 | */ |
tetsuya256 | 0:2b187f29704e | 61 | AQM0802A(PinName sda, PinName scl); |
tetsuya256 | 0:2b187f29704e | 62 | |
tetsuya256 | 0:2b187f29704e | 63 | /** |
tetsuya256 | 0:2b187f29704e | 64 | * Constructor. |
tetsuya256 | 0:2b187f29704e | 65 | * @param i2c reference to i2c bus object. |
tetsuya256 | 0:2b187f29704e | 66 | */ |
tetsuya256 | 0:2b187f29704e | 67 | AQM0802A(I2C &i2c); |
tetsuya256 | 0:2b187f29704e | 68 | |
tetsuya256 | 0:2b187f29704e | 69 | /** |
tetsuya256 | 0:2b187f29704e | 70 | * Clear screen. 画面をクリアします。<br /> |
tetsuya256 | 0:2b187f29704e | 71 | * After clear screen, the cursor position will be changed to {x:0, y:0}.<br /> |
tetsuya256 | 0:2b187f29704e | 72 | * 画面クリア後、カーソル位置は {x:0, y:0} に変更されます。<br /> |
tetsuya256 | 0:2b187f29704e | 73 | * @see #home() |
tetsuya256 | 0:2b187f29704e | 74 | */ |
tetsuya256 | 0:2b187f29704e | 75 | void cls(); |
tetsuya256 | 0:2b187f29704e | 76 | |
tetsuya256 | 0:2b187f29704e | 77 | /** |
tetsuya256 | 0:2b187f29704e | 78 | * Set cursor to home position. カーソル位置をホームポジションに移動します。<br /> |
tetsuya256 | 0:2b187f29704e | 79 | * The cursor position will be changed to {x:0, y:0}. At that time, it does not clear the screen display.<br /> |
tetsuya256 | 0:2b187f29704e | 80 | * カーソル位置を {x:0, y:0} に変更します。その際、画面表示はクリアしません。<br /> |
tetsuya256 | 0:2b187f29704e | 81 | * @see #cls() |
tetsuya256 | 0:2b187f29704e | 82 | */ |
tetsuya256 | 0:2b187f29704e | 83 | void home(); |
tetsuya256 | 0:2b187f29704e | 84 | |
tetsuya256 | 0:2b187f29704e | 85 | /** |
tetsuya256 | 0:2b187f29704e | 86 | * Change the contrast of the screen. 画面のコントラストを変更します。<br /> |
tetsuya256 | 3:58ee5a396991 | 87 | * Practical range in about 20-40, the initial value is 32. |
tetsuya256 | 3:58ee5a396991 | 88 | * 実用的な範囲は20~40ぐらいで、初期値は32です。<br /> |
tetsuya256 | 0:2b187f29704e | 89 | * Only the lower 6 bits are valid. 下位6ビットのみ有効です。 |
tetsuya256 | 4:5cc8d4df601d | 90 | * @param contrast 0(bright) to 63(dark). The initial value is 32. |
tetsuya256 | 0:2b187f29704e | 91 | */ |
tetsuya256 | 0:2b187f29704e | 92 | void setContrast(int contrast); |
tetsuya256 | 0:2b187f29704e | 93 | |
tetsuya256 | 0:2b187f29704e | 94 | /** |
tetsuya256 | 0:2b187f29704e | 95 | * Change the cursor position to {x, y}. 指定位置 {x, y} にカーソルを移動します。<br /> |
tetsuya256 | 0:2b187f29704e | 96 | * The position of left top is {0, 0}. Right bottom is {7, 1}. |
tetsuya256 | 0:2b187f29704e | 97 | * 左上は {0, 0}、右下は{7, 1} です。 |
tetsuya256 | 1:340b8e9780a3 | 98 | * @param x 0 to 7 : Column position of the cursor. |
tetsuya256 | 1:340b8e9780a3 | 99 | * @param y 0 to 1 : Row position of the cursor. |
tetsuya256 | 0:2b187f29704e | 100 | */ |
tetsuya256 | 0:2b187f29704e | 101 | void setCursor(int x, int y); |
tetsuya256 | 0:2b187f29704e | 102 | |
tetsuya256 | 0:2b187f29704e | 103 | protected: |
tetsuya256 | 0:2b187f29704e | 104 | virtual int _putc(int); |
tetsuya256 | 0:2b187f29704e | 105 | virtual int _getc(){ return 0; } |
tetsuya256 | 0:2b187f29704e | 106 | |
tetsuya256 | 0:2b187f29704e | 107 | private: |
tetsuya256 | 0:2b187f29704e | 108 | I2C* i2c; |
tetsuya256 | 0:2b187f29704e | 109 | uint8_t x; |
tetsuya256 | 0:2b187f29704e | 110 | uint8_t y; |
tetsuya256 | 0:2b187f29704e | 111 | |
tetsuya256 | 0:2b187f29704e | 112 | void lcd_init(); |
tetsuya256 | 0:2b187f29704e | 113 | void lcd_cmd(uint8_t cmd); |
tetsuya256 | 0:2b187f29704e | 114 | void lcd_data(char data); |
tetsuya256 | 0:2b187f29704e | 115 | }; |
tetsuya256 | 0:2b187f29704e | 116 | |
tetsuya256 | 0:2b187f29704e | 117 | #endif |