//========================================================// // 2009.5.12 // LCD表示用関数 // Ver 1.0 //========================================================// #include "delay.h" //関数ないでDelayMs()を使用しているため必要 #define LCD_RS RB2 //RS端子をポートBの2番ピンに #define LCD_E RB3 // E端子をポートBの3番ピンに #define PORTX PORTB //任意のポートで使用できるように(今はポートB) //********** LCDにデータを送信する関数 *************// //この関数が送信機能を持つ基本の部分です。 //********************************************// void lcd_out(char code, int flag){ //codeは送信するデータが入った変数 flagはコマンドかデータの選択をする変数 PORTX = ((code & 0xf0) | (PORTX & 0x0f)); //codeの上位4ビットと 今現在のポートの下位4ビットの状態を合わせて、出力 if(flag == 0) //flagが0ならデータ 1ならコマンド LCD_RS = 1; else LCD_RS = 0; NOP(); //時間稼ぎ LCD_E = 1; //LCDのE端子に5Vを出力 NOP(); NOP(); NOP(); LCD_E = 0; //LCDのE端子を0Vに } //********** LCDに文字データを送信する関数 ************// void lcd_data(char asci){ //asciは文字データが入った変数 lcd_out(asci,0); //LCDにデータを送信する関数に文字データを渡す lcd_out(asci<<4,0); //データを4ビットシフトして送信用関数に渡す DelayUs(50); } //********** LCDにコマンドを送信する関数 **************// void lcd_cmd(char cmd){ //cmdにはコマンドデータが入ってます lcd_out(cmd,1); //コマンドデータを送信用関数に渡す lcd_out(cmd<<4,1); //コマンドデータを4ビットシフトして送信用関数に渡す DelayMs(2); } //********** LCDの画面をリセットするコマンドを送る関数 *******// void lcd_clear(){ lcd_cmd(0x01); //画面リセットコマンドを送信 DelayMs(15); } //********** LCDを初期化する関数 *********************// void lcd_init(){ //液晶を使うために必要な初期化の手順 DelayMs(15); //始めに15ms以上待つ lcd_out(0x30,1); //8bitモード設定 DelayMs(5); //4.1ms以上待つ lcd_out(0x30,1); //再度8bitモードに設定 DelayMs(1); //100μs以上待つ lcd_out(0x30,1); //またまた8bitモードに設定 DelayMs(1); // lcd_out(0x20,1); //4bitモードに設定 DelayMs(1); // lcd_cmd(0x2C); //ファンクション設定 lcd_cmd(0x08); //ディスプレイOFF lcd_cmd(0x0E); //ディスプレイON lcd_cmd(0x06); //エントリーモードセット lcd_cmd(0x02); //カーソルをホームに移動 }