<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-------------------------