GPIO接続のLCDへ表示する(シフトレジスタを使う)


今回はIOエクスパンダではなくシフトレジスタを使ってLCDを表示する方法を紹介します。
使用するシフトレジスタは74HC595です。
以下のページで使い方が紹介されています。
http://wiringpi.com/extensions/shift-register-74x595/
シフトレジスタなので出力しかできません。
よほど設計がいいのか、この製品はいろいろなメーカから互換品が多く出ています。
これら型番に74HC595と付く互換品(果たしてどこが本家??)でも同様に使えます。

回路図は以下のようになります。
74HC595は左下が1番ピンです。
赤のラインは3.3V、オレンジのラインは5Vです。
DataPinは4番(GPIO23)、ClockPinは5番(GPIO24)、LatchPinは6番(GPIO25)に接続しています。



コードは以下のとおりです。
MCP23017のときに紹介したコードから下線の部分だけ変更しています。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <lcd.h>
#include <sr595.h>

int main(int argc, char **argv) {
    int fd_lcd;
    int c;
    int i;

    wiringPiSetup ();

    if(sr595Setup(100,8,4,5,6) == -1) {
        printf("wiringPiSetup Fail\n");
        exit(1);
    }
    fd_lcd = lcdInit(2,16,4,104,105,100,101,102,103,0,0,0,0);

    lcdClear(fd_lcd);
    lcdPuts(fd_lcd,"ABCDEFGHIJKLMNOP");
    lcdPosition(fd_lcd,0,1);
    lcdPuts(fd_lcd,"abcdefghijklmnop");

    while (1){
        printf("0:lcdDisplay test\n");
        printf("1:lcdCursor test\n");
        printf("2:lcdBlink test\n");
        printf("q:End\n");
        c=getchar();
        if(c == 'q') break;

        if(c == '0') {
            for(i=0;i<10;i++) {
                lcdDisplay(fd_lcd,0);
                sleep(1);
                lcdDisplay(fd_lcd,1);
                sleep(1);
            }
        }

        if(c == '1') {
            for(i=0;i<16;i++){
                lcdPosition(fd_lcd,i,0);
                lcdCursor(fd_lcd,1);
                sleep(1);
            }
            lcdCursor(fd_lcd,0);
        }

        if(c == '2') {
            for(i=0;i<16;i++){
                lcdPosition(fd_lcd,i,1);
                lcdCursorBlink(fd_lcd,1);
                sleep(1);
            }
            lcdCursorBlink(fd_lcd,0);
        }
    }
    lcdClear(fd_lcd);
}


M74HC595の場合

M74HC595の場合

出力しか行わないのであれば、IOエクスパンダではなく、1個20円以下(10個160円でした)で入手できる
安価なシフトレジスタでもいいかもしれません。
なおシフトレジスタについては以下のページが楽しめます。
http://www.hiramine.com/physicalcomputing/arduino/shiftregister.html
GPIOのLCDでずいぶん楽しめましたが、LCDと一緒に使えそうなチップは一通り試したようなので、このシリーズは今回で終わりの予定です。