/********************************************* * PIC18F14K50 * LCD_TEST: 液晶表示器の表示制御テスト * * 内蔵発振器:16MHz使用 * Tcy= 1/(16M/4)= 250nS * * 2015/2/9 N.Ishii **********************************************/ #include #include "LCD_Lib_PIC18F.h" #pragma config FOSC = IRC, PLLEN = ON, FCMEN = OFF #pragma config IESO = OFF, USBDIV = OFF, CPUDIV = NOCLKDIV #pragma config PWRTEN = OFF, BOREN = OFF, WDTEN = OFF #pragma config HFOFST = OFF, MCLRE = OFF #pragma config STVREN = ON, BBSIZ = OFF, LVP = OFF #pragma config XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CPB = OFF #pragma config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF /// Message char MsgStart[] = "Start!"; char MsgEnd[] = "End!"; //------------------------------------------------------------------------------ void lcd_check(void) { unsigned char check_chr; lcd_str(MsgStart); // 開始メッセージ1行目表示 delay_ms(600); lcd_clear(); // 全消去 check_chr = 0x20; // space set //DDRAM Eria Check while (check_chr != 0) { lcd_data(check_chr); // check chr = 20h - ffh if ((check_chr & 0x0f) == 0x0f) { // Check Char = *fh: End of 1Line? // Check Char = 2fh, 4fh, 6fh, afh, cfh, efh Then DDRAM Start Address Set= 40H(Lower Line) if ((((check_chr & 0xf0)>>4)%2) == 0) lcd_cmd(0xc0); // Check Char = 3fh, 5fh, 7fh, bfh, dfh, ffh Then DDRAM Start Address Set= 00H(Upper Line) else lcd_cmd(0x80); } ++check_chr; delay_ms(50); } delay_ms(1000); lcd_clear(); // 全消去 //CGRAM Eria Check lcd_cg_ram_user_set(); // ユーザーキャラクタ表示 lcd_cmd(DDRAM_START_ADDRESS_SET); //change CGRAM -> DDRAM check_chr = 0; while(check_chr <= 7) { lcd_data(check_chr); delay_ms(200); ++check_chr; } delay_ms(1000); lcd_clear(); // 全消去 lcd_str(MsgEnd); // 終了メッセージ1行目表示 delay_ms(1000); lcd_clear(); // 全消去 } /***************** * メイン関数 ******************/ void main(void) { OSCCON = 0b11111111; // 16MHz internal clock UCONbits.USBEN = 0 ; // USBは使用しない /// この実験では、RE未使用なので、アナログ入力と併用の、RB4,5に該当する /// ANSELxビットを'0'にリセットする必要はないが、汎用的な意味でやっておく。 ANSELHbits.ANS10 = 0; // RB4 digital input ANSELHbits.ANS11 = 0; // RB5 digital input TRISC= 0; // RC is Output TRISB= 0b11110000; // RB4-7 is Input /// 内部プルアップ設定 INTCON2bits.RABPU = 0; // プルアップ許可(これが無いとプルアップされない) WPUB = 0b11110000; // RB4-7 is Pull-Up LATCbits.LATC2= 0; // LED 消灯 lcd_init(); // LCD初期化 /// メイン ループ while(1) { lcd_check(); } }