かつて初代定番PIC16F84AのマイコンボードにLCDを取付けて、アッセブラによるプログラムでLCD表示テストを行っていました。今回、JH7UBC 畠さんのCプログラムを使いLCD表示を行いました。
参考サイト
●PIC16F84A LCD1602の表示テスト
●PIC16F84A/84の勉強と製作
回路図
LCD1602を取付け
PICKit3プログラミングキット
互換器
※MPLAB X IDE 6.20までPICKit3が使用できる
MPLAB X IDE 6.20インストール
●MPLAB ®開発エコシステム ダウンロード アーカイブ
【MPLAB X v6.20】ダウンロード
画面に従ってインストールを行う
New Project
Select Device
Select Compiler
Project Name
Project Name:任意
※Encoding修正【Tools】【Options】【Enbeded 】【 Default Charset】【Shift JIS】
//http://jh7ubc.web.fc2.com/pic/PIC16F84A/PIC16F84A_LCD1602.html
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 10000000
#define EN RA2
#define RS RA3
#define LCD_DATA PORTB
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF // Code Protection bit (Code protection disabled)
//STROBE信号
void LCD_STROBE(){
EN = 1;
EN = 0;
}
//4ビットモードでの8ビット分のデータ転送
void lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA = (LCD_DATA & 0x0f) | (c & 0xf0);
LCD_STROBE();
LCD_DATA = (LCD_DATA & 0x0f) | ((c << 4) & 0xf0);
LCD_STROBE();
}
//画面クリア
void lcd_clear(void)
{
RS = 0;
lcd_write(0x01);
__delay_ms(2);
}
//カーソル位置に文字列を出力
void lcd_puts(const char *s)
{
RS = 1; // write characters
while(*s)
lcd_write(*s++);
}
// カーソル位置に1文字出力
void lcd_putch(char c)
{
RS = 1; // write characters
lcd_write( c );
}
/*//printf関数の出力先のスタブ関数を定義する
void putch(unsigned char ch){
lcd_putch(ch);
return;
} */
//カーソル位置の設定 y:行 x:桁
void lcd_locate(unsigned char y,unsigned char x){
RS = 0;
lcd_write(0x80 + (0x40 * y) +x);
}
// LCDの初期化
void lcd_init(){
RS = 0;
EN = 0;
//RW = 0;
__delay_ms(15); //15ms待つ
LCD_DATA = 0b00000011; //一旦8bitモード設定(初期化)
LCD_STROBE();
__delay_ms(5); //5ms待つ
LCD_STROBE();
__delay_us(200); //200us待つ
LCD_STROBE();
__delay_us(200); //200us待つ
LCD_DATA = 0b00000010; //4bitモード設定
LCD_STROBE();
lcd_write(0x28); // 2行表示 7ドットモードに設定
lcd_write(0x0C); // 表示ON,カーソルOFF,カーソル点滅OFF
lcd_clear(); // 画面クリア
lcd_write(0x06); //Entry Modeセット
}
// mainプログラム
void main(void)
{
TRISA = 0x00; //PORTA 全てOUTPUT
TRISB = 0x00; //PORTB 全てOUTPUT
lcd_init(); //LCD初期化
lcd_locate(0,0); //Cursor Home
lcd_puts("CQ CQ CQ");
lcd_locate(1,0); //Cursor Home
lcd_puts("DE JA7MLC");
while(1)
{
}
}

.png)
.png)
.png)
.png)
.png)
.png)
.png)
0 件のコメント:
コメントを投稿