******************************************** 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 ここまで*********************************************