秋月電子から販売されているグラフィックLCD表示器(AQM1248A)モジュールの自作ライブラリLCD関数を説明します。 このライブラリではPICのLCD関連I/Oピンの指定やクロック周波数をヘッダーファイルで指定しています。
| 関数名 | 概要 |
|---|---|
| LCD_int | 液晶表示器初期化 |
| LCD_cmd | コマンド出力 |
| LCD_dat | 1文字表示 |
| LCD_ram | 表示RAMに1バイト送信 |
| LCD_str | 文字列表示 RAM領域 |
| LCD_ROMstr | 文字列表示 ROM領域 |
| LCD_posyx | カーソル位置指定、行 y、横位置 x |
| LCD_clr | 表示データ全消去 |
| LCD_chr3x | 3倍拡大文字表示 |
| LCD_str3x | 3倍拡大文字列 RAM領域 |
| LCD_ROMstr3x | 3倍拡大文字列 ROM領域 |
| LCD_chr2x | 2倍拡大文字表示 |
| LCD_str2x | 2倍拡大文字列 RAM領域 |
| LCD_ROMstr2x | 2倍拡大文字列 ROM領域 |
| LCD_chr1x | 通常文字表示 |
| LCD_str1x | 通常文字列 RAM領域 |
| LCD_ROMstr1x | 通常文字列 ROM領域 |
この関数で、液晶表示器の初期設定を行います。
使用例
LCD_int();
この関数で、引数の1バイトをコマンド送信します。
引数は送信する1バイトデータ。
使用例
LCD_cmd(0x0A);
この関数で、引数で指定された文字をグラフィックパターンに変換し、LCDに表示します。引数は 0x20から0x7FまでのASCII文字1バイトデータ。 表示される文字は、5x7dotを基本としたプロポーショナルな文字で、見た目のバランスが考慮され文字幅の狭い 記号や、小文字は、横幅が5bitより狭く詰めて表示します。。
使用例
LCD_dat('A');
この関数で、引数で指定された1バイトのグラフィックパターンをLCD内の表示RAMに送信します。
表示RAMのアドレスは、あらかじめ LCD_posyx で指定しておきます。
使用例
LCD_ram(0x55);
この関数で、文字を送信し、文字列が終了するまで連続して送信します。引数は表示される文字列の格納されている開始アドレス。
使用例
char msg[] = "Hello";
LCD_str(msg);
この関数で、文字を送信し、文字列が終了するまで連続して送信します。引数はROM領域に保存された文字列の開始アドレス。
使用例
LCD_ROMstr("Hello ");
この関数で、液晶表示器のカーソル位置を指定します。第一引数は縦(Page)位置を示す(0-8)の値、第二引数は横位置を示す(0-127)の値を指定します。
使用例
LCD_posyx(1,5);
この関数で、表示文字をすべてクリアし、カーソルを左上に移動します。
使用例
LCD_clr();
この関数で、指定した画面の表示位置に、縦横3倍に拡大した文字を表示し、表示文字の次の表示位置xposを返します。
使用例
chr = 'A'; xpos = 2; xpos = 10;
xpos = LCD_chr3x ( chr, ypos, xpos );
文字やグラフィックパターンを画面に表示するプログラムです。プログラムは、メインプログラム(main.c)とLCD表示ライブラリAQM1248A.h、AQM1248A.c)から構成されています。 AQM1248A.c にLCD表示する手順が記載されており、AQM1248A.h には、ASCII文字コードをグラフィック文字に変更するための基本パターン(5x7dot)が定義されています。メインプログラムは、これらライブラリに登録されている関数を呼び出して、文字を表示させます。具体的には、たのLCDと同様な以下の手順で表示します。
プロジェクトファイル C32_SPI_gLCDlib.zip |
<プログラム> main.c
画面に文字を表示させる。LCDライブラリ関数で主な仕事をするため、メインプログラムは、非常に簡単になっています。
// File name: SPI Mode II Grafic LCD
//
// RC4 SPI_RS 0:コマンド 1:データ
// RC5 SPI_CS 0:有効 1:無効
// RC7 SPISDO
// RB6 SPISCK idle時:Hi SCKの立下でデータ変更
// Language: MPLABX XC8
// Target: PIC18F14K50
// Copyright (c) 2014 iwamoto All Rights Reserved
#include <xc.h>
#include "AQM1248A.h"
#define _XTAL_FREQ 16000000 // delay_ms(x) のための定義
//-------------- コンフィグレーション --------------------------------
#pragma config MCLRE = OFF
#pragma config PWRTEN = OFF, BOREN = OFF, BORV = 30
#pragma config WDTEN = OFF, WDTPS = 32768
#pragma config STVREN = ON
#pragma config FOSC = IRC // 内部クロック
#pragma config PLLEN = ON, CPUDIV = NOCLKDIV, USBDIV = OFF
#pragma config FCMEN = OFF, IESO = OFF, HFOFST = OFF
#pragma config LVP = OFF, XINST = OFF, BBSIZ = OFF
#pragma config CP0 = OFF, CP1 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF
void main(void){
unsigned char i,ypos,xpos;
OSCCON = 0b01110010; // 内部クロック16Mhz
mInitLCD_IO (); // LCD制御用I/O 設定
mInitSPI(); // SPI Mode II 設定
ANSEL = 0b00000000; // 全てデジタルI/O
ANSELH = 0b00000000;
LCD_int (); // Grafic LCD 初期設定
ypos = 0; xpos = 10; // 文字表示位置
xpos = LCD_ROMstr3x("ABC",ypos,xpos); // 3倍文字列表示
ypos = 1;
xpos = LCD_ROMstr2x("ABC",ypos,xpos); // 2倍文字列表示
ypos = 2;
xpos = LCD_ROMstr1x("ABC",ypos,xpos); // 通常文字列表示
LCD_posyx (4,20); // 文字表示位置
LCD_dat('S'); // 通常文字表示
LCD_ROMstr("PI LCD AQM1248A"); // 通常文字列表示
LCD_posyx (5,0); // 下段枠表示位置
for(i=0; i<128 ; i+=2) { // コラムデータを順に取得
LCD_ram(0b11101000); // 下段枠文様
LCD_ram(0b11010000);
}
while(1);
}