firmware of NBCTRLV1 / AYC01
Dependencies: SDFileSystemEx mbed
lcd.cpp@1:29f0e76a9999, 2016-04-18 (annotated)
- Committer:
- bkc_mbed
- Date:
- Mon Apr 18 00:36:37 2016 +0000
- Revision:
- 1:29f0e76a9999
- Parent:
- 0:722cc5360dc3
v1.30
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bkc_mbed | 0:722cc5360dc3 | 1 | /* |
bkc_mbed | 0:722cc5360dc3 | 2 | * lcd.cpp : AQM0802A mini library |
bkc_mbed | 0:722cc5360dc3 | 3 | * |
bkc_mbed | 0:722cc5360dc3 | 4 | * Based on LCD module "AQM0802A-RN-GBW" sample program |
bkc_mbed | 0:722cc5360dc3 | 5 | * Copyright (c) 2013 Yoshihiro TSUBOI |
bkc_mbed | 0:722cc5360dc3 | 6 | * |
bkc_mbed | 0:722cc5360dc3 | 7 | * Original Arduino version was developed by |
bkc_mbed | 0:722cc5360dc3 | 8 | * Copyright (c) 2013 Masahiro WAKAYAMA at SWITCH SCIENCE |
bkc_mbed | 0:722cc5360dc3 | 9 | * |
bkc_mbed | 0:722cc5360dc3 | 10 | * Released under the MIT License: http://mbed.org/license/mit |
bkc_mbed | 0:722cc5360dc3 | 11 | * |
bkc_mbed | 0:722cc5360dc3 | 12 | */ |
bkc_mbed | 0:722cc5360dc3 | 13 | |
bkc_mbed | 0:722cc5360dc3 | 14 | #include "mbed.h" |
bkc_mbed | 0:722cc5360dc3 | 15 | |
bkc_mbed | 0:722cc5360dc3 | 16 | #include "lcd.h" |
bkc_mbed | 0:722cc5360dc3 | 17 | #include "pindef.h" |
bkc_mbed | 0:722cc5360dc3 | 18 | |
bkc_mbed | 0:722cc5360dc3 | 19 | LCD::LCD() |
bkc_mbed | 0:722cc5360dc3 | 20 | { |
bkc_mbed | 0:722cc5360dc3 | 21 | i2c = new I2C(DP_SDA, DP_SCL); // sda, scl |
bkc_mbed | 0:722cc5360dc3 | 22 | } |
bkc_mbed | 0:722cc5360dc3 | 23 | |
bkc_mbed | 0:722cc5360dc3 | 24 | #define LCD_ADDR 0x7C |
bkc_mbed | 0:722cc5360dc3 | 25 | |
bkc_mbed | 0:722cc5360dc3 | 26 | void LCD::cmd(char x) |
bkc_mbed | 0:722cc5360dc3 | 27 | { |
bkc_mbed | 0:722cc5360dc3 | 28 | char data[2]; |
bkc_mbed | 0:722cc5360dc3 | 29 | data[0] = 0x00; // CO = 0,RS = 0 |
bkc_mbed | 0:722cc5360dc3 | 30 | data[1] = x; |
bkc_mbed | 0:722cc5360dc3 | 31 | i2c->write(LCD_ADDR, data, 2); |
bkc_mbed | 0:722cc5360dc3 | 32 | } |
bkc_mbed | 0:722cc5360dc3 | 33 | |
bkc_mbed | 0:722cc5360dc3 | 34 | void LCD::contdata(char x) |
bkc_mbed | 0:722cc5360dc3 | 35 | { |
bkc_mbed | 0:722cc5360dc3 | 36 | char data[2]; |
bkc_mbed | 0:722cc5360dc3 | 37 | data[0] = 0xC0; //0b11000000 CO = 1, RS = 1 |
bkc_mbed | 0:722cc5360dc3 | 38 | data[1] = x; |
bkc_mbed | 0:722cc5360dc3 | 39 | i2c->write(LCD_ADDR, data, 2); |
bkc_mbed | 0:722cc5360dc3 | 40 | } |
bkc_mbed | 0:722cc5360dc3 | 41 | |
bkc_mbed | 0:722cc5360dc3 | 42 | void LCD::lastdata(char x) |
bkc_mbed | 0:722cc5360dc3 | 43 | { |
bkc_mbed | 0:722cc5360dc3 | 44 | char data[2]; |
bkc_mbed | 0:722cc5360dc3 | 45 | data[0] = 0x40; //0b11000000 CO = 0, RS = 1 |
bkc_mbed | 0:722cc5360dc3 | 46 | data[1] = x; |
bkc_mbed | 0:722cc5360dc3 | 47 | i2c->write(LCD_ADDR, data, 2); |
bkc_mbed | 0:722cc5360dc3 | 48 | } |
bkc_mbed | 0:722cc5360dc3 | 49 | |
bkc_mbed | 0:722cc5360dc3 | 50 | |
bkc_mbed | 0:722cc5360dc3 | 51 | void LCD::setContrast(unsigned char c) { |
bkc_mbed | 0:722cc5360dc3 | 52 | cmd(0x39); |
bkc_mbed | 0:722cc5360dc3 | 53 | cmd(0x70 | (c & 0x0f)); // contrast Low |
bkc_mbed | 0:722cc5360dc3 | 54 | cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power |
bkc_mbed | 0:722cc5360dc3 | 55 | cmd(0x38); |
bkc_mbed | 0:722cc5360dc3 | 56 | } |
bkc_mbed | 0:722cc5360dc3 | 57 | |
bkc_mbed | 0:722cc5360dc3 | 58 | void LCD::init() { |
bkc_mbed | 0:722cc5360dc3 | 59 | int cont = 0; |
bkc_mbed | 0:722cc5360dc3 | 60 | wait(0.04); |
bkc_mbed | 0:722cc5360dc3 | 61 | // LCD initialize |
bkc_mbed | 0:722cc5360dc3 | 62 | cmd(0x38); // function set |
bkc_mbed | 0:722cc5360dc3 | 63 | cmd(0x39); // function set |
bkc_mbed | 0:722cc5360dc3 | 64 | cmd(0x04); // EntryModeSet |
bkc_mbed | 0:722cc5360dc3 | 65 | cmd(0x14); // interval osc |
bkc_mbed | 0:722cc5360dc3 | 66 | cmd(0x70 | (cont & 0xF)); // contrast Low |
bkc_mbed | 0:722cc5360dc3 | 67 | cmd(0x5C | ((cont >> 4) & 0x3)); // contast High/icon/power |
bkc_mbed | 0:722cc5360dc3 | 68 | cmd(0x6C); // follower control |
bkc_mbed | 0:722cc5360dc3 | 69 | wait(0.2); |
bkc_mbed | 0:722cc5360dc3 | 70 | cmd(0x38); // function set |
bkc_mbed | 0:722cc5360dc3 | 71 | cmd(0x0C); // Display On |
bkc_mbed | 0:722cc5360dc3 | 72 | cmd(0x01); // Clear Display |
bkc_mbed | 0:722cc5360dc3 | 73 | wait(0.2); // need additional wait to Clear Display |
bkc_mbed | 0:722cc5360dc3 | 74 | |
bkc_mbed | 0:722cc5360dc3 | 75 | setContrast(36); |
bkc_mbed | 0:722cc5360dc3 | 76 | } |
bkc_mbed | 0:722cc5360dc3 | 77 | |
bkc_mbed | 0:722cc5360dc3 | 78 | |
bkc_mbed | 0:722cc5360dc3 | 79 | // 文字と空白で1行を埋める |
bkc_mbed | 0:722cc5360dc3 | 80 | void LCD::printStrFill(const char *s) |
bkc_mbed | 0:722cc5360dc3 | 81 | { |
bkc_mbed | 0:722cc5360dc3 | 82 | int idx = 0; |
bkc_mbed | 0:722cc5360dc3 | 83 | for(idx = 0; idx < 8; idx++) |
bkc_mbed | 0:722cc5360dc3 | 84 | { |
bkc_mbed | 0:722cc5360dc3 | 85 | if(idx < 7) { |
bkc_mbed | 0:722cc5360dc3 | 86 | contdata(*s); |
bkc_mbed | 0:722cc5360dc3 | 87 | } else { |
bkc_mbed | 0:722cc5360dc3 | 88 | lastdata(*s); |
bkc_mbed | 0:722cc5360dc3 | 89 | } |
bkc_mbed | 0:722cc5360dc3 | 90 | if (*s) s++; |
bkc_mbed | 0:722cc5360dc3 | 91 | } |
bkc_mbed | 0:722cc5360dc3 | 92 | } |
bkc_mbed | 0:722cc5360dc3 | 93 | |
bkc_mbed | 0:722cc5360dc3 | 94 | void LCD::printStr(const char *s) |
bkc_mbed | 0:722cc5360dc3 | 95 | { |
bkc_mbed | 0:722cc5360dc3 | 96 | int idx = 0; |
bkc_mbed | 0:722cc5360dc3 | 97 | while(*s && idx < 8) { |
bkc_mbed | 0:722cc5360dc3 | 98 | if(*(s + 1)) { |
bkc_mbed | 0:722cc5360dc3 | 99 | contdata(*s); |
bkc_mbed | 0:722cc5360dc3 | 100 | } else { |
bkc_mbed | 0:722cc5360dc3 | 101 | lastdata(*s); |
bkc_mbed | 0:722cc5360dc3 | 102 | } |
bkc_mbed | 0:722cc5360dc3 | 103 | s++; |
bkc_mbed | 0:722cc5360dc3 | 104 | idx++; |
bkc_mbed | 0:722cc5360dc3 | 105 | } |
bkc_mbed | 0:722cc5360dc3 | 106 | } |
bkc_mbed | 0:722cc5360dc3 | 107 | |
bkc_mbed | 0:722cc5360dc3 | 108 | void LCD::setCursor(unsigned char x,unsigned char y) |
bkc_mbed | 0:722cc5360dc3 | 109 | { |
bkc_mbed | 0:722cc5360dc3 | 110 | cmd(0x80 | (y * 0x40 + x)); |
bkc_mbed | 0:722cc5360dc3 | 111 | } |
bkc_mbed | 0:722cc5360dc3 | 112 | |
bkc_mbed | 0:722cc5360dc3 | 113 | void LCD::printStrY(int y,const char *s) |
bkc_mbed | 0:722cc5360dc3 | 114 | { |
bkc_mbed | 0:722cc5360dc3 | 115 | setCursor(0, y); |
bkc_mbed | 0:722cc5360dc3 | 116 | printStrFill(s); |
bkc_mbed | 0:722cc5360dc3 | 117 | } |
bkc_mbed | 0:722cc5360dc3 | 118 | |
bkc_mbed | 0:722cc5360dc3 | 119 | void LCD::printStrYscr(int y,const char *s) |
bkc_mbed | 0:722cc5360dc3 | 120 | { |
bkc_mbed | 0:722cc5360dc3 | 121 | int cnt = strlen(s) - 7; |
bkc_mbed | 0:722cc5360dc3 | 122 | if (cnt <= 0) |
bkc_mbed | 0:722cc5360dc3 | 123 | cnt = 1; |
bkc_mbed | 0:722cc5360dc3 | 124 | |
bkc_mbed | 0:722cc5360dc3 | 125 | for(int i = 0; i < cnt; i++) |
bkc_mbed | 0:722cc5360dc3 | 126 | { |
bkc_mbed | 0:722cc5360dc3 | 127 | setCursor(0, y); |
bkc_mbed | 0:722cc5360dc3 | 128 | printStr(s + i); |
bkc_mbed | 0:722cc5360dc3 | 129 | wait(0.5); |
bkc_mbed | 0:722cc5360dc3 | 130 | } |
bkc_mbed | 0:722cc5360dc3 | 131 | } |
bkc_mbed | 0:722cc5360dc3 | 132 | |
bkc_mbed | 0:722cc5360dc3 | 133 | |
bkc_mbed | 0:722cc5360dc3 | 134 | void LCD::printStr2(const char *s, const char *s2) |
bkc_mbed | 0:722cc5360dc3 | 135 | { |
bkc_mbed | 0:722cc5360dc3 | 136 | setCursor(0,0); |
bkc_mbed | 0:722cc5360dc3 | 137 | printStrFill(s); |
bkc_mbed | 0:722cc5360dc3 | 138 | setCursor(0,1); |
bkc_mbed | 0:722cc5360dc3 | 139 | printStrFill(s2); |
bkc_mbed | 0:722cc5360dc3 | 140 | } |
bkc_mbed | 0:722cc5360dc3 | 141 | |
bkc_mbed | 0:722cc5360dc3 | 142 | void LCD::cls(void) |
bkc_mbed | 0:722cc5360dc3 | 143 | { |
bkc_mbed | 0:722cc5360dc3 | 144 | setCursor(0, 0); |
bkc_mbed | 0:722cc5360dc3 | 145 | printStrFill(""); |
bkc_mbed | 0:722cc5360dc3 | 146 | setCursor(0, 1); |
bkc_mbed | 0:722cc5360dc3 | 147 | printStrFill(""); |
bkc_mbed | 0:722cc5360dc3 | 148 | } |