******************************************** 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 4000000 /* 4MkHz */
//#define _XTAL_FREQ 31000 /* 31kHz */
#define JIKAN 100 /* 500ミリ秒 */
#define PORT PORTC
#define ENABLE RA0
#define RS RA1
#define JIKAN1 1000
#define JIKAN2 500
lcd_position(unsigned char);
void putch(unsigned char moji);
//WRITE No.1(0-143)
__EEPROM_DATA('C','Q',' ','C','Q',' ','D','E'); /* 0-7 00-07 CQ CQ*/
__EEPROM_DATA(' ','J','A','3','R','U','A',' '); /* 8-15 08-0F */
__EEPROM_DATA('Q','T','H',' ','M','O','R','I'); /* 16-23 10-17 */
__EEPROM_DATA('G','U','C','H','I',' ','K','.'); /* 24-31 18-1F */
__EEPROM_DATA('W','X','Y','Z','0','1','2','3'); /* 32-39 20-27 */
__EEPROM_DATA('4','5','6','7','8','9','A','/'); /* 40-47 28-2F */
__EEPROM_DATA(0x55,0x52,0x20,0x35,0x39,0x39,0x25,0xFF); /* 48-55 30-37 UR 599*/
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 56-63 38-3F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 64-71 40-47 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 72-79 48-4F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 80-87 50-57 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 88-95 58-5F */
__EEPROM_DATA(0x54,0x4E,0x58,0x20,0x51,0x53,0x4F,0x25); /* 96-103 60-67 TNX QSO*/
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 104-111 68-6F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 112-119 70-77 */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 120-127 78-7F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 128-135 80-8F */
__EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 136-143 90-97 */
lcd_init();
lcd_cgram();
ioport();
cgdisp();
int pos=0;
int cgdata;
int rommoji;
int romcnt=0;
int rom_sadd=0;
main()
{
//OSCCON=0x00;//INTCONにするときに必要で0x00は31Khz
ioport();
lcd_init(); /* LCDを初期化する */
while(1){
//// キャラクタパターン表示
// cgdisp();
// ++romcnt;
// if(romcnt==27){
// romcnt=0;
// __delay_ms(JIKAN2);
// lcd_clear();
// __delay_ms(JIKAN2);
// }
// EEPROM内容の表示
rommoji=eeprom_read(romcnt);
lcd_position(pos+rom_sadd);
printf("%c",rommoji);//文字列ではないのでprintf(rommoji);では表示しない。左のように、1文字表示の記述をすること
++pos;
++romcnt;
__delay_ms(JIKAN);
if(romcnt==16){
rom_sadd=64;
pos=0;
}
if(romcnt==32){
pos=0;
romcnt=0;
rom_sadd=0;
__delay_ms(JIKAN1);
lcd_clear();
__delay_ms(JIKAN2);
}
}//while end
}//main end
ioport()
{
ANSEL=0;
ANSELH=0;
TRISA=0x38; /*RA0-2ピンを出力に、RA3,4,5ピンを入力設定*/
TRISB=0; /*PORTB全ピンを出力に設定*/
TRISC=0; /*PORTC全ピンを出力に設定*/
//PORTA=0xFF; /*PORTA全ピンをHに設定 16進*/
//PORTB=0xFF; /*PORTB全ピンをHに設定 16進*/
PORTC=0x00; /*PORTC全ピンをLに設定 16進*/
PORTA=0x00; /*PORTA全ピンを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 data input */
RS=1;
__delay_us(500);//80
PORT=nandemo;
//0x30でENABLE=1,RS=1になる 書込みはEが1→0
ENABLE=1;
ENABLE=0;
}
//***************************************************************
lcd_cgram() /* lcd_cgram キャラクタ表示*/
{ /* cgram/ddram data write */
RS=1;
__delay_us(500);//80
PORT=cgdata;
ENABLE=1;
ENABLE=0;
__delay_ms(4);
}
//***************************************************************
cgdisp()
{
pos=0x00;
lcd_position(pos);
cgdata=0xC0;
lcd_cgram(); /* cgdata表示 */
cgdata=0xC0;
lcd_cgram(); /* cgdata表示 */
cgdata=0xDE;
lcd_cgram(); /* cgdata表示 */
cgdata=0xB2;
lcd_cgram(); /* cgdata表示 */
cgdata=0xCF;
lcd_cgram(); /* cgdata表示 */
cgdata=0x43;
lcd_cgram(); /* cgdata表示 */
cgdata=0x47;
lcd_cgram(); /* cgdata表示 */
cgdata=0xB0;
lcd_cgram(); /* cgdata表示 */
cgdata=0x52;
lcd_cgram(); /* cgdata表示 */
cgdata=0x41;
lcd_cgram(); /* cgdata表示 */
cgdata=0x4D;
lcd_cgram(); /* cgdata表示 */
cgdata=0xC3;
lcd_cgram(); /* cgdata表示 */
cgdata=0xDE;
lcd_cgram(); /* cgdata表示 */
cgdata=0xB0;
lcd_cgram(); /* cgdata表示 */
cgdata=0xC0;
lcd_cgram(); /* cgdata表示 */
cgdata=0xA6;
lcd_cgram(); /* cgdata表示 */
pos=0x40;
lcd_position(pos);
cgdata=0xCB;
lcd_cgram(); /* cgdata表示 */
cgdata=0xAE;
lcd_cgram(); /* cgdata表示 */
cgdata=0xB3;
lcd_cgram(); /* cgdata表示 */
cgdata=0xBC;
lcd_cgram(); /* cgdata表示 */
cgdata=0xDE;
lcd_cgram(); /* cgdata表示 */
cgdata=0xBC;
lcd_cgram(); /* cgdata表示 */
cgdata=0xC3;
lcd_cgram(); /* cgdata表示 */
cgdata=0xB2;
lcd_cgram(); /* cgdata表示 */
cgdata=0xCF;
lcd_cgram(); /* cgdata表示 */
cgdata=0xBD;
lcd_cgram(); /* cgdata表示 */
cgdata=0xA1;
lcd_cgram(); /* cgdata表示 */
}
******************************************** main ここまで*********************************************
******************************************** init ここから*********************************************
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// イニシャライズ手順 インターフェースデータ長8bit(データシートから)
//
// 電源ONして15ms以上待つ
// RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
//(1) 0 0 0 0 1 1 0 0 0 0
// 4.1ms以上待つ
//(2) 0 0 0 0 1 1 0 0 0 0
// 100μs以上待つ
//(3) 0 0 0 0 1 1 0 0 0 0
//(4) 0 0 0 0 1 1 1 0 0 0 function set (DB4)DL=1で8bit (DB3)N=1で2行 (DB2)F=0で5×8dot
//(5) 0 0 0 0 0 0 1 1 0 0 disp on/off control (DB2)D=1で表示オン (DB1)C=0でカーソル表示しない (DB0)B=0でブリンクしない
//(6) 0 0 0 0 0 0 0 0 0 1 clear disp
//(7) 0 0 0 0 0 0 0 1 1 0 entry mode (DB1)I/D=1でアドレスを+1カーソルが右に動く(DB0)S=0表示シフトさせない
//
// lcd_init()での__delay_msは、色々値を変化させて見た結果現在の値がベストである。
// 初期の値(各値横のコメントの数字)では発振数を上げたりすると電源オン時の表示が不安定なった(オン後は安定)
// INTIO、水晶(4MHz,20MHz)でも電源オン後から表示は安定している。
/////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <htc.h>
#define _XTAL_FREQ 20000000
//#define _XTAL_FREQ 4000000
//#define _XTAL_FREQ 31000 /* 31kHz */
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:PIC16F689 確認LCD:SD1602 HUOB-XA */
{ /* RA1:RS RA0:ENABLE */
RS=0; /*RS=0 instruction input RS=1 data input */
ENABLE=0;
__delay_ms(15);// __delay_ms(30)
PORT=0x30; /* 8bitモード */
ENABLE=1; /*(1)*/
ENABLE=0;
__delay_ms(5);// __delay_ms(10)
ENABLE=1; /*(2)*/
ENABLE=0;
__delay_ms(5);// __delay_us(400)
ENABLE=1; /*(3)*/
ENABLE=0;
/* function set */
__delay_ms(5);// __delay_us(80)
PORT=0x38;
ENABLE=1; /*(4)*/
ENABLE=0;
/* disp on/off control*/
__delay_ms(5);// __delay_us(80)
PORT=0x0C; /* 1,D:1,C:0,B:0 D(disp:on) C(cursor:off) B(blink:off)*/
ENABLE=1; /*(5)*/
ENABLE=0;
/*clear disp*/
__delay_ms(5);// __delay_us(80)
PORT=0x01;
ENABLE=1; /*(6)*/
ENABLE=0;
/*entry mode*/
__delay_ms(5);// __delay_us(80)
PORT=0x06; /* 0,1,I/D:1,S:0 I/D(increment:+1) S(shift:NO increment*/
ENABLE=1; /*(7)*/
ENABLE=0;
}
//***************************************************************
//***************************************************************
lcd_position(unsigned char pos) /* 文字の位置を指定 */
{ /* dd ram address set */
RS=0;
// lcd_write_RS0(0x80+pos);
__delay_us(500);//80
PORT=(0x80+pos);
ENABLE=1;
ENABLE=0;
}
//***************************************************************
//***************************************************************
lcd_clear() /* 画面をクリア */
{ /* clear display */
RS=0;
__delay_us(500);//80
PORT=0x01;
ENABLE=1;
ENABLE=0;
__delay_ms(4);
}
//***************************************************************
******************************************** init ここまで*********************************************