<PICによる液晶表示>

液晶表示に挑戦です。と言っても、ほとんど参考本からです。
表示内容は、さすがに変えました。
画像をクリックして見て下さい。

    文字固定表示          文字流れ表示

回路図

文字固定表示のプログラムソースリスト ---------------------------------------メインプログラムソースリスト----------------------------------- #include <htc.h> #include <stdio.h> __CONFIG(FCMDIS & IESODIS & BORDIS & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO); __IDLOC(0001); #define _XTAL_FREQ 31000 lcd_goto(unsigned char); ioport(); lcd_init(); lcd_clear(); main() { OSCCON=0; /* 31kHz */ PORTA=PORTC=0; ioport(); lcd_init(); /* LCDを初期化する */ lcd_goto(0); printf("CQ CQ CQ"); lcd_goto(40); printf("DE JA3RUA PSE K"); SLEEP(); } ioport() { TRISA=0x1F; /* RC0-5は出力ピン */ TRISC=0; ANSEL=0x0F; /* AN4-7はデジタルI/Oモード */ CMCON0=0x07; } ---------------------------------メインプログラムソースリスト END------------------------- ---------------------------------LCD プログラムソースリスト------------------------- #include <htc.h> #define _XTAL_FREQ 31000 lcd_init(); lcd_goto(unsigned char); lcd_clear(); void putch(unsigned char); lcd_write_RS1(unsigned char); lcd_write_RS0(unsigned char); //*************************************************************** lcd_init() /* LCDモジュール初期化 */ { RC5=0; RC4=0; __delay_ms(30); PORTC=0x03; RC4=1; RC4=0; __delay_ms(10); RC4=1; RC4=0; __delay_us(400); RC4=1; RC4=0; __delay_us(400); PORTC=0x02; RC4=1; RC4=0; lcd_write_RS0(0x28); lcd_write_RS0(0x0C); lcd_clear(); lcd_write_RS0(0x06); } //*************************************************************** //*************************************************************** lcd_goto(unsigned char pos) /* 文字の位置を指定 */ { RC5=0; lcd_write_RS0(0x80+pos); } //*************************************************************** //*************************************************************** lcd_clear() /* RS=0(RC5=0)画面をクリア */ { RC5=0; lcd_write_RS0(0x1); __delay_ms(4); /*4ms*/ } //*************************************************************** //*************************************************************** void putch(unsigned char c) /* データを1バイトだけ書く */ { RC5=1; lcd_write_RS1( c ); } //*************************************************************** //************************************************************* lcd_write_RS1(unsigned char c) /* RS=1(RC5=1)の時1バイトだけ書く */ { __delay_us(80); PORTC=(((c>>4)&0x0F)|0x20); RC4=1; RC4=0; PORTC=((c&0x0F)|0x20); RC4=1; RC4=0; } //*************************************************************** //************************************************************* lcd_write_RS0(unsigned char c) /* RS=0(RC5=0)の時1バイトだけ書く */ { __delay_us(80); PORTC=((c>>4)&0x0F); RC4=1; RC4=0; PORTC=(c&0x0F); RC4=1; RC4=0; } //*************************************************************** ---------------------------------LCD プログラムソースリスト END------------------------- 文字流れ表示のプログラムソースリスト ---------------------------------------メインプログラムソースリスト----------------------------------- #include <htc.h> #include <stdio.h> __CONFIG(FCMDIS & IESODIS & BORDIS & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO); __IDLOC(0001); #define _XTAL_FREQ 500000 /* 500kHz */ #define JIKAN 20 /* 20ミリ秒 */ lcd_goto(unsigned char); lcd_init(); ioport(); main() { OSCCON=0; /* 31kHz */ PORTA=PORTC=0; ioport(); int p,a,b,c,d; lcd_init(); /* LCDを初期化する */ while(1){ a=0; for(p=23;p>0;--p){ /* -1 */ a=p-8; /* -6 */ if(a>0) {lcd_goto(a); printf("CQ "); } else {lcd_goto(a); printf(" "); } b=p-5; if(b>0) {lcd_goto(b); printf("CQ "); } else {lcd_goto(b); printf(" "); } c=p-2; if(c>0) {lcd_goto(c); printf("CQ "); } else {lcd_goto(c); printf(" "); } __delay_ms(JIKAN); /* JIKANミリ秒待つ */ } for(p=56;p>25;--p){ a=p-1; if(a>0) {lcd_goto(a); printf("DE "); } else {lcd_goto(a); printf(" "); } b=p+2; if(b>0) {lcd_goto(b); printf("JA3RUA "); } else {lcd_goto(b); printf(" "); } c=p+9; if(c>36 && c<57) {lcd_goto(c); printf("PSE "); } else {lcd_goto(c); printf(" "); } d=p+13; if(d>39 && c<57) {lcd_goto(d); printf("K "); } else {lcd_goto(d); printf(" "); } __delay_ms(JIKAN); /* JIKANミリ秒待つ */ } } } ioport() { TRISA=0x1F; /* RC0-5は出力ピン */ TRISC=0; ANSEL=0x0F; /* AN4-7はデジタルI/Oモード */ CMCON0=0x07; } ---------------------------------メインプログラムソースリスト END------------------------- ---------------------------------LCD プログラムソースリスト------------------------- 文字固定表示と同じ ---------------------------------LCD プログラムソースリスト END-------------------------