Dependencies:   SDFileSystem mbed

Committer:
satoseiz
Date:
Wed May 24 00:58:25 2017 +0000
Revision:
1:58c05f881281
Parent:
0:dd4a28744f4e
;

Who changed what in which revision?

UserRevisionLine numberNew 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 }