******************************************** main ここから********************************************* #include <pic.h> #include <htc.h> #include <stdio.h> #include <string.h> __CONFIG(PWRTEN & WDTDIS & MCLREN & INTIO);/*内部発振*/ //__CONFIG(PWRTEN & WDTDIS & MCLREN & HS);/*水晶発振*/ //#define _XTAL_FREQ 20000000 #define _XTAL_FREQ 31000 /* 31kHz */ #define JIKAN 500 /* 500ミリ秒 */ #define PORT PORTC #define ENABLE RA0 #define RS RA1 #define JIKAN1 1100 #define JIKAN2 500 lcd_position(unsigned char); void putch(unsigned char moji); lcd_init(); ioport(); int pos=0; main() { OSCCON=0;//INTCONにするときに必要で0は31Khz ioport(); lcd_init(); /* LCDを初期化する */ while(1){ //表示位置 pos=0; lcd_position(pos); //通常表示 printf("CQ CQ DE JA3RUA "); //表示位置 pos=40; lcd_position(pos); printf("PSE K "); __delay_ms(JIKAN1); lcd_clear(); __delay_ms(JIKAN1); } } ioport() { ANSEL=0; ANSELH=0; TRISA=0x30; /*RA0-3ピンを出力に、RA4,RA5ピンを入力設定*/ TRISB=0; /*PORTB全ピンを出力に設定*/ TRISC=0; /*PORTC全ピンを出力に設定*/ PORTA=0x00; /*PORTA全ピンをLに設定 16進*/ //PORTB=0xFF; /*PORTB全ピンをHに設定 16進*/ PORTC=0x00; /*PORTC全ピンをLに設定 16進*/ //PORTA=0b01010101; /*PORTAピンをLHLHLHLHに設定 2進*/ //PORTB=0b10101010; /*PORTBピンをHLHLHLHLに設定 2進*/ //PORTC=0b01010101; /*PORTCピンをLHLHLHLHに設定 2進*/ } void putch(unsigned char nandemo) /* PUTCH */ { RS=1; ENABLE=0; __delay_us(80); PORT=(nandemo>>4)&0x0F; // 書込みはEが1→0 ENABLE=1; ENABLE=0; PORT=nandemo&0x0F; // 書込みはEが1→0 ENABLE=1; ENABLE=0; } ******************************************** main ここまで********************************************* ******************************************** init ここから********************************************* ///////////////////////////////////////////////////////////////////////////////////////////////////////// // イニシャライズ手順 インターフェースデータ長4bit(データシートから) // // 電源ONして15ms以上待つ // RS R/W DB7 DB6 DB5 DB4 //(1) 0 0 0 0 1 1 // 4.1ms以上待つ //(2) 0 0 0 0 1 1 // 100μs以上待つ //(3) 0 0 0 0 1 1 //(4) 0 0 0 0 1 0 //(5) 0 0 0 0 1 0 ファンクションセット 0 0 1 DL DL=0で4bit //(6) 0 0 1 0 0 0 N F * * N=1で2行 F=0で5×8dot //(7) 0 0 0 0 0 0 表示オン/オフ //(8) 0 0 1 1 0 0 1 D C B D=1で表示オン C=0でカーソル表示しない B=0でブリンクしない //(9) 0 0 0 0 0 0 表示クリア //(10) 0 0 0 0 0 1 //(11) 0 0 0 0 0 0 エントリーモード //(12) 0 0 0 1 1 0 0 1 I/D S I/D=1でアドレスを+1カーソルが右に動く // ///////////////////////////////////////////////////////////////////////////////////////////////////////// #include <htc.h> //#define _XTAL_FREQ 20000000 #define _XTAL_FREQ 31000 lcd_init(); lcd_position(unsigned char); lcd_clear(); void putch(unsigned char); //lcd_cgram(); //他のI/Oピン使用する時に変更 #define PORT PORTC #define ENABLE RA0 #define RS RA1 //int cgdata=0x04; lcd_init() /* LCDモジュール初期化 PIC:PIC16F688 確認LCD:SD1602 HUOB-XA */ { /* RC5:RS RC4:ENABLE RS=0; /*RS=0 instruction input RS=1 data input ENABLE=0; __delay_ms(30); PORT=0x03; /* 4bitモード */ ENABLE=1; /*(1)__delay_ms(30)*/ ENABLE=0; __delay_ms(10); ENABLE=1; /*(2)__delay_ms(10)*/ ENABLE=0; __delay_us(400); ENABLE=1; /*(3)__delay_us(400)*/ ENABLE=0; __delay_us(400); PORT=0x02; ENABLE=1; /*(4)__delay_us(400)*/ ENABLE=0; /* function set */ __delay_us(80); PORT=0x02; ENABLE=1; /*(5)__delay_us(80);*/ ENABLE=0; PORT=0x08; /* 0x08:2行 0x00:1行 */ ENABLE=1; /*(6)*/ ENABLE=0; /* disp control*/ __delay_us(80); PORT=0x00; ENABLE=1; /*(7)__delay_us(80);*/ ENABLE=0; PORT=0x0C; /* 1,D:1,C:0,B:0 D(disp:on) C(cursor:off) B(blink:off)*/ ENABLE=1; /*(8)*/ ENABLE=0; /*clear disp*/ __delay_us(80); PORT=0x00; ENABLE=1; /*(9)__delay_us(80);*/ ENABLE=0; PORT=0x01; ENABLE=1; /*(10)*/ ENABLE=0; /*entry mode*/ __delay_us(80); PORT=0x00; ENABLE=1; /*(11)__delay_us(80);*/ ENABLE=0; PORT=0x06; /* 0,1,I/D:1,S:0 I/D(increment:+1) S(shift:NO increment*/ ENABLE=1; /*(12)*/ ENABLE=0; } //*************************************************************** //*************************************************************** lcd_position(unsigned char pos) /* 文字の位置を指定 */ { /* dd ram address set */ RS=0; // lcd_write_RS0(0x80+pos); __delay_us(80); PORT=(((0x80+pos)>>4)&0x0F); ENABLE=1; ENABLE=0; PORT=((0x80+pos)&0x0F); ENABLE=1; ENABLE=0; } //*************************************************************** //*************************************************************** lcd_clear() /* 画面をクリア */ { /* clear display */ RS=0; __delay_us(80); PORT=0x00; ENABLE=1; ENABLE=0; PORT=0x01; ENABLE=1; ENABLE=0; __delay_ms(4); } //*************************************************************** ******************************************** init ここまで*********************************************