メニュー
▼ アクセス(地図)
▼ Windowsアプリ開発 ▼ マイコン開発 ▼ CGI・PHP制作 |
▼ サイトマップ(全投稿記事)
▼ タイトル(画像一覧) ▼ 事業内容 |
お問い合わせメールフォームが開きます。
2010年10月12日
LCDディスプレイ DMC16117A
秋月電子より販売されている「LCDキャラクタディスプレイモジュール(16×1行バックライト無) DMC16117A」
http://akizukidenshi.com/catalog/g/gP-01704/
■オプトレックス日本製キャラクタLCDモジュール
■16文字x1行タイプ
■制御ICは日立44780互換ですのでSC1602などど同じように使える。
(ピン配列は異なる)
2行表示するものに比べ、300円と割安なので、気軽に利用可能です。
SC1602と同様の処理でOKですが、8文字目と9文字目のアドレスが連続していないので注意です。
CQ出版社のインターフェース付録のNEC V850 uPD70F3716 で使った際の表示モジュールのソースです。
簡易的に表示させるため、ビジー確認等々は省略しています。
LCDとマイコンとの配線は、付属の配線図通りです。
ソースファイル
#pragma ioreg
//───────────────────────────────────
// Includeの定義
//───────────────────────────────────
#include "Lcd.h"
//───────────────────────────────────
// 定数定義
//───────────────────────────────────
#define P_LCD_RS_ON P9 |= 0x0200
#define P_LCD_RS_OFF P9 &= ~0x0200
#define P_LCD_E_ON P9 |= 0x0100
#define P_LCD_E_OFF P9 &= ~0x0100
#define P_LCD_DATA P9L // D7-D4 ==> P94-P97
//───────────────────────────────────
// ユーザメモリ定義
//───────────────────────────────────
volatile unsigned char LcdTimer;
//───────────────────────────────────
// 1ms管理
//───────────────────────────────────
void LcdTimer1ms( void )
{
if (LcdTimer > 0) LcdTimer --;
}
//───────────────────────────────────
// 時間待ち
//───────────────────────────────────
static void LcdWait( unsigned char tmpTimer )
{
LcdTimer = tmpTimer;
for (;;)
{
if( LcdTimer == 0 ) break;
}
}
//───────────────────────────────────
// データストローブ
//───────────────────────────────────
static void LcdDataStrb(void)
{
P_LCD_RS_ON; // Data mode
P_LCD_E_ON;
LcdWait(0);
P_LCD_E_OFF;
P_LCD_RS_OFF;
}
//───────────────────────────────────
// コマンドストローブ
//───────────────────────────────────
static void LcdSetCmdStrb(void)
{
P_LCD_RS_OFF; // Command mode
P_LCD_E_ON;
LcdWait(0);
P_LCD_E_OFF;
}
//───────────────────────────────────
// コマンド初期化
//───────────────────────────────────
static void LcdInitCmd(char cmd)
{
P_LCD_DATA |= cmd;
LcdSetCmdStrb();
}
//───────────────────────────────────
// コマンド設定
//───────────────────────────────────
void LcdSetCmd(char cmd)
{
P_LCD_DATA &= 0x0f;
P_LCD_DATA |= (cmd & 0xf0);
LcdSetCmdStrb();
LcdWait(0);
P_LCD_DATA &= 0x0f;
P_LCD_DATA |= (cmd << 4);
LcdSetCmdStrb();
LcdWait(5);
}
//───────────────────────────────────
// 初期化関数
//───────────────────────────────────
void LcdInit(void)
{
P_LCD_RS_OFF;
P_LCD_E_OFF;
LcdWait(15); // Wait 15ms
LcdInitCmd(0x30);
LcdWait(5);
LcdInitCmd(0x30);
LcdWait(2);
LcdInitCmd(0x30);
LcdWait(2);
LcdInitCmd(0x20); // mode 4bit
LcdWait(10);
LcdSetCmd(0x28); // DL=0,N=1,F=0 4bit,2lines,5x7dot
LcdSetCmd(0x08); // D=0,C=0,B=0 display off,cursor off,blink off
LcdSetCmd(0x01); // Clear display
LcdSetCmd(0x06); // I/D=1,S=0 DDRAM addr +1,Shift on
LcdSetCmd(0x28);
LcdSetCmd(0x0c); // D=1,C=1,B=1 display on,cursor off,blink off
}
//───────────────────────────────────
// 表示クリア
//───────────────────────────────────
void LcdDispClear(void)
{
LcdSetCmd(0x01);
}
//───────────────────────────────────
// 文字列表示
//───────────────────────────────────
void LcdOutput(char *str)
{
char unsigned chr;
chr = *str ++;
while( chr != '\0' )
{
P_LCD_DATA &= 0x0f;
P_LCD_DATA |= (chr & 0xf0);
LcdDataStrb();
LcdWait(0);
P_LCD_DATA &= 0x0f;
P_LCD_DATA |= (chr << 4);
LcdDataStrb();
LcdWait(1);
chr = *str ++;
}
}
ヘッダ(Lcd.h)ファイル
void LcdInit(); // LCD初期化関数
void LcdDispClear(void); // 表示クリア
void LcdOutput(char *str); // 文字列表示
void LcdSetCmd(char cmd); // コマンド設定
void LcdTimer1ms(void); // 1m秒管理
利用方法
#include "Lcd.h"
1msecタイマ割込みで呼ぶ
LcdTimer1ms();
メイン処理で実行
//タイマ割込み許可後に実行!
LcdInit(); // LCD初期化関数
LcdSetCmd(0x80); // 0~8文字まで
LcdOutput("Hamamats");
LcdSetCmd(0xC0); // 9文字目から
LcdOutput("u micom ");