mbed(9) LPC1768で、I2cLcdに表示


 mbed LPC1768 で、I2cLcd に表示しました。

●動作中のボード

 写真は、mbed LPC1768 で、I2cLcd に表示しているものです。
 I2cLcd は、秋月電子から購入した小型で3.3Vで動作するもので、LPC1768 で直接制御しています。

 この I2cLcd は、小型で3.3Vで動作するすぐれ物ですが、Pin間隔が1.5mmで扱いにくいです。
 Pinを成型して2.54mmの基板に実装しました。<<この部分、修正 2015-1-4>>

 







●動作中の信号

  I2cの信号をオシロで観測しました。
 LCDの初期化から文字表示の全体から、先頭部の詳細波形の4枚です。
 先頭部の再拡大では、スレーブアドレス、ファンクション、コマンドの3部分が見えます。
















●プログラムリスト

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




include "mbed.h"

DigitalOut DOutX(D7);
DigitalOut DOut12(p12);
DigitalOut myled(LED1);
#define I2cLcdAdrs 0x7C

I2C i2c(p9, p10); // I2C_SDA = D14, I2C_SCL = D15


void I2cCmdWt(int cmd)
{
char buf[2];

DOut12 = 0;
DOut12 = 1;
DOut12 = 0;

buf[0] = 0x00; //RS_CMD
buf[1] = cmd; //CMD

i2c.write(I2cLcdAdrs, buf, 2);
wait_ms(0.03); // 30uS wait
}

void I2cDatWt(int dat)
{
char buf[2];

buf[0] = 0x40; //RS_DATA
buf[1] = dat; //DATA

i2c.write(I2cLcdAdrs, buf, 2);
wait_ms(0.03); // 30uS wait
}

void LcdInit()
{
wait_ms(40); // 40mS wait
I2cCmdWt(0x38); // Function set = 0x38
I2cCmdWt(0x39); // Function set = 0x39
I2cCmdWt(0x14); // Internal OSC frequency = 0x14
I2cCmdWt(0x70); // Contrast set = 0x70
I2cCmdWt(0x56); // Power/ICON/Contrast control = 0x56
I2cCmdWt(0x6C); // Follower control = 0x6C

wait_ms(200); // 200mS wait
I2cCmdWt(0x38); // Function set = 0x38
I2cCmdWt(0x0C); // Display ON/OFF control = 0x0C
I2cCmdWt(0x01); // Clear Display = 0x01
wait_ms(2); // 2mS wait
}

void LcdLocate(int x, int y)
{
I2cCmdWt(0x80 + y*0x40 + x); // LcdLocate (8*2)
}

void LcdPuts(char *buffer)
{
while(*buffer != '\0')
{
I2cDatWt(*buffer);
buffer++;
}
}

// ******************** Main ********************
int main() {

myled = 0;

wait_ms(2000);
myled = 1;

LcdInit(); //

LcdLocate(0, 0);
LcdPuts("I2cLcd");

}



ホームへ戻る