first commit
Dependents: Aitendo_2P-REL225L01
LCD192GC00.cpp
00001 #include "LCD192GC00.h" 00002 #include "ASCII12dot.h" //ASCII 12x12dot 00003 00004 LCD192GC00::LCD192GC00( 00005 PinName rd, PinName wr, PinName rs, PinName cs, PinName rst, 00006 PinName d0, PinName d1, PinName d2, PinName d3, 00007 PinName d4, PinName d5, PinName d6, PinName d7 00008 ): 00009 _rd(rd), _wr(wr), _rs(rs), _cs(cs), _rst(rst), 00010 _d(d0, d1, d2, d3, d4, d5, d6, d7) 00011 { 00012 00013 _rd=1; 00014 _wr=1; 00015 _rs=1; 00016 _cs=1; 00017 _rst = 1; 00018 00019 } 00020 00021 void LCD192GC00::_write(uint8_t rs, uint8_t d){ 00022 _cs=0; 00023 _rd=1; 00024 _rs=rs; 00025 00026 _d.output(); 00027 _d=d; 00028 _wr=0; 00029 //_delay(1); 00030 _wr=1; 00031 00032 _cs=1; 00033 } 00034 00035 void LCD192GC00::lcd_Init(){ 00036 wait_ms(20); 00037 _rd = 1; 00038 _cs = 1; // CS High 00039 _wr = 1; // WR High 00040 _rst = 0; // Reset LCD 00041 wait_ms(0x10); // 1msec wait 00042 _rst = 1; // Clear RESET 00043 wait_ms(25); // 100msec wait 00044 00045 lcd_cmd(0xB0); 00046 lcd_data(0xCA); 00047 lcd_data(0x90); 00048 lcd_data(0x37); 00049 lcd_data(0x01); 00050 lcd_data(0x48); 00051 lcd_data(0x01); 00052 lcd_data(0x40); 00053 lcd_data(0x04); 00054 lcd_data(0x00); 00055 lcd_data(0x00); 00056 00057 lcd_cmd(0x26); 00058 lcd_data(0x01); 00059 00060 lcd_cmd(0xB1); 00061 lcd_data(0x00); 00062 lcd_data(0x00); 00063 lcd_data(0x00); 00064 lcd_data(0x00); 00065 lcd_data(0x08); 00066 lcd_data(0x00); 00067 lcd_data(0x04); 00068 lcd_data(0x10); 00069 lcd_data(0x48); 00070 lcd_data(0x82); 00071 lcd_data(0x20); 00072 lcd_data(0x84); 00073 lcd_data(0x92); 00074 lcd_data(0x2A); 00075 lcd_data(0x52); 00076 lcd_data(0xAA); 00077 lcd_data(0x5A); 00078 lcd_data(0x55); 00079 lcd_data(0x2A); 00080 lcd_data(0x55); 00081 lcd_data(0xAE); 00082 lcd_data(0xFF); 00083 lcd_data(0xFE); 00084 lcd_data(0x00); 00085 lcd_data(0x00); 00086 lcd_data(0x00); 00087 lcd_data(0x00); 00088 lcd_data(0x00); 00089 lcd_data(0x00); 00090 lcd_data(0x04); 00091 00092 lcd_cmd(0xB2); 00093 lcd_data(0x00); 00094 lcd_data(0x00); 00095 lcd_data(0x00); 00096 lcd_data(0x00); 00097 lcd_data(0x04); 00098 lcd_data(0x00); 00099 lcd_data(0x02); 00100 lcd_data(0x08); 00101 lcd_data(0x48); 00102 lcd_data(0x82); 00103 lcd_data(0x20); 00104 lcd_data(0x84); 00105 lcd_data(0x42); 00106 lcd_data(0x48); 00107 lcd_data(0x92); 00108 lcd_data(0x2A); 00109 lcd_data(0x52); 00110 lcd_data(0xAA); 00111 lcd_data(0x5A); 00112 lcd_data(0x55); 00113 lcd_data(0x2A); 00114 lcd_data(0x55); 00115 lcd_data(0xAE); 00116 lcd_data(0xFF); 00117 lcd_data(0xFE); 00118 lcd_data(0x00); 00119 lcd_data(0x00); 00120 lcd_data(0x00); 00121 lcd_data(0x00); 00122 lcd_data(0x00); 00123 lcd_data(0x00); 00124 lcd_data(0x04); 00125 00126 lcd_cmd(MODE); // Entry Mode 00127 lcd_data(0x29); 00128 //color mode 00129 lcd_cmd(COLMOD); 00130 lcd_data(0x05); //65k color 00131 //Inteface mode 00132 lcd_cmd(IFMOD); 00133 lcd_data(0x00); //8bit mode 00134 00135 00136 lcd_cmd(0xBA); 00137 lcd_data(0x55); 00138 lcd_data(0x55); 00139 lcd_data(0x55); 00140 lcd_data(0x55); 00141 lcd_data(0x55); 00142 lcd_data(0x55); 00143 lcd_data(0x55); 00144 lcd_data(0x55); 00145 lcd_data(0x55); 00146 lcd_data(0x55); 00147 lcd_data(0x55); 00148 lcd_data(0x55); 00149 lcd_data(0x55); 00150 lcd_data(0x55); 00151 lcd_data(0x55); 00152 lcd_data(0x55); 00153 lcd_data(0x55); 00154 lcd_data(0x55); 00155 lcd_data(0x55); 00156 lcd_data(0x55); 00157 lcd_data(0x55); 00158 lcd_data(0x55); 00159 lcd_data(0x55); 00160 lcd_data(0x55); 00161 lcd_data(0x55); 00162 lcd_data(0x55); 00163 lcd_data(0x55); 00164 lcd_data(0x55); 00165 lcd_data(0x55); 00166 lcd_data(0x55); 00167 lcd_data(0x55); 00168 lcd_data(0x55); 00169 lcd_data(0x55); 00170 lcd_data(0x55); 00171 lcd_data(0x55); 00172 lcd_data(0x55); 00173 lcd_data(0x55); 00174 lcd_data(0x55); 00175 lcd_data(0x55); 00176 lcd_data(0x55); 00177 lcd_data(0x55); 00178 lcd_data(0x55); 00179 lcd_data(0x55); 00180 lcd_data(0x55); 00181 lcd_data(0x55); 00182 lcd_data(0x55); 00183 lcd_data(0x55); 00184 00185 00186 // 00187 lcd_cmd(SLPOUT); 00188 lcd_cmd(DISON); // 表示オン 00189 }; 00190 00191 void LCD192GC00::lcd_Clear(unsigned short Color){ 00192 int i, j; 00193 00194 lcd_cmd(PASET); // ページ開始終了アドレスセット 00195 lcd_data(0); 00196 lcd_data(0x0C); 00197 lcd_data((unsigned char)((ENDPAGE+0x0C)>>8)); 00198 lcd_data((unsigned char)(ENDPAGE+0x0C)); 00199 lcd_cmd(CASET); // コラム開始、終了アドレスセット 00200 lcd_data(0); 00201 lcd_data(0x08); 00202 lcd_data((unsigned char)((ENDCOL+0x08)>>8)); 00203 lcd_data((unsigned char)(ENDCOL+0x08)); 00204 lcd_cmd(RAMWR); 00205 for(j=0; j<4; j++){ 00206 for(i=0; i<(ENDCOL+1)*80; i++){ 00207 lcd_data((unsigned char)(Color>>8)); 00208 lcd_data((unsigned char)Color); 00209 } 00210 } 00211 } 00212 00213 /*********************************** 00214 * 1ピクセル表示関数 00215 * 座標は(0,0)-(161,131) 00216 ***********************************/ 00217 void LCD192GC00::lcd_Pixel(short Xpos, short Ypos, unsigned short Color){ 00218 00219 if((Xpos<=ENDCOL) && (Ypos<=ENDPAGE)){ 00220 Xpos += 0x08; 00221 Ypos += 0x0C; 00222 lcd_cmd(PASET); // 行(RAW)アドレスセット 00223 lcd_data(Ypos>>8); 00224 lcd_data(Ypos); 00225 lcd_data(Ypos>>8); 00226 lcd_data(Ypos); 00227 lcd_cmd(CASET); // 列(COLUM)アドレスセット 00228 lcd_data((unsigned char)((Xpos)>>8)); 00229 lcd_data((unsigned char)(Xpos)); 00230 lcd_data((unsigned char)(Xpos>>8)); 00231 lcd_data((unsigned char)(Xpos)); 00232 lcd_cmd(RAMWR); // 1ピクセル書き込み 00233 lcd_data(Color >> 8); // 16ビットカラー 00234 lcd_data(Color); 00235 } 00236 } 00237 00238 /*************************** 00239 * 直線描画関数 00240 ***************************/ 00241 #define abs(a) (((a)>0) ? (a) : -(a)) 00242 void LCD192GC00::lcd_Line(short x0, short y0, short x1, short y1, unsigned short Color) 00243 { 00244 short steep, t; 00245 short deltax, deltay, error; 00246 short x, y; 00247 short ystep; 00248 00249 y0=ENDPAGE-y0; // Y座標反転 00250 y1=ENDPAGE-y1; 00251 /// 差分の大きいほうを求める 00252 steep = (abs(y1 - y0) > abs(x1 - x0)); 00253 /// x、yの入れ替え 00254 if(steep){ 00255 t = x0; x0 = y0; y0 = t; 00256 t = x1; x1 = y1; y1 = t; 00257 } 00258 if(x0 > x1) { 00259 t = x0; x0 = x1; x1 = t; 00260 t = y0; y0 = y1; y1 = t; 00261 } 00262 deltax = x1 - x0; // 傾き計算 00263 deltay = abs(y1 - y0); 00264 error = 0; 00265 y = y0; 00266 /// 傾きでステップの正負を切り替え 00267 if(y0 < y1) ystep = 1; else ystep = -1; 00268 /// 直線を点で描画 00269 for(x=x0; x<x1; x++) { 00270 if(steep) lcd_Pixel(y,x,Color); else lcd_Pixel(x,y,Color); 00271 error += deltay; 00272 if((error << 1) >= deltax) { 00273 y += ystep; 00274 error -= deltax; 00275 } 00276 } 00277 } 00278 /***************************************** 00279 * ANK文字表示関数 12x12ドット 00280 * 320/12=26文字/行 240/14=17行 00281 * (0, 0) - (25, 16)の範囲 00282 ******************************************/ 00283 void LCD192GC00::lcd_Char(char colum, char line, unsigned char letter, unsigned short Color1, unsigned short Color2){ 00284 unsigned char j, i, Mask; 00285 00286 if((colum < XChar) && (line < YLine)){ // 範囲チェック 00287 // ANK表示出力 3バイトの2ラインずつを6回繰り返す 00288 for(j=0; j<6; j++){ 00289 // 8ドット連続部の表示 00290 Mask = 0x80; 00291 for(i=0; i<8; i++){ 00292 // 1ライン目前半8ドット表示 00293 if((ANKFont[letter][j*3] & Mask) != 0) 00294 lcd_Pixel(colum*12+i, line*14+j*2, Color1); 00295 else 00296 lcd_Pixel(colum*12+i, line*14+j*2, Color2); //背景色 00297 // 2ライン目後半8ドット表示 00298 if((ANKFont[letter][j*3+2] & Mask) != 0) 00299 lcd_Pixel(colum*12+i+4, line*14+j*2+1, Color1); 00300 else 00301 lcd_Pixel(colum*12+i+4, line*14+j*2+1, Color2); //背景色 00302 Mask = Mask >> 1; 00303 } 00304 // 分割部4ドットずつ表示 00305 Mask = 0x80; 00306 // 1ライン目後半4ドット表示 00307 for(i=0; i<4; i++){ 00308 if((ANKFont[letter][j*3+1] & Mask) != 0) 00309 lcd_Pixel(colum*12+i+8, line*14+j*2, Color1); 00310 else 00311 lcd_Pixel(colum*12+i+8, line*14+j*2, Color2); //背景色 00312 Mask = Mask >> 1; 00313 } 00314 // 2ライン目前半4ドット表示 00315 for(i=4; i<8; i++){ 00316 if((ANKFont[letter][j*3+1] & Mask) != 0) 00317 lcd_Pixel(colum*12+i-4, line*14+j*2+1, Color1); 00318 else 00319 lcd_Pixel(colum*12+i-4, line*14+j*2+1, Color2); //背景色 00320 Mask = Mask >> 1; 00321 } 00322 } 00323 } 00324 } 00325 /****************************** 00326 * 文字列描画関数 00327 * 16文字x20行で指定 00328 ******************************/ 00329 void LCD192GC00::lcd_Str(char colum, char line, char *s, unsigned short Color1, unsigned short Color2) 00330 { 00331 while (*s){ 00332 lcd_Char(colum++, line, *s++, Color1, Color2); 00333 if(colum >= XChar){ 00334 line++; 00335 colum = 0; 00336 if(line >= YLine) 00337 line = 0; 00338 } 00339 } 00340 } 00341 00342 /********************************************************* 00343 * イメージ表示関数 00344 * データは縦方向8ライン分が1バイトで格納されている 00345 * 128×128/8=2kバイト/画面 00346 * グラフィック色(Color1)と背景色(Color2)両方を指定 00347 **********************************************************/ 00348 void LCD192GC00::lcd_Image(char line, const unsigned char *ptr, unsigned short Color1, unsigned Color2) 00349 { 00350 unsigned char Mask; 00351 short i, vline, colum; 00352 00353 00354 for(vline=line; vline<line+8; vline++){ // 全体は8行×8=64ライン 00355 for(colum=0; colum<128; colum++){ // 横は128ドットとする 00356 Mask = 0x01; // 下位ビットが上側 00357 for(i=0; i<8; i++){ // 1バイト分処理 00358 if(*ptr & Mask) // ビットチェック 00359 lcd_Pixel(colum+2, vline*8+i+1, Color1); 00360 else 00361 lcd_Pixel(colum+2,vline*8+i+1, Color2); 00362 Mask = Mask << 1; // ビット位置シフト 00363 } 00364 ptr++; // 次のデータ 00365 } 00366 } 00367 } 00368 00369 void LCD192GC00::_delay(uint16_t t) 00370 { 00371 };
Generated on Fri Jul 15 2022 03:38:15 by 1.7.2