sato sei / Mbed 2 deprecated SD_AQM_RTC_Test

Dependencies:   SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AQM0802A.cpp Source File

AQM0802A.cpp

00001 #include "mbed.h"
00002 #include "AQM0802A.h"
00003 
00004 unsigned char mode;
00005 unsigned char contrast = 0; // 0-63
00006 unsigned char contrastFlag = false;
00007 int CGcounter;
00008 int FADEcounter;
00009 
00010 void lcd_cmd(char x) {
00011   char data[2];
00012   data[0] = 0x00; // CO = 0,RS = 0
00013   data[1] = x;
00014   i2c.write(AQCM0802_addr, data, 2);
00015 }
00016 
00017 void lcd_contdata(char x) {
00018   char data[2];
00019   data[0] = 0xC0; //0b11000000 CO = 1, RS = 1
00020   data[1] = x;
00021   i2c.write(AQCM0802_addr, data, 2);
00022 }
00023 
00024 void lcd_lastdata(char x) {
00025   char data[2];
00026   data[0] = 0x40; //0b11000000 CO = 0, RS = 1
00027   data[1] = x;
00028   i2c.write(AQCM0802_addr, data, 2);
00029 }
00030 
00031 void lcd_printStr(const char *s) {
00032   while(*s) {
00033     if(*(s + 1)) {
00034       lcd_contdata(*s);
00035     } else {
00036       lcd_lastdata(*s);
00037     }
00038     s++;
00039   }
00040 }
00041 
00042 void lcd_printHex(unsigned char num) {
00043   lcd_contdata(num);
00044 }
00045 
00046 void lcd_init() {
00047   wait(0.04);
00048   // LCD initialize
00049   lcd_cmd(0x38); // function set
00050   lcd_cmd(0x39); // function set
00051   lcd_cmd(0x04); // EntryModeSet
00052   lcd_cmd(0x14); // interval osc
00053   lcd_cmd(0x70 | (contrast & 0xF)); // contrast Low
00054   lcd_cmd(0x5C | ((contrast >> 4) & 0x3)); // contast High/icon/power
00055   lcd_cmd(0x6C); // follower control
00056   wait(0.2);
00057   lcd_cmd(0x38); // function set
00058   lcd_cmd(0x0C); // Display On
00059   lcd_cmd(0x01); // Clear Display
00060   wait(0.2); // need additional wait to Clear Display
00061 }
00062 
00063 void lcd_setCursor(unsigned char x,unsigned char y) {
00064   lcd_cmd(0x80 | (y * 0x40 + x));
00065 }
00066 
00067 unsigned char cg[13 * 8] = {
00068 /*
00069   0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000,
00070   0b00010001,0b00010001,0b00010001,0b00010101,0b00010101,0b00010101,0b00001010,0b00000000,
00071   0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000,
00072   0b00011111,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000000,
00073   0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000,
00074   0b00010001,0b00010001,0b00010001,0b00011111,0b00010001,0b00010001,0b00010001,0b00000000,
00075 */
00076   0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S
00077   0x11,0x11,0x11,0x15,0x15,0x15,0x0A,0x00, // W
00078   0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I
00079   0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // T
00080   0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C
00081   0x11,0x11,0x11,0x1F,0x11,0x11,0x11,0x00, // H
00082 /*
00083   0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000,
00084   0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000,
00085   0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000,
00086   0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000,
00087   0b00010001,0b00010001,0b00011001,0b00010101,0b00010011,0b00010001,0b00010001,0b00000000,
00088   0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000,
00089   0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000,
00090 */
00091   0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S
00092   0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C
00093   0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I
00094   0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00, // E
00095   0x11,0x11,0x19,0x15,0x13,0x11,0x11,0x00, // N
00096   0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C
00097   0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00  // E
00098 };
00099 
00100 void setCG(int src,int dst,int len) {
00101   lcd_cmd(0x38);
00102   lcd_cmd(0x40 + dst);
00103   if (src >= 0) {
00104     for (int i = 0;i < len;i++) lcd_printHex(cg[src + i]);
00105   } else {
00106     for (int i = 0;i < len;i++) lcd_printHex(0);
00107   }
00108 }
00109 
00110 void setContrast(unsigned char c) {
00111   lcd_cmd(0x39);
00112   lcd_cmd(0x70 | (c & 0x0f)); // contrast Low
00113   lcd_cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power
00114   lcd_cmd(0x38);
00115 }
00116 
00117 //int main() {
00118 int test() {
00119     lcd_init();
00120     contrast = 35;
00121     setContrast(contrast);
00122     lcd_setCursor(0, 0);
00123     lcd_printStr("SATO");
00124     lcd_setCursor(1, 1);
00125     lcd_printStr("SEI");
00126     
00127     while(1);
00128     
00129     
00130     while(1) {
00131       switch(mode) {
00132         case 0:  // init
00133           lcd_setCursor(0, 0);
00134           for (int i = 0;i < 6;i++) lcd_printHex(i);
00135           lcd_setCursor(1, 1);
00136           lcd_printStr("       ");
00137           setCG(-1,0,6 * 8);
00138           contrast = 35;
00139           setContrast(contrast);
00140           CGcounter = 0;
00141           mode++;
00142           break;
00143         case 1:  // SWITCH
00144           if(CGcounter <= (6 * 8)) {
00145             setCG((CGcounter / 8) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8);
00146             CGcounter++;
00147           } else {
00148             lcd_setCursor(0, 0);
00149             lcd_printStr("SWITCH");
00150             setCG(-1,0,3 * 8);
00151             lcd_setCursor(1, 1);
00152             for (int i = 0;i < 3;i++) lcd_printHex(i);
00153             CGcounter = 0;
00154             mode++;
00155           }
00156           break;
00157         case 2:  // SCI
00158           if(CGcounter <= (3 * 8)) {
00159             setCG(((CGcounter / 8) + 6) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8);
00160             CGcounter++;
00161           } else {
00162             lcd_setCursor(1, 1);
00163             lcd_printStr("SCI");
00164             setCG(-1,0,4 * 8);
00165             lcd_setCursor(4, 1);
00166             for (int i = 0;i < 4;i++) lcd_printHex(i);
00167             CGcounter = 0;
00168             mode++;
00169           }
00170           break;
00171         case 3:  // ENCE
00172           if(CGcounter <= (4 * 8)) {
00173             setCG(((CGcounter / 8) + 9) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8);
00174             CGcounter++;
00175           } else {
00176             lcd_setCursor(4, 1);
00177             lcd_printStr("ENCE");
00178             FADEcounter = 0;
00179             mode++;
00180           }
00181           break;
00182         case 4:
00183           if (contrastFlag == false) {
00184             if (++contrast >= 54) contrastFlag = true;
00185           } else {
00186             if (--contrast <= 17) {
00187               contrastFlag = false;
00188               if(++FADEcounter >= 2) {
00189                 mode = 0;
00190               }
00191             }
00192           }
00193           setContrast(contrast);
00194           break;
00195       }
00196       wait(0.05);
00197     }
00198 }