#ifndef _H8_LCD_H #define _H8_LCD_H #include "h8_sample.h" // 4ビットモード出力 void LCD_Output( unsigned char d, unsigned char rs ) { LCD.BIT.RS = rs; // RSセット _nop(); _nop(); LCD.BIT.D = ( d >> 4 ) & 0x0F; // 上位4ビット出力 LCD.BIT.E = 1; // E -> Hi wait20us(); LCD.BIT.E = 0; // E -> Low wait20us(); LCD.BIT.RS = rs; // RSセット _nop(); _nop(); LCD.BIT.D = d & 0x0F; // 上位4ビット出力 LCD.BIT.E = 1; // E -> Hi wait20us(); LCD.BIT.E = 0; wait20us(); } // 電源投入時LCD初期化 void LCD_Init(void) { wait(20); // 電源オンから15ミリ秒以上のウェイトが必要 LCD.BIT.RS = 0; // コマンド _nop(); _nop(); LCD.BIT.D = 3; // ファンクションセット(何でもいい) LCD.BIT.E = 1; // E -> Hi wait20us(); LCD.BIT.E = 0; // E -> Hi wait(5); // wait >= 4.5ms LCD.BIT.RS = 0; // コマンド _nop(); _nop(); LCD.BIT.D = 3; // ファンクションセット(何でもいい) LCD.BIT.E = 1; // E -> Hi wait20us(); LCD.BIT.E = 0; // E -> Hi wait(1); // wait >= 100us LCD.BIT.RS = 0; // コマンド _nop(); _nop(); LCD.BIT.D = 3; // ファンクションセット(8ビット接続) LCD.BIT.E = 1; // E -> Hi wait20us(); LCD.BIT.E = 0; // E -> Hi wait20us(); wait20us(); wait20us(); wait20us(); wait20us(); LCD.BIT.RS = 0; _nop(); _nop(); LCD.BIT.D = 2; // ファンクションセット=4ビット接続 LCD.BIT.E = 1; wait20us(); LCD.BIT.E = 0; wait20us(); wait20us(); wait20us(); wait20us(); wait20us(); LCD_Output( 0x28, 0 ); // ファンクションセット=2行表示 wait20us(); wait20us(); wait20us(); wait20us(); LCD_Output( 0x08, 0 ); // 表示オフ wait20us(); wait20us(); wait20us(); wait20us(); LCD_Output( 0x0E, 0 ); // 表示オン、カーソルオン、カーソルブリンクオン wait20us(); wait20us(); wait20us(); wait20us(); LCD_Output( 0x06, 0 ); // エントリーモードセット=書き込み時アドレス増、シフトなし wait20us(); wait20us(); wait20us(); wait20us(); LCD_Output( 0x01, 0 ); // 表示クリア wait(2); // wait >= 1.65ms } // カーソル位置変更 void LCD_Locate( unsigned char line, unsigned char col ) { unsigned char d; d = 0x80; if( line ) d = 0xC0; d |= col; LCD_Output( d, 0 ); } // 1文字出力 void LCD_Putchar( unsigned char d ) { LCD_Output( d, 1 ); } // 1行出力 void LCD_Putstr( unsigned char *str ) { while( *str != '\0' ) { LCD_Putchar( *(str++) ); } } #endif