アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。現在NECの78Kシリーズのマイコンを使って有機ELディスプレイの表示をさせるため、悪戦苦闘しています。制御ドライバーは「SH1101A」という台湾メーカー?のものを使って制御させようとしています。
イニシャルをかけ、ディスプレイに画像を表示させるところまではできました。しかし、128X64のドットマトリクスを使い指定の文字を制御させるという事がどうしてもできずに困っています。

フォントはMicro chipのPIC18F4XK20 Starter Kit から参考にして
rom unsigned char g_pucFont[95][5] =
{
{ 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! 0x21
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22
というような配列を流用して8X5ドットにて文字フォントを作成する
ところまではできました。

その文字フォントを使って、ディスプレイ表示関数に「Hello World!」などの文字を入力したら、ディスプレイにその文字を反映させるという事がしたいのです。

下記はイメージです。
void Display(*pd) のような関数をつくり
Display(Hello Wolrd!); という命令が来たらディスプレイに文字を
表示させるという流れです。
要は関数で指定した文字を表示させたいだけなのです。。

C言語のプログラムでご指導していただけると幸いです。

サンプルプログラムと同じ環境PIC18FXK20であればすんなり動くのでしょうが、78Kに移植しなければいけないのでうまくいっておりません。
まわりでも出来る人がいなく、ネットで検索をかけてもSH1101Aサンプルプログラムなどの情報が少なく困っています。申し訳ありませんが、ご教授お願い致します。

A 回答 (2件)

>C言語のプログラムでご指導していただけると幸いです。


は本気でソースを書くとかなりメンドイので概略だけ。

font_tbl[256];    // フォントテーブル(ASCII:0x00-0xff)
int sample( char *a_str )
{
 // 一応バッファの確認
 if( a_str == NULL )
  return 1;

 // 文字列の終端までループ
 //(オーバーフロー対策として、データ長チェックもつけると安全度が増す)
 while( *a_str != '\0' )
 {
  // font_tbl[*a_str]のマップデータを表示する処理
  a_str++;  // 次のデータ位置へ
 }
 return 0;
}
    • good
    • 0
この回答へのお礼

SnowShower様 ご回答有難うございます。
ご参考に示していただいたプログラムはフォントとドットマトリクスとの
関連性ができた後の流れなのかなと思っています。
1ドットずつプロットする関数を作成し、g_pucFont[95][5] との係わり合いをプログラム化する作業が先に入ってくるのかと思いますが、C言語が不慣れなため、その部分が作成できていない状態です。。。
一度作ってしまったらなんだこんなもんかなどと思うのでしょうが、経験不足のためパニくっています。。

お礼日時:2010/03/16 00:00

No.1です。


確認させてください。
>イニシャルをかけ、ディスプレイに画像を表示させるところまではできました。
>というような配列を流用して8X5ドットにて文字フォントを作成する
ところまではできました。
ということなので、LCDのドットと表示データのドットの関係が理解できていると思っていたのですが、ひょっとしてこの部分を理解されてない状態ですか?
No.1はそこは理解しているうえでの回答だったのですが……

使用するドライバーによって制御方式は多種多様なのでこの部分がわからないとどうしようもないのですが、
代表的な「アドレスマッピング」型であれば、左上や左下等の一点から8bitもしくは16bitのサイズでアドレスが割り当てられています。
例えば、左上が開始点で8bit単位のデータサイズであれば、
1行目:アドレス 0~15(128/8bit=16)
2行目:アドレス16~31
 |
64行目:アドレス1008~1023
となります。
左上(0,0)に表示するなら、「アドレス0に[0]のデータ、アドレス16に[1]のデータ……」という形です。
ここで問題となるのが、表示位置が8bit単位「以外」の場合です。
この場合は、そのままデータを送るのではなく、ビットをずらして設定する必要があります。
「abcd efgh」というビットを「左から2ビット目」から表示する場合には
アドレス0に「**ab cdef」、アドレス1に「gh** ****」をセットする必要あります。
「ビットシフト」や「論理演算」は大丈夫ですよね?

違うところがわからないのであれば、その部分を書いていただけると回答しやすいです。
    • good
    • 0
この回答へのお礼

ご連絡有難うございます。
前回頂いた回答とビットマップとの関連性を再整理することにより、
無事指定の文字を8x8ドットにて表示させることに成功しました!
といってもポインタの概念を根底から理解しているわけではなく、
とりあえず動作したというレベルですので、まだまだ改良が必要です・・・
ご丁寧にご回答して頂きありがとうございました!!

お礼日時:2010/03/17 00:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!