first commit

Dependents:   Aitendo_2P-REL225L01

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LCD192GC00.cpp Source File

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 };