Dependencies: SDFileSystem mbed
AQM0802A.cpp@1:58c05f881281, 2017-05-24 (annotated)
- Committer:
- satoseiz
- Date:
- Wed May 24 00:58:25 2017 +0000
- Revision:
- 1:58c05f881281
- Parent:
- 0:dd4a28744f4e
;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
satoseiz | 0:dd4a28744f4e | 1 | #include "mbed.h" |
satoseiz | 0:dd4a28744f4e | 2 | #include "AQM0802A.h" |
satoseiz | 0:dd4a28744f4e | 3 | |
satoseiz | 0:dd4a28744f4e | 4 | unsigned char mode; |
satoseiz | 0:dd4a28744f4e | 5 | unsigned char contrast = 0; // 0-63 |
satoseiz | 0:dd4a28744f4e | 6 | unsigned char contrastFlag = false; |
satoseiz | 0:dd4a28744f4e | 7 | int CGcounter; |
satoseiz | 0:dd4a28744f4e | 8 | int FADEcounter; |
satoseiz | 0:dd4a28744f4e | 9 | |
satoseiz | 0:dd4a28744f4e | 10 | void lcd_cmd(char x) { |
satoseiz | 0:dd4a28744f4e | 11 | char data[2]; |
satoseiz | 0:dd4a28744f4e | 12 | data[0] = 0x00; // CO = 0,RS = 0 |
satoseiz | 0:dd4a28744f4e | 13 | data[1] = x; |
satoseiz | 0:dd4a28744f4e | 14 | i2c.write(AQCM0802_addr, data, 2); |
satoseiz | 0:dd4a28744f4e | 15 | } |
satoseiz | 0:dd4a28744f4e | 16 | |
satoseiz | 0:dd4a28744f4e | 17 | void lcd_contdata(char x) { |
satoseiz | 0:dd4a28744f4e | 18 | char data[2]; |
satoseiz | 0:dd4a28744f4e | 19 | data[0] = 0xC0; //0b11000000 CO = 1, RS = 1 |
satoseiz | 0:dd4a28744f4e | 20 | data[1] = x; |
satoseiz | 0:dd4a28744f4e | 21 | i2c.write(AQCM0802_addr, data, 2); |
satoseiz | 0:dd4a28744f4e | 22 | } |
satoseiz | 0:dd4a28744f4e | 23 | |
satoseiz | 0:dd4a28744f4e | 24 | void lcd_lastdata(char x) { |
satoseiz | 0:dd4a28744f4e | 25 | char data[2]; |
satoseiz | 0:dd4a28744f4e | 26 | data[0] = 0x40; //0b11000000 CO = 0, RS = 1 |
satoseiz | 0:dd4a28744f4e | 27 | data[1] = x; |
satoseiz | 0:dd4a28744f4e | 28 | i2c.write(AQCM0802_addr, data, 2); |
satoseiz | 0:dd4a28744f4e | 29 | } |
satoseiz | 0:dd4a28744f4e | 30 | |
satoseiz | 0:dd4a28744f4e | 31 | void lcd_printStr(const char *s) { |
satoseiz | 0:dd4a28744f4e | 32 | while(*s) { |
satoseiz | 0:dd4a28744f4e | 33 | if(*(s + 1)) { |
satoseiz | 0:dd4a28744f4e | 34 | lcd_contdata(*s); |
satoseiz | 0:dd4a28744f4e | 35 | } else { |
satoseiz | 0:dd4a28744f4e | 36 | lcd_lastdata(*s); |
satoseiz | 0:dd4a28744f4e | 37 | } |
satoseiz | 0:dd4a28744f4e | 38 | s++; |
satoseiz | 0:dd4a28744f4e | 39 | } |
satoseiz | 0:dd4a28744f4e | 40 | } |
satoseiz | 0:dd4a28744f4e | 41 | |
satoseiz | 0:dd4a28744f4e | 42 | void lcd_printHex(unsigned char num) { |
satoseiz | 0:dd4a28744f4e | 43 | lcd_contdata(num); |
satoseiz | 0:dd4a28744f4e | 44 | } |
satoseiz | 0:dd4a28744f4e | 45 | |
satoseiz | 0:dd4a28744f4e | 46 | void lcd_init() { |
satoseiz | 0:dd4a28744f4e | 47 | wait(0.04); |
satoseiz | 0:dd4a28744f4e | 48 | // LCD initialize |
satoseiz | 0:dd4a28744f4e | 49 | lcd_cmd(0x38); // function set |
satoseiz | 0:dd4a28744f4e | 50 | lcd_cmd(0x39); // function set |
satoseiz | 0:dd4a28744f4e | 51 | lcd_cmd(0x04); // EntryModeSet |
satoseiz | 0:dd4a28744f4e | 52 | lcd_cmd(0x14); // interval osc |
satoseiz | 0:dd4a28744f4e | 53 | lcd_cmd(0x70 | (contrast & 0xF)); // contrast Low |
satoseiz | 0:dd4a28744f4e | 54 | lcd_cmd(0x5C | ((contrast >> 4) & 0x3)); // contast High/icon/power |
satoseiz | 0:dd4a28744f4e | 55 | lcd_cmd(0x6C); // follower control |
satoseiz | 0:dd4a28744f4e | 56 | wait(0.2); |
satoseiz | 0:dd4a28744f4e | 57 | lcd_cmd(0x38); // function set |
satoseiz | 0:dd4a28744f4e | 58 | lcd_cmd(0x0C); // Display On |
satoseiz | 0:dd4a28744f4e | 59 | lcd_cmd(0x01); // Clear Display |
satoseiz | 0:dd4a28744f4e | 60 | wait(0.2); // need additional wait to Clear Display |
satoseiz | 0:dd4a28744f4e | 61 | } |
satoseiz | 0:dd4a28744f4e | 62 | |
satoseiz | 0:dd4a28744f4e | 63 | void lcd_setCursor(unsigned char x,unsigned char y) { |
satoseiz | 0:dd4a28744f4e | 64 | lcd_cmd(0x80 | (y * 0x40 + x)); |
satoseiz | 0:dd4a28744f4e | 65 | } |
satoseiz | 0:dd4a28744f4e | 66 | |
satoseiz | 0:dd4a28744f4e | 67 | unsigned char cg[13 * 8] = { |
satoseiz | 0:dd4a28744f4e | 68 | /* |
satoseiz | 0:dd4a28744f4e | 69 | 0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 70 | 0b00010001,0b00010001,0b00010001,0b00010101,0b00010101,0b00010101,0b00001010,0b00000000, |
satoseiz | 0:dd4a28744f4e | 71 | 0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 72 | 0b00011111,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000000, |
satoseiz | 0:dd4a28744f4e | 73 | 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 74 | 0b00010001,0b00010001,0b00010001,0b00011111,0b00010001,0b00010001,0b00010001,0b00000000, |
satoseiz | 0:dd4a28744f4e | 75 | */ |
satoseiz | 0:dd4a28744f4e | 76 | 0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S |
satoseiz | 0:dd4a28744f4e | 77 | 0x11,0x11,0x11,0x15,0x15,0x15,0x0A,0x00, // W |
satoseiz | 0:dd4a28744f4e | 78 | 0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I |
satoseiz | 0:dd4a28744f4e | 79 | 0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // T |
satoseiz | 0:dd4a28744f4e | 80 | 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C |
satoseiz | 0:dd4a28744f4e | 81 | 0x11,0x11,0x11,0x1F,0x11,0x11,0x11,0x00, // H |
satoseiz | 0:dd4a28744f4e | 82 | /* |
satoseiz | 0:dd4a28744f4e | 83 | 0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 84 | 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 85 | 0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 86 | 0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000, |
satoseiz | 0:dd4a28744f4e | 87 | 0b00010001,0b00010001,0b00011001,0b00010101,0b00010011,0b00010001,0b00010001,0b00000000, |
satoseiz | 0:dd4a28744f4e | 88 | 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, |
satoseiz | 0:dd4a28744f4e | 89 | 0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000, |
satoseiz | 0:dd4a28744f4e | 90 | */ |
satoseiz | 0:dd4a28744f4e | 91 | 0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S |
satoseiz | 0:dd4a28744f4e | 92 | 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C |
satoseiz | 0:dd4a28744f4e | 93 | 0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I |
satoseiz | 0:dd4a28744f4e | 94 | 0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00, // E |
satoseiz | 0:dd4a28744f4e | 95 | 0x11,0x11,0x19,0x15,0x13,0x11,0x11,0x00, // N |
satoseiz | 0:dd4a28744f4e | 96 | 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C |
satoseiz | 0:dd4a28744f4e | 97 | 0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00 // E |
satoseiz | 0:dd4a28744f4e | 98 | }; |
satoseiz | 0:dd4a28744f4e | 99 | |
satoseiz | 0:dd4a28744f4e | 100 | void setCG(int src,int dst,int len) { |
satoseiz | 0:dd4a28744f4e | 101 | lcd_cmd(0x38); |
satoseiz | 0:dd4a28744f4e | 102 | lcd_cmd(0x40 + dst); |
satoseiz | 0:dd4a28744f4e | 103 | if (src >= 0) { |
satoseiz | 0:dd4a28744f4e | 104 | for (int i = 0;i < len;i++) lcd_printHex(cg[src + i]); |
satoseiz | 0:dd4a28744f4e | 105 | } else { |
satoseiz | 0:dd4a28744f4e | 106 | for (int i = 0;i < len;i++) lcd_printHex(0); |
satoseiz | 0:dd4a28744f4e | 107 | } |
satoseiz | 0:dd4a28744f4e | 108 | } |
satoseiz | 0:dd4a28744f4e | 109 | |
satoseiz | 0:dd4a28744f4e | 110 | void setContrast(unsigned char c) { |
satoseiz | 0:dd4a28744f4e | 111 | lcd_cmd(0x39); |
satoseiz | 0:dd4a28744f4e | 112 | lcd_cmd(0x70 | (c & 0x0f)); // contrast Low |
satoseiz | 0:dd4a28744f4e | 113 | lcd_cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power |
satoseiz | 0:dd4a28744f4e | 114 | lcd_cmd(0x38); |
satoseiz | 0:dd4a28744f4e | 115 | } |
satoseiz | 0:dd4a28744f4e | 116 | |
satoseiz | 0:dd4a28744f4e | 117 | //int main() { |
satoseiz | 0:dd4a28744f4e | 118 | int test() { |
satoseiz | 0:dd4a28744f4e | 119 | lcd_init(); |
satoseiz | 0:dd4a28744f4e | 120 | contrast = 35; |
satoseiz | 0:dd4a28744f4e | 121 | setContrast(contrast); |
satoseiz | 0:dd4a28744f4e | 122 | lcd_setCursor(0, 0); |
satoseiz | 0:dd4a28744f4e | 123 | lcd_printStr("SATO"); |
satoseiz | 0:dd4a28744f4e | 124 | lcd_setCursor(1, 1); |
satoseiz | 0:dd4a28744f4e | 125 | lcd_printStr("SEI"); |
satoseiz | 0:dd4a28744f4e | 126 | |
satoseiz | 0:dd4a28744f4e | 127 | while(1); |
satoseiz | 0:dd4a28744f4e | 128 | |
satoseiz | 0:dd4a28744f4e | 129 | |
satoseiz | 0:dd4a28744f4e | 130 | while(1) { |
satoseiz | 0:dd4a28744f4e | 131 | switch(mode) { |
satoseiz | 0:dd4a28744f4e | 132 | case 0: // init |
satoseiz | 0:dd4a28744f4e | 133 | lcd_setCursor(0, 0); |
satoseiz | 0:dd4a28744f4e | 134 | for (int i = 0;i < 6;i++) lcd_printHex(i); |
satoseiz | 0:dd4a28744f4e | 135 | lcd_setCursor(1, 1); |
satoseiz | 0:dd4a28744f4e | 136 | lcd_printStr(" "); |
satoseiz | 0:dd4a28744f4e | 137 | setCG(-1,0,6 * 8); |
satoseiz | 0:dd4a28744f4e | 138 | contrast = 35; |
satoseiz | 0:dd4a28744f4e | 139 | setContrast(contrast); |
satoseiz | 0:dd4a28744f4e | 140 | CGcounter = 0; |
satoseiz | 0:dd4a28744f4e | 141 | mode++; |
satoseiz | 0:dd4a28744f4e | 142 | break; |
satoseiz | 0:dd4a28744f4e | 143 | case 1: // SWITCH |
satoseiz | 0:dd4a28744f4e | 144 | if(CGcounter <= (6 * 8)) { |
satoseiz | 0:dd4a28744f4e | 145 | setCG((CGcounter / 8) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); |
satoseiz | 0:dd4a28744f4e | 146 | CGcounter++; |
satoseiz | 0:dd4a28744f4e | 147 | } else { |
satoseiz | 0:dd4a28744f4e | 148 | lcd_setCursor(0, 0); |
satoseiz | 0:dd4a28744f4e | 149 | lcd_printStr("SWITCH"); |
satoseiz | 0:dd4a28744f4e | 150 | setCG(-1,0,3 * 8); |
satoseiz | 0:dd4a28744f4e | 151 | lcd_setCursor(1, 1); |
satoseiz | 0:dd4a28744f4e | 152 | for (int i = 0;i < 3;i++) lcd_printHex(i); |
satoseiz | 0:dd4a28744f4e | 153 | CGcounter = 0; |
satoseiz | 0:dd4a28744f4e | 154 | mode++; |
satoseiz | 0:dd4a28744f4e | 155 | } |
satoseiz | 0:dd4a28744f4e | 156 | break; |
satoseiz | 0:dd4a28744f4e | 157 | case 2: // SCI |
satoseiz | 0:dd4a28744f4e | 158 | if(CGcounter <= (3 * 8)) { |
satoseiz | 0:dd4a28744f4e | 159 | setCG(((CGcounter / 8) + 6) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); |
satoseiz | 0:dd4a28744f4e | 160 | CGcounter++; |
satoseiz | 0:dd4a28744f4e | 161 | } else { |
satoseiz | 0:dd4a28744f4e | 162 | lcd_setCursor(1, 1); |
satoseiz | 0:dd4a28744f4e | 163 | lcd_printStr("SCI"); |
satoseiz | 0:dd4a28744f4e | 164 | setCG(-1,0,4 * 8); |
satoseiz | 0:dd4a28744f4e | 165 | lcd_setCursor(4, 1); |
satoseiz | 0:dd4a28744f4e | 166 | for (int i = 0;i < 4;i++) lcd_printHex(i); |
satoseiz | 0:dd4a28744f4e | 167 | CGcounter = 0; |
satoseiz | 0:dd4a28744f4e | 168 | mode++; |
satoseiz | 0:dd4a28744f4e | 169 | } |
satoseiz | 0:dd4a28744f4e | 170 | break; |
satoseiz | 0:dd4a28744f4e | 171 | case 3: // ENCE |
satoseiz | 0:dd4a28744f4e | 172 | if(CGcounter <= (4 * 8)) { |
satoseiz | 0:dd4a28744f4e | 173 | setCG(((CGcounter / 8) + 9) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); |
satoseiz | 0:dd4a28744f4e | 174 | CGcounter++; |
satoseiz | 0:dd4a28744f4e | 175 | } else { |
satoseiz | 0:dd4a28744f4e | 176 | lcd_setCursor(4, 1); |
satoseiz | 0:dd4a28744f4e | 177 | lcd_printStr("ENCE"); |
satoseiz | 0:dd4a28744f4e | 178 | FADEcounter = 0; |
satoseiz | 0:dd4a28744f4e | 179 | mode++; |
satoseiz | 0:dd4a28744f4e | 180 | } |
satoseiz | 0:dd4a28744f4e | 181 | break; |
satoseiz | 0:dd4a28744f4e | 182 | case 4: |
satoseiz | 0:dd4a28744f4e | 183 | if (contrastFlag == false) { |
satoseiz | 0:dd4a28744f4e | 184 | if (++contrast >= 54) contrastFlag = true; |
satoseiz | 0:dd4a28744f4e | 185 | } else { |
satoseiz | 0:dd4a28744f4e | 186 | if (--contrast <= 17) { |
satoseiz | 0:dd4a28744f4e | 187 | contrastFlag = false; |
satoseiz | 0:dd4a28744f4e | 188 | if(++FADEcounter >= 2) { |
satoseiz | 0:dd4a28744f4e | 189 | mode = 0; |
satoseiz | 0:dd4a28744f4e | 190 | } |
satoseiz | 0:dd4a28744f4e | 191 | } |
satoseiz | 0:dd4a28744f4e | 192 | } |
satoseiz | 0:dd4a28744f4e | 193 | setContrast(contrast); |
satoseiz | 0:dd4a28744f4e | 194 | break; |
satoseiz | 0:dd4a28744f4e | 195 | } |
satoseiz | 0:dd4a28744f4e | 196 | wait(0.05); |
satoseiz | 0:dd4a28744f4e | 197 | } |
satoseiz | 0:dd4a28744f4e | 198 | } |