液晶

電子工作

雨でどこにも出かけようが無いので、秋月で買った500円の液晶で遊ぶことにします。

ピンヘッダ半田付けして
ケーブル作ります。
ブレッドボードで動かすので、一端は錫メッキ線つけときます。
PICマイコンつなぎます。PICはど定番の16F84A。

RB4-7の4bitをデータ送りに使っています。コントロールは、RA0-2がそれぞれ、RS、R/W、Enableです。左上のボリュームはコントラスト調整用。

何の飾りもありません。
プログラムは、MPLAB + Hitech-C lite を使います。

コントロール用の lcd.c はこんなかんじで。
検索して見つけた幾つかの先輩方のソースをパクりまくって出来ております。
参考にさせていただいたところは、
http://homepage3.nifty.com/mitt/pic/pic5_17.html

http://www.picfun.com/p87703.html

http://hp.hana-neko.com/electro/electro/pic/16f84lcd.htm#prg

とか、ほかにもたくさんです。

************************************

#define _XTAL_FREQ 4000000
#include <htc.h>
#include “lcd.h”

#define LCD_RS RA0
#define LCD_RW RA1
#define LCD_EN RA2

#define LCD_DATA PORTB

#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0))

void
lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA = ( c & 0xF0 );
LCD_STROBE();
LCD_DATA = ( ( c << 4 ) & 0xF0 );
LCD_STROBE();
}

void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
__delay_ms(2);
}

void
lcd_puts(const char * s)
{
LCD_RS = 1;
while(*s)
lcd_write(*s++);
}

void
lcd_putch(char c)
{
LCD_RS = 1;
lcd_write( c );
}

void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}

void
lcd_init()
{
char init_value;

init_value = 0b00110000;

LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;

__delay_ms(15);
LCD_DATA = init_value;
LCD_STROBE();
__delay_ms(5);
LCD_STROBE();
__delay_us(200);
LCD_STROBE();
__delay_us(200);
LCD_DATA = 0b00100000;
LCD_STROBE();

lcd_write(0x28);
lcd_write(0xC);
lcd_clear();
lcd_write(0x6);
}

************************************

んで、メイン関数はこんな感じで

************************************

#include <htc.h>
#include “lcd.h”
#include “stdio.h”
#define _XTAL_FREQ 4000000

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF);

void putch(unsigned char ch);

void
main(void)
{

TRISA=0;
TRISB=0;

lcd_init();
lcd_goto(0);
while(1){

lcd_clear;
lcd_goto(0x0);

printf(“Hello World”);
lcd_goto(0x40);
printf(“(^_^)/”);

__delay_ms(1000);

}
}

void
putch(unsigned char ch)
{
lcd_putch(ch);
}

************************************

無事動きました。

コメント