秋月電子から販売されているグラフィック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); }