STM32L010F4P6と液晶、ACM1602K-NLW-BBWでHello Worldを表示(信号線10本)


x 原因は、わからないが液晶がちらつく場合は、ウェートを調整してね!!

STM32L010F4P6でmbedを使い8ビットモードで16文字2行液晶に
Hello Worldを表示するプログラム

いろいろ 2021/10/09

選定の理由は、単純に安いから秋月で400円
液晶の電源は、絶対5Vでそれ以下だと、濃度が調整
出来ない。やってみそ
電池でも使える事を考えて3.3Vから5VにDCDCしている

実験用の原型モデルとしては、自分の言うのもなんだけど
わかりやすいく、良く出来ていると思う。

注意としては、濃度調整を付けて調整してね!!

メリットは、わかりやすい(初心者向け)

デメリットは、遅いくて、最適化されていない
 まず、シフトが遅い 一般的には、シフトの回数分
 クロックが掛る。表引きがおすすめ
 コマンドは、表引きにした方がスッキリする。
 表引きかオペランドにダイレクトに描いた方が速い。
 わかりやすくする為にデータを8本使っている
 思ったより配線が大変で間違えやすい。
 


#include "mbed.h"

// 8bit hellworld
 
//*          *****  *****       ***  * *
//*         *       *    *     *   * * *
//*         *       *    *     *   * * *
//*         *       *    *     *   * * *
//*         *       *    *     *   * * *
//********   *****  *****       ***  * *
 

DigitalOut sl(PC_14); //RS
DigitalOut d0(PC_15); //D0

DigitalOut d1(PA_1); //D0
DigitalOut d2(PA_2); //D1
DigitalOut d3(PA_3); //D2
DigitalOut d4(PA_4); //D3
DigitalOut d5(PA_5); //D4
DigitalOut d6(PA_6); //D5
DigitalOut d7(PA_7); //D6

DigitalOut en(PB_1); //E

 
 
//Serial pc2(USBTX, USBRX); // tx, rx

 
int v;
int rs;
void seg1()
{
    d7=((v>>7)&1); //7
    d6=((v>>6)&1); //6
    d5=((v>>5)&1); //5
    d4=((v>>4)&1); //4
    d3=((v>>3)&1); //3
    d2=((v>>2)&1); //2
    d1=((v>>1)&1); //1
    d0=((v>>0)&1); //0
    sl=rs;   //delay(500);
    en=1;    //delayMicroseconds(40);
    wait_ms(1);
    en=0;    //delay(500);
}
 
 
int main() {
        
    //pc2.baud(9600);
    
    //pc2.printf("Hello World!");

    en=0; 
    
    //ファンクションセット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) {} //無限ループ
}