//////////////////////////////////////////////////////////// // 液晶表示ライブラリ for PIC18Fxxxx Ver 1.0 20120517 // 以下の機能を提供 18F26J50 // LCD_int() ----- 初期化 // LCD_cmd(cmd) ----- コマンド出力 // LCD_dat(chr) ----- 1文字表示 // LCD_str(*str) ---- 文字列表示 // LCD_ROMstr(*str) -- ROM文字列表示 // LCD_posyx(y,x) ---- カーソル位置指定、行 y、横位置 x // LCD_clr() ----- 全消去 // LCD_hex(chr) ----- 16進文字変換表示 // LCD_icon_on(icn);--- 指定アイコンON // LCD_icon_off(icn);-- 指定アイコンOFF // LCD_icon_clrf();---- 全アイコンOFF //////////////////////////////////////////////////////////// #include #include #include //I2C関数 #include "L_i2c1_LCD.h" //-------- 1文字表示 void LCD_dat(char chr){ EEByteWrite1(0x7C, 0x40, chr); Delay_50uS; // 50μsec } //-------- コマンド出力 void LCD_cmd(char cmd){ EEByteWrite1(0x7C, 0x00, cmd); if(cmd & 0xFC) // 上位6ビットに1がある命令 Delay_50uS; // 50usec else Delay_2mS; // 2msec ClearおよびHomeコマンド } //-------- 全消去 void LCD_clr(void){ LCD_cmd(0x01); //Clearコマンド出力 } //-------- カーソル位置指定 void LCD_posyx(char ypos, char xpos){ unsigned char pcode; switch(ypos & 0x03){ case 0: pcode=0x80;break; case 1: pcode=0xC0;break; case 2: pcode=0x94;break; case 3: pcode=0xD4;break; } LCD_cmd(pcode += xpos); } //-------- 文字列出力 void LCD_str(char *str){ EEPageWrite1(0x7C, 0x40, str); } //-------- Rom 文字列出力 void LCD_ROMstr(rom const char *str){ while(*str) //文字列の終わり(00)まで継続 LCD_dat(*str++); //文字出力しポインタ+1 } //-------- 初期化 void LCD_int(void){ Delay_100mS; LCD_cmd(0x38); // 8bit 2行 表示命令モード LCD_cmd(0x39); // 8bit 2行 拡張命令モード LCD_cmd(0x14); // OSC BIAS 設定1/5 // コントラスト設定 LCD_cmd(0x70 + (CONTRAST & 0x0F)); LCD_cmd(0x5C + (CONTRAST >> 4)); LCD_cmd(0x6B); // Ffollwer Delay_100mS; Delay_100mS; LCD_cmd(0x38); // 表示命令モード LCD_cmd(0x0C); // Display On LCD_cmd(0x01); // Clear Display } //-- 指定アイコン ON void LCD_icon_on(int icn){ LCD_cmd(0x39); // 拡張命令モード LCD_cmd(icn >> 8); // Icon アドレス LCD_dat(icn & 0xFF); // Icon ビット LCD_cmd(0x38); // 表示命令モード } //-- 指定アイコン OFF void LCD_icon_off(int icn){ LCD_cmd(0x39); // 拡張命令モード LCD_cmd(icn >> 8); // Icon アドレス LCD_dat(0x00); // Icon ビット LCD_cmd(0x38); // 表示命令モード } //-- 全アイコン OFF void LCD_icon_clr(void){ unsigned char icn = 0x40; LCD_cmd(0x39); // 拡張命令モード while(icn <= 0x4F){ LCD_cmd(icn++); // Icon アドレス LCD_dat(0x00); // Icon ビット } LCD_cmd(0x38); // 表示命令モード } //-------- 16進文字変換表示 void LCD_hex(char c){ LCD_hxH(c); LCD_hxL(c); } //**************************************************************** // LCD_hxL(char) 引数の下位4ビットの16進文字を表示 // LCD_hxH(char) 引数の上位4ビットの16進文字を表示 //**************************************************************** char LCD_hxL(char c){ c = c & 0x0F; // 下位4ビットを取り出す if(c < 10){ // 9以下なら c += 0x30; // '0'の文字コードを加える }else{ // 10以上なら c += (0x41-10); // (c-10)に } // 'A'の文字コードを加える LCD_dat(c); } char LCD_hxH(char c){ // 上位4ビットを下位に移動し return LCD_hxL(c >> 4); // 下位の16進文字を返す }