[ミニLCDのコントロール]の続きで応用編です。
4:I2C_LCD カスタム・キャラクタ作り(自作アイコンもどき)
5:ドット[キャラクター]の表示
6:SLEEPを使って、電源スイッチを略す(前回の応用)。
7:タイマ・ソフト
4: 自作アイコンを作る!
キャラクター作りを利用して、アイコンを試しに作ってみました。ミニI2C式のLCDは「以前のLCDを小形にしてコントロールをI2Cにした物」です。従来から使われているICと同じなので内臓のRAMエリアにDATAを書き込めます。
これによって、5X7ドットの文字が作れますが絵なども同様に作れます。RAMは全体で8個まで作って保存(転送、アドレス0-7)出来ます。写真は大形の表示器です、同じ動作なのでこれを出して接続してみました。「●と…」です、意味ありませんが…。
使い方
1.5X7ドットの図を作ります、Max8個。
2.使いたい時は、普通の文字や数字と同じです。例えば、[1]なら[0x30]を転送すれば表示出来ますが、RAMエリア0番地に送ったものなら[0]を送れば良い。もちろん何度呼び出してもかまわない。
-------- 0 -------- 0 ----***- 14 ---***** 31 ---***** 31 ----***- 14 -------- 0 -------- 0 保存(転送)方法
出来たキャラクターDATAをRAMへ保存します。これはLCDの初期設定した直後に送ると良い。
コマンドのアドレスが[0x40]でDATAが上の行から8個順に送ります。アドレスも送るのですが、同じ場合自動で+1されるのでDATAだけをドンドン送れば良いのです。
次のキャラクターもドンドン送るか、アドレスを[0X48]と8を加えてから送り、DATAを順に転送します。後は方法は同じです。前の3bitは使わないのと、一番下はカソールをコントロールすると消えるので使わない方が良い。
キャラクターはmikroCのコンパイラにおまけにツールが入っているので利用出来ます[π]。但し普通のLCD用のプログラムが出て来るのでこれは使わず、DATAだけを利用します。
サンプル・プログラム
const char character0[] = {0,0,14,31,31,14,0,0}; //
void CustomChar() {
char i;
Lcd_Comd(0x40);
// Start Address
for (i = 0; i <= 7; i++)
Lcd_Data (character1[i]); // Data 0
}
5: ドット[キャラクター]の表示
数字をドットに変換し視覚的に表す。
このセットはタイマーにしたので、秒を表す道具として使いました。実際は0-9までをドットにとして表示します、ちようど「0」の時は全てのドットをクリヤーして見易くしている。
上の写真下側に並んでいる●と…の部分です。規格外のキャラクターを作った一寸とした遊びです。これは1秒おきに●が出て来るものです。
サンプル・プログラム
Lcd_Comd(0xC0); //set Line 2 dot display
for (cnt=0x30; cnt < 0x39; cnt++) {
if (R0==0x39)
Lcd_Data(0x20); //
else {
if (cnt <=R0)
Lcd_Data(0x00); //"*"
else
Lcd_Data(0x20); //
}
}
6: SLEEPを使って、電源スイッチを略す(前回の応用)
現在の動作は2.6Vの電池(NI-MH:充電後の状態)で全電流0.56mAで動作しています。これを[SLEEP動作]させると1μA以下になりSWは必要ありません(私のテスターでは測定不能:これ以上はパソコンを動かさないと出来ません)。
電池は2.4V600mAを使っているので単純計算で1000時間以上、連続で45日以上持つはずです(もっと小形な電池が欲しい)。外部にボタンを追加していますが、これで電源スイッチの代わりです。
7: タイマ・ソフト
単に「画面に出た程度では寂しい!」という事でTimerを作ってみました。1秒をカウントアップして10秒、そして1分・10分・1時間の表示です。説明するほどの事も無いと思います。
1秒→10秒→(60)1分→10分→(60)1時間→(9時間)までただ、時間を内臓発振に頼っていますので精度は取れません。1時間に1分以下の誤差は認め「ある程度の時間が分かれば良い」というといどの使い道です。
一番上の写真は[2分7秒]の表示と7秒分の[●]の表示が出ています。
この辺までの実験で、PIC12F629を使って690バイトですから後300ぐらいの余裕があります。ここまでの[Soft]はこれです。
2010/12/24 作成