mbed(10) GR-PEACHで グラフィックLcdに表示


 GR-PEACHで、28x64ドットのグラフィックLcdに表示しました。
 SPIグラフィックLcd用のプログラムを、8ビット並列インタフェースのLcdコントローラ「ST7565S」用に書き換えました。

●動作中のボード

 写真は、GR-PEACHで グラフィックLcdに表示しているものです。
 グラフィックLcd は、デジットから@550−で購入したで3.3Vで動作するもので、GR-PEACH で直接制御しています。
 8ビット並列インタフェースの0.5mmピッチのフイルムケーブルは、初めて使うので、慎重に基板化しました。

 

 



●プログラムリスト

 作成したリストを下記します。
 コメントも無く、見難いですが判読下さい。


// 113_ParaGrafLcd128x64 main.cpp

// Digit 128x64Dot GraficLcd program
// Controller ST7565S

// GrPeach Pin allocation
// 2 P2_14 nCS1
// 2 P2_15 nRst
// 4 P7_15 a0 ... 0:command 1:data
// 5 P8_1 R_nW
// 6 P8_8 Ena
// 7 P2_0 D0
// 8 P2_1 D1
// 9 P2_2 D2
//10 P2_3 D3
//11 P2_4 D4
//12 P2_5 D5
//13 P2_6 D6
//14 P2_7 D7

#include "mbed.h"
#include "font8.h"

DigitalOut myled1(LED1);

DigitalOut nCS1(P2_14);
DigitalOut nRst(P2_15);
DigitalOut a0(P7_15);
DigitalOut R_nW(P8_1);
DigitalOut Ena(P8_8);
BusOut DBus(P2_0, P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7);

void regwrite(unsigned char c){
nCS1 = R_nW = 0;
a0 = 0; //command Assign

DBus = c; //commandOut

Ena = 1; //Write
Ena = 0;
}

void datawrite(unsigned char c){
nCS1 = R_nW = 0;
a0 = 1; //Data Assign

DBus = c; //DataOut

Ena = 1; //Write
Ena = 0;

}

// ********** set position (x, 8*y)
void locate(int x, int y){
regwrite(0xb0 | (y & 0x0f)); // Page Address Set (see 2.4.3)
regwrite(0x10 | (x >> 4 & 0x0f)); // Column Address Set (see 2.4.4)
regwrite(x & 0x0f);
}

void cls(void){
int x, y;
for(y = 0; y < 8; y++){
locate(0, y);
for(x = 0; x < 128; x++) datawrite(0x00);
}
}

void plot(int x, int y){
locate(x, y >> 3);
datawrite(1 << (y & 7));
}

void init(){
// ********** DataBus Init
nCS1 = R_nW = 1;
nRst = 0;
a0 = 1; //Data Assign
DBus = 0x00; //DataOut
Ena = 0;

// ********** Lcd Init sequence
wait_ms(200);
nRst = 0;
wait_ms(20);
nRst = 1;
wait_ms(20);

regwrite(0xa2); // LCD Bias Set ... 1/9 bias
regwrite(0xa0); // ADC Select ... Normal
regwrite(0xc8); // Common Output Mode Select ... Reverse
regwrite(0x26); // V5 Volatge Regulator Internal Resister Ratio Set
regwrite(0x81); // set electronic volume mode
regwrite(0x18); // electronic volume data 00-3f
regwrite(0x2f); // power control set

regwrite(0xa4); // Display All Points ON/OFF ... normal
regwrite(0x40); // Display Strat Line Set ... 0
regwrite(0xa6); // Display Normal/Reverse ... normal
regwrite(0xAF); // display on
}

void drawchar(unsigned char c){
const unsigned char *p = &font8[c << 3];
datawrite(p[0]);
datawrite(p[1]);
datawrite(p[2]);
datawrite(p[3]);
datawrite(p[4]);
datawrite(p[5]);
datawrite(p[6]);
datawrite(p[7]);
}

void drawtext(const char *s){
unsigned char c;
while((c = *s++) != '\0') drawchar(c);
}

// **********************************************
// ******************** main ********************
int main() {
int x, y, c;
char buf[16];

init();
cls();

locate(0, 0);
sprintf(buf, "%08x", 0xdeadbeef);
drawtext(buf);
wait_ms(2000);

c = 0;
while(1) {
for(y = 0; y < 8; y++){
locate(0, y);
for(x = 0; x < 16; x++) drawchar(c++);
}
wait_ms(800);
myled1 = 0;

wait_ms(20);
myled1 = 1;

wait_ms(20);

}
}


ホームへ戻る