Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
I2CLCD.cpp
00001 #include "I2CLCD.h" 00002 /* 00003 I2C低電圧キャラクタ液晶モジュール 00004 */ 00005 00006 I2CLCD::I2CLCD():I2C(p9,p10) 00007 { 00008 MaxChNum = 32; 00009 init(); 00010 } 00011 00012 I2CLCD::I2CLCD(int n):I2C(p9,p10) 00013 { 00014 MaxChNum = n; 00015 init(); 00016 } 00017 00018 I2CLCD::I2CLCD(PinName sda, PinName scl):I2C(sda,scl) 00019 { 00020 MaxChNum = 32; 00021 init(); 00022 } 00023 00024 I2CLCD::I2CLCD(PinName sda, PinName scl, int n):I2C(sda,scl) 00025 { 00026 MaxChNum = n; 00027 init(); 00028 } 00029 00030 void I2CLCD::init() 00031 { 00032 int Wait = 30; 00033 chCount = 0; 00034 wait_ms(40); 00035 LCD_WRITE= 0x7c; 00036 write(0x0, 0x38); //data8bit, numberOfLine=2 00037 wait_us(Wait); 00038 write(0x0, 0x39); //data8bit, numberOfLine=2 00039 wait_us(Wait); 00040 write(0x0, 0x14); //internal OSC frequency 00041 wait_us(Wait); 00042 if(MaxChNum==32) write(0x0, 0x7f); // contrast 下4bit 00043 else write(0x0, 0x78); // contrast mini 00044 wait_us(Wait); 00045 write(0x0, 0x5F); // power/icon/contrast control 00046 wait_us(Wait); 00047 write(0x0, 0x6a); // follower control 00048 wait_ms(200); // 200ms 00049 write(0x0, 0x0c); // Display ON 00050 wait_us(Wait); 00051 write(0x0, 0x01); // clear disply 00052 wait_us(2000); // 2ms 00053 write(0x00, 0x06); // entry mode set 00054 wait_us(Wait); 00055 } 00056 void I2CLCD::home() 00057 { 00058 write(0x00,0x02); // return to home 00059 chCount=0; 00060 wait_ms(2); 00061 } 00062 00063 void I2CLCD::clear() 00064 { 00065 write(0x00,0x01); // clear display 00066 chCount=0; 00067 wait_ms(2); 00068 } 00069 void I2CLCD::write(unsigned char ch) 00070 { 00071 int x; 00072 int n = MaxChNum/2; 00073 if(ch==0x0a){ 00074 x= chCount %MaxChNum; 00075 if(x<n) { 00076 write(0x00,0xc0); 00077 chCount=n; 00078 } 00079 else { 00080 write(0x00,0x01); // clear display 00081 chCount=0; 00082 wait_ms(2); 00083 } 00084 } 00085 else 00086 { 00087 write(0x40,ch); 00088 x= ++chCount % MaxChNum; 00089 if( x ==n) write(0x00,0xc0); 00090 } 00091 } 00092 00093 void I2CLCD::write(char* ch) 00094 { 00095 while(*ch){ 00096 write(*ch++); 00097 } 00098 } 00099 00100 void I2CLCD::write(unsigned char control, unsigned char dt) 00101 { 00102 start(); 00103 ((I2C*)this)->write(LCD_WRITE); 00104 ((I2C*)this)->write(control); 00105 ((I2C*)this)->write(dt); 00106 stop(); 00107 } 00108 void I2CLCD::write(int x, int column, char zeroPad) 00109 { 00110 char Buffer[10]; 00111 char num[5]; 00112 int i,j, n=0, signFlag=0; 00113 if(x<0) { // マイナスの値の場合 00114 signFlag=1; 00115 x *= -1; 00116 } 00117 do { 00118 num[n++] = x%10; 00119 x /= 10; 00120 } while(x != 0); 00121 i = column-n; 00122 if(i>0) { 00123 for(i=0; i<10; i++) Buffer[i]=' '; 00124 if(zeroPad) for(i=0; i<column-n; i++) Buffer[i]='0'; 00125 Buffer[9]=0; 00126 for(i=column-n, j=n-1; i<column; i++, j--) Buffer[i]=num[j]|'0'; 00127 Buffer[i]=0; 00128 if(signFlag) Buffer[column-n-1]='-'; 00129 } 00130 else { 00131 j=0; 00132 if(signFlag) Buffer[j++]='-'; 00133 for(i=--n; i>=0; i--) Buffer[j++]=num[i]|'0'; 00134 Buffer[j]=0; 00135 } 00136 write(Buffer); 00137 } 00138 00139 void I2CLCD::writeInt(int x) 00140 { 00141 char num[5]; 00142 int n=0; 00143 if(x<0) { // マイナスの値の場合 00144 write('-'); 00145 x *= -1; 00146 } 00147 do { 00148 num[n++] = x%10 +'0'; 00149 x /= 10; 00150 } while(x != 0); 00151 while(--n >=0) write(num[n]); 00152 } 00153 00154 void I2CLCD::setIcon(int x) 00155 { 00156 write(0x00, 0x39); // Function set 00157 write(0x00, 0x40 | 0x0f); // flower icon 00158 if(x & 1) write(0x40, 0x10); 00159 else write(0x40, 0x00); 00160 00161 write(0x00, 0x40 | 0x0d); // Battery icon 00162 write(0x40, 0); 00163 if(x & 0x0e) { 00164 write(0x00, 0x40 | 0x0d); // Battery icon 00165 write(0x40, ((x & 0x0e)<<1) | 2); 00166 } 00167 00168 write(0x00, 0x40 | 0x0b); // no sound icon 00169 if(x & 0x10) write(0x40, 0x10); 00170 else write(0x40, 0); 00171 00172 write(0x00, 0x40 | 0x09); // Key icon 00173 if(x & 0x20) write(0x40, 0x10); 00174 else write(0x40, 0); 00175 00176 write(0x00, 0x40 | 0x07); // 矢印 icon 00177 write(0x40, 0); 00178 if(x & 0xC0) { 00179 write(0x00, 0x40 | 0x07); // 矢印 icon 00180 write(0x40, (x & 0xC0)>>3); 00181 } 00182 00183 write(0x00, 0x40 | 0x06); // enter icon 00184 if(x & 0x100) write(0x40, 0x10); 00185 else write(0x40, 0); 00186 write(0x00, 0x40 | 0x04); // ring icon 00187 if(x & 0x200) write(0x40, 0x10); 00188 else write(0x40, 0); 00189 write(0x00, 0x40 | 0x02); // 電話 icon 00190 if(x & 0x400) write(0x40, 0x10); 00191 else write(0x40, 0); 00192 write(0x00, 0x40); // antena icon 00193 if(x & 0x800) write(0x40, 0x10); 00194 else write(0x40, 0); 00195 write(0x00, 0x38); // Function set 00196 } 00197 00198 void I2CLCD::setCG(char mode, char* cgData) 00199 { 00200 unsigned char i, j; 00201 write(0x00,0x38); // Function set IS= 0 00202 write(0x00,0x40); // CGRAM set address= 0 00203 if(mode == 0) { // StringModeで呼ばれた時はデフォールトにセット 00204 for(i=0; i<8; i++) { 00205 for(j=0; j<8; j++) { 00206 if(j < (7-i)) write(0x40,0x00); 00207 else write(0x40,0x1f); // 横棒をセット 00208 } 00209 } 00210 } 00211 else { 00212 for(i=0; i<64; i++ ) write(0x40, cgData[i]); 00213 } 00214 }
Generated on Thu Aug 4 2022 03:31:53 by
1.7.2