x 原因は、わからないが液晶がちらつく場合は、ウェートを調整してね!!
STM32L010F4P6でmbedを使い16文字2行液晶に
Hello Worldを表示するプログラム
74hc164シフトレジスターを使用した。
液晶とのピン数を節約した。信号線10本から
信号線3本に減らした。
1 CLK クロック端子(緑)
2 RSDATA RS端子とデータの共有端子
3 E 読み込み書き込み同期信号
#include "mbed.h"
//* ***** ***** *** * *
//* * * * * * * *
//* * * * * * * *
//* * * * * * * *
//* * * * * * * *
//******** ***** ***** *** * *
#define swclk1 PA_5 //A4
#define swdio1 PA_7 //A6
#define en1 PA_4 //A3
DigitalOut swdclk(swclk1);
DigitalOut swdio(swdio1);
DigitalOut en(en1);
//Serial pc2(USBTX, USBRX); // tx, rx
int v;
int rs;
void seg1()
{
swdio=((v>>7)&1);swdclk=1;swdclk=0; //7
swdio=((v>>6)&1);swdclk=1;swdclk=0; //6
swdio=((v>>5)&1);swdclk=1;swdclk=0; //5
swdio=((v>>4)&1);swdclk=1;swdclk=0; //4
swdio=((v>>3)&1);swdclk=1;swdclk=0; //3
swdio=((v>>2)&1);swdclk=1;swdclk=0; //2
swdio=((v>>1)&1);swdclk=1;swdclk=0; //1
swdio=((v>>0)&1);swdclk=1;swdclk=0; //0
swdio=rs; //delay(500);
en=1; //delayMicroseconds(40);
wait_ms(1);
en=0; //delay(500);
}
int main() {
//pc2.baud(9600);
//pc2.printf("Hello World!");
swdio=0;
for(int i=0;i<10;i++){
swdclk=1;
wait_ms(15);
swdclk=0;
wait_ms(15);
}
//ファンクションセット1
rs=0;
v=0x30;seg1();
wait_ms(5);
//ファンクションセット2
rs=0;
v=0x30;seg1();
wait_ms(1);
//ファンクションセット3
rs=0;
v=0x30;seg1();
//ファンクションセット 2ラインモード
rs=0;
v=0x38;seg1();
//表示オフ
rs=0;
v=0x08;seg1();
//画面クリア
rs=0;
v=0x01;seg1();
wait_ms(2);
//エントリーモードセット
rs=0;
v=0x06;seg1();
//表示オン
rs=0;
v=0x08+0x04;seg1();
//@文字の表示
rs=1;
v='@';seg1();
wait_ms(2);
//1ライン目にカーソルを移動
rs=0;
v=0x80+0x00;seg1();
wait_ms(2);
int ii;
char ss1[]="Hello World !";
ii=0;
while(ss1[ii]!=0){
//文字の表示
rs=1;
v=ss1[ii];ii++;seg1();
wait_ms(2);
}
while(1) {}
}