ALO-095BWNN-J9 aitendo OLED 96x64 SPI model Ver1.04

Revision:
3:eab8d193745a
Parent:
2:e331851128c1
Child:
4:b68843c0269c
--- a/spioled96x64.cpp	Wed Jan 12 07:47:32 2011 +0000
+++ b/spioled96x64.cpp	Wed Jan 12 07:54:58 2011 +0000
@@ -1,9 +1,9 @@
 // ALO-095BWNN-J9 test program
 // See also "http://www.aitendo.co.jp/product/2099"
-// Ver1.00 ‰”ÅŠ®¬
-// Ver1.01 ƒtƒHƒ“ƒg‚ðk6x8ƒtƒHƒ“ƒg‚ɕύXB’è‹`‚gƒtƒ@ƒCƒ‹‚à‘SŠp‚Æ‚Í•ª—£
-//         ƒtƒHƒ“ƒg•`‰æƒ‹[ƒ`ƒ“‚ª‚Pƒhƒbƒg‚·‚­‚È‚­“®‚­‚Ì‚ðC³
-//         ”CˆÓƒJƒ‰[ƒpƒ^[ƒ“‚ð•`‰æ‚Å‚«‚é‚悤‚ɏC³
+// Ver1.00 初版完成
+// Ver1.01 フォントをk6x8フォントに変更。定義Hファイルも全角とは分離
+//         フォント描画ルーチンが1ドットすくなく動くのを修正
+//         任意カラーパターンを描画できるように修正
 
 
 #include "mbed.h"
@@ -13,14 +13,14 @@
 #define countof(x) ( sizeof(x) / sizeof(x[0]) )
 
 
-// ƒRƒ“ƒXƒgƒ‰ƒNƒ^
+// コンストラクタ
 SPIOLED96x64::SPIOLED96x64(PinName cs_pin, PinName rst_pin, PinName a0_pin, PinName mosi_pin, PinName miso_pin, PinName sclk_pin)
             : CS(cs_pin), RES(rst_pin), DC(a0_pin), spi(mosi_pin, miso_pin, sclk_pin) 
 {
     Init();
 }
 
-// ƒCƒjƒVƒƒƒ‰ƒCƒU
+// イニシャライザ
 void SPIOLED96x64::Init(void)
 {
 
@@ -90,7 +90,7 @@
     Fill_Screen(0);
 }
 
-// ƒŒƒWƒXƒ^ƒ‰ƒCƒg
+// レジスタライト
 void  SPIOLED96x64::RegWrite(unsigned char Command)
 {
     DC = 0;    // Command
@@ -98,7 +98,7 @@
     spi.write(Command);
     CS = 1;
 }
-// ƒ}ƒ‹ƒ`ƒoƒCƒg ƒŒƒWƒXƒ^Ý’è
+// マルチバイト レジスタ設定
 void  SPIOLED96x64::RegWriteM(unsigned char *Command, int count)
 {
     int i;
@@ -111,7 +111,7 @@
 }
 
 
-// ƒf[ƒ^ƒ‰ƒCƒg
+// データライト
 void  SPIOLED96x64::DataWrite(unsigned char c)
 {
      DC = 1;    // DATA
@@ -120,7 +120,7 @@
      CS = 1;
 }
 
-// 16ƒrƒbƒg‘‚«ž‚Ý
+// 16ビット書き込み
 void  SPIOLED96x64::DataWrite_to(unsigned int Dat)
 {
      DC = 1;    // DATA
@@ -136,7 +136,7 @@
 
 
 
-// Žw’èÀ•W‚ÉŽw’èF‚Ńhƒbƒg•`‰æ
+// 指定座標に指定色でドット描画
 void SPIOLED96x64::Draw_Dot(int x,int y,unsigned int Color)
 {
     unsigned char cmd[7]={0x15,0x00,0x00,0x75,0x00,0x00,0x00};
@@ -176,7 +176,7 @@
 {
     chr_size = Csize;
 }
-//@c‰¡‚Ì”{—¦•Ï‰»—Ê‚ð•Ô‚·
+// 縦横の倍率変化量を返す
 void SPIOLED96x64::CS_Conv(int *lpx,int *lpy)
 {
     switch( chr_size ){
@@ -205,9 +205,9 @@
     
 }
 
-// ‘SŠpƒLƒƒƒ‰ƒNƒ^‚Ì•`‰æˆ—
-// ƒAƒXƒL[ƒLƒƒƒ‰ƒNƒ^‚̈ʒuŽw’è•\Ž¦(5x7dotƒtƒHƒ“ƒg)
-// ƒtƒHƒ“ƒg‚Ì“Á«ãAÅãˆÊƒrƒbƒg‚©‚珇‚Ɂª•ûŒü‚É‹Lq‚³‚ê‚é
+// 全角キャラクタの描画処理
+// アスキーキャラクタの位置指定表示(5x7dotフォント)
+// フォントの特性上、最上位ビットから順に↑方向に記述される
 void SPIOLED96x64::PutChar(int x,int y,unsigned int a)
 {
     int i,j;
@@ -237,7 +237,7 @@
 }
 
 
-// ƒˆ‰¼‘zŠÖ”‚Åputc‚ðŽÀŒ»
+// 純粋仮想関数でputcを実現
 int SPIOLED96x64::_putc( int c )
 {
     static bool kstate = false;
@@ -257,7 +257,7 @@
         w = X_Witch;
     } else {
         p = c;
-        w = X_WitchASC;  // ”¼Šp‚͋ߐڂ·‚é‚̂ŁA‚Pƒhƒbƒg‚ ‚¯‚é
+        w = X_WitchASC;  // 半角は近接するので、1ドットあける
     }
     PutChar( x_locate , y_locate ,p);
     CS_Conv(&lpx, &lpy);
@@ -266,7 +266,7 @@
 
     /*
     if(kstate== false){
-        //‰æ–ʉE’[‚ł̃NƒŠƒbƒsƒ“ƒO
+        //画面右端でのクリッピング
         if(x_locate + (xsize - 1) >= Dis_X_MAX){
             x_locate = 0;
             y_locate += Y_Witch;
@@ -306,7 +306,7 @@
     return x_locate;
 }
 
-// SJISŠ¿ŽšƒR[ƒhƒe[ƒuƒ‹‚©‚çŽw’è‚Ì”z—ñƒAƒhƒŒƒX‚ðŽZo‚·‚é
+// SJIS漢字コードテーブルから指定の配列アドレスを算出する
 unsigned int SPIOLED96x64::findface(unsigned short c)
 {
     unsigned int p = 0;
@@ -321,7 +321,7 @@
     return p;
 }
 
-// ‚q‚f‚a(555)‚ðRGB565’l‚É•ÏŠ·
+// RGB(555)をRGB565値に変換
 // 00~1F(0~31)
 unsigned int SPIOLED96x64::ColorConv(unsigned int R,unsigned int G,unsigned int B)
 {
@@ -338,7 +338,7 @@
     ret = (bv << 11) + (gv << 5) + rv;
     return ret;
 }
-// ‰æ–Ê‚ÌŽw’èF“h‚è‚‚ԂµŽw’è—̈悵
+// 画面の指定色塗りつぶし指定領域し
 void SPIOLED96x64::Box(int x1,int y1, int x2, int y2, unsigned int Color, int fill)
 {
     unsigned char i,j;
@@ -363,41 +363,41 @@
     }
 }
 
-// ‰æ–Ê‚ÌŽw’èF“h‚è‚‚Ԃµ
+// 画面の指定色塗りつぶし
 void SPIOLED96x64::Fill_Screen(unsigned int Color)
 {
     BGround_Color = Color;
     Box( 0,0, Dis_X_MAX, Dis_Y_MAX , Color , 1);
 }
 
-// Bresenham‚̐ü•ª”­¶ƒAƒ‹ƒSƒŠƒYƒ€
-// ®”‚Ì‚Ý‚É‚æ‚éü•ª•`‰æ
-// (x0,y0)-(x1,y1)‚ւ̃‰ƒCƒ“•`‰æ          ŽQÆ:http //www2.starcat.ne.jp/~fussy/algo/algo1-1.htm
-// pat : 0:ŽÀü    1:”jü
+// Bresenhamの線分発生アルゴリズム
+// 整数のみによる線分描画
+// (x0,y0)-(x1,y1)へのライン描画          参照:http //www2.starcat.ne.jp/~fussy/algo/algo1-1.htm
+// pat : 0:実線    1:破線
 void SPIOLED96x64::line( int x0,  int y0,  int x1,  int y1, unsigned int fore_col ,int pat  )
 {
     int E,x,y;
     int dx,dy,sx,sy,i;
     int cl=1 ;
-    int clc=0;    // ”jü—p‚̃JƒEƒ“ƒ^
+    int clc=0;    // 破線用のカウンタ
     
-    sx = ( x1 > x0 ) ? 1 : -1;              // x‚̈ړ®•ûŒü
-    dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1;   // x‚̈ړ®—Ê
-    sy = ( y1 > y0 ) ? 1 : -1;              // y‚̈ړ®•ûŒü
-    dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1;   // y‚̈ړ®—Ê
+    sx = ( x1 > x0 ) ? 1 : -1;              // xの移動方向
+    dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1;   // xの移動量
+    sy = ( y1 > y0 ) ? 1 : -1;              // yの移動方向
+    dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1;   // yの移動量
 
     x = x0;
     y = y0;
 
     if( dx >= dy ) {
-        /* ŒX‚«‚ª1ˆÈ‰º‚̏ꍇ */
+        /* 傾きが1以下の場合 */
         E = -dx;
         for( i = 0; i <= dx; i++ ) {
             switch( pat ) {
-            case 0:     // ŽÀü
+            case 0:     // 実線
                 cl = fore_col;
                 break;
-            default:    // ”jü
+            default:    // 破線
                 if ( clc>=3 ) {
                     if ( cl==fore_col ) cl=BGround_Color;
                     else                cl=fore_col;
@@ -417,14 +417,14 @@
             }
         }
     }else{
-        /* ŒX‚«‚ª1‚æ‚è‘å‚«‚¢ê‡ */
+        /* 傾きが1より大きい場合 */
         E = -dy;
         for( i = 0; i <= dy; i++ ) {
             switch( pat ) {
-            case 0:     // ŽÀü
+            case 0:     // 実線
                 cl = fore_col;
                 break;
-            default:    // ”jü
+            default:    // 破線
                 if ( clc>=3 ) {
                     if ( cl==fore_col ) cl=BGround_Color;
                     else                cl=fore_col;
@@ -446,9 +446,9 @@
     }
 }
 
-// ƒ~ƒbƒ`ƒFƒi[(Miechener) ‚̉~•`‰æ  ŽQl:http://dencha.ojaru.jp/programs_07/pg_graphic_09a1.html
-// x,y : ’†S“_
-// radius: ”¼Œa
+// ミッチェナー(Miechener) の円描画  参考:http://dencha.ojaru.jp/programs_07/pg_graphic_09a1.html
+// x,y : 中心点
+// radius: 半径
 void SPIOLED96x64::circle (int radius, int x, int y , unsigned int col, int fill)
 {
     int  cx, cy, d;
@@ -456,11 +456,11 @@
     d = 3 - 2 * radius;
     cy = radius;
 
-    // ‰ŠúÀ•W‚ð‚ ‚ç‚©‚¶‚ß•`‰æ‚·‚é
-    Draw_Dot(         x,  radius+y, col );    // À•W ( 0, R );
-    Draw_Dot(         x, -radius+y, col );    // À•W ( 0, -R);
-    Draw_Dot(  radius+x,         y, col );    // À•W ( R, 0 );
-    Draw_Dot( -radius+x,         y, col );    // À•W (-R, 0);
+    // 初期座標をあらかじめ描画する
+    Draw_Dot(         x,  radius+y, col );    // 座標 ( 0, R );
+    Draw_Dot(         x, -radius+y, col );    // 座標 ( 0, -R);
+    Draw_Dot(  radius+x,         y, col );    // 座標 ( R, 0 );
+    Draw_Dot( -radius+x,         y, col );    // 座標 (-R, 0);
     if ( fill ) {
         line(        x,  radius+y,          x, -radius+y, col ,0  );    
         line( radius+x,         y,  -radius+x,         y, col ,0  );    
@@ -474,34 +474,34 @@
             d += 6 + 4 * cx;
         }
 
-        // •`‰æ
-        Draw_Dot(  cy + x,  cx + y, col);      // 0-45     “x‚ÌŠÔ
-        Draw_Dot(  cx + x,  cy + y, col);      // 45-90    “x‚ÌŠÔ
-        Draw_Dot( -cx + x,  cy + y, col);     // 90-135   “x‚ÌŠÔ
-        Draw_Dot( -cy + x,  cx + y, col);     // 135-180  “x‚ÌŠÔ
+        // 描画
+        Draw_Dot(  cy + x,  cx + y, col);      // 0-45     度の間
+        Draw_Dot(  cx + x,  cy + y, col);      // 45-90    度の間
+        Draw_Dot( -cx + x,  cy + y, col);     // 90-135   度の間
+        Draw_Dot( -cy + x,  cx + y, col);     // 135-180  度の間
 
-        Draw_Dot( -cy + x, -cx + y, col);    // 180-225  “x‚ÌŠÔ
-        Draw_Dot( -cx + x, -cy + y, col);    // 225-270  “x‚ÌŠÔ
-        Draw_Dot(  cx + x, -cy + y, col);     // 270-315  “x‚ÌŠÔ
-        Draw_Dot(  cy + x, -cx + y, col);     // 315-360  “x‚ÌŠÔ
+        Draw_Dot( -cy + x, -cx + y, col);    // 180-225  度の間
+        Draw_Dot( -cx + x, -cy + y, col);    // 225-270  度の間
+        Draw_Dot(  cx + x, -cy + y, col);     // 270-315  度の間
+        Draw_Dot(  cy + x, -cx + y, col);     // 315-360  度の間
 
         if ( fill ) {
             line(  cy + x,  cx + y,  cy + x, -cx + y, col ,0 );    
-            line(  cx + x,  cy + y,  cx + x, -cy + y, col ,0 );      // 45-90    “x‚ÌŠÔ
-            line( -cx + x,  cy + y, -cx + x,  cy + y, col ,0 ) ;     // 90-135   “x‚ÌŠÔ
-            line( -cy + x,  cx + y, -cy + x,  cx + y, col ,0 );     // 135-180  “x‚ÌŠÔ
+            line(  cx + x,  cy + y,  cx + x, -cy + y, col ,0 );      // 45-90    度の間
+            line( -cx + x,  cy + y, -cx + x,  cy + y, col ,0 ) ;     // 90-135   度の間
+            line( -cy + x,  cx + y, -cy + x,  cx + y, col ,0 );     // 135-180  度の間
 
-            line( -cy + x, -cx + y, -cy + x,  cx + y, col ,0 );    // 180-225  “x‚ÌŠÔ
-            line( -cx + x, -cy + y, -cx + x,  cy + y, col ,0 );    // 225-270  “x‚ÌŠÔ
-            line(  cx + x, -cy + y,  cx + x,  cy + y, col ,0 );     // 270-315  “x‚ÌŠÔ
-            line(  cy + x, -cx + y,  cy + x,  cx + y, col ,0 );     // 315-360  “x‚ÌŠÔ
+            line( -cy + x, -cx + y, -cy + x,  cx + y, col ,0 );    // 180-225  度の間
+            line( -cx + x, -cy + y, -cx + x,  cy + y, col ,0 );    // 225-270  度の間
+            line(  cx + x, -cy + y,  cx + x,  cy + y, col ,0 );     // 270-315  度の間
+            line(  cy + x, -cx + y,  cy + x,  cx + y, col ,0 );     // 315-360  度の間
         }
 
     }
 }
 
 // Color Pattern
-// pattern *P ‚Í‚q‚f‚a‚T‚U‚T(‚QƒoƒCƒgŒ^)‚̃f[ƒ^”z—ñ‚Å“n‚·
+// pattern *P はRGB565(2バイト型)のデータ配列で渡す
 void SPIOLED96x64::Pattern(int x,int y,int width, int height, unsigned int *p)
 {
 
@@ -517,4 +517,3 @@
 
 
 
-