PIAST OLED

2016年3月1日 (火) 03:14時点におけるTakahashi (トーク | 投稿記録)による版 (ページの作成:「OLED(SO1602AWYB-UC-XX)表示処理用プログラム ==OLED初期化== #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <unistd.h> #include <fc...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

OLED(SO1602AWYB-UC-XX)表示処理用プログラム

OLED初期化

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>

#include <linux/i2c-dev.h>


main(int argc, char *argv[])
{
        int     i2c_fd; //I2Cバス用のファイル・ディスクリプタ

        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
        int             oled_addr = 0x3c;        //OLEDのアドレス
        unsigned char   oled_reg = 0x40;         //書き込み対象のレジスタ

        int             i;                      //汎用カウンタ
        unsigned char   buf[4];                 //書き込み用バッファ
        char            dmesg[256];

        if(argc < 1) exit(1);

        //I2Cバスをオープンする
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
                perror("oledinit open");
                exit(1);
        }

        //スレーブのアドレスをioctlで設定
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
                perror("oledinit can't set slave");
                close(i2c_fd);
                exit(1);
        }


        usleep(100);
        //OLED初期化
        //ディスプレイ消去
        buf[0] = 0x00;
        buf[1] = 0x01;
        write(i2c_fd,buf,2);
        usleep(20);
        //カーソルをホームへ
        buf[0] = 0x00;
        buf[1] = 0x02;
        write(i2c_fd,buf,2);
        usleep(20);
        //表示ON,カーソル表示なし
        buf[0] = 0x00;
        buf[1] = 0x0c;
        write(i2c_fd,buf,2);
        usleep(20);
        //表示ON
        buf[0] = 0x00;
        buf[1] = 0x01;
        write(i2c_fd,buf,2);
        usleep(20);

        close(i2c_fd);
}

OLED1行目表示用

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>

#include <linux/i2c-dev.h>


main(int argc, char *argv[])
{
        int     i2c_fd; //I2Cバス用のファイル・ディスクリプタ

        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
        int             oled_addr = 0x3c;        //OLEDのアドレス
        unsigned char   oled_reg = 0x40;         //書き込み対象のレジスタ

        int             i;                      //汎用カウンタ
        unsigned char   buf[4];                 //書き込み用バッファ
        char            dmesg[256];

        if(argc < 2) exit(1);

        //I2Cバスをオープンする
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
                perror("oledinit open");
                exit(1);
        }

        //スレーブのアドレスをioctlで設定
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
                perror("oledinit can't set slave");
                close(i2c_fd);
                exit(1);
        }

        //カーソルをホームへ
        buf[0] = 0x00;
        buf[1] = 0x02;
        write(i2c_fd,buf,2);
        usleep(20);

        //1行目処理
        strncpy(dmesg, argv[1], 16);
        //メッセージ書き込み
        for(i=0;i<16;i++) {
                buf[0] = 0x40;
                if(dmesg[i] == 0) break;
                buf[1] = dmesg[i];
                write(i2c_fd,buf,2);
                usleep(20);
        }

        close(i2c_fd);
}

OLED2行目表示用

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>

#include <linux/i2c-dev.h>


main(int argc, char *argv[])
{
        int     i2c_fd; //I2Cバス用のファイル・ディスクリプタ

        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
        int             oled_addr = 0x3c;        //OLEDのアドレス
        unsigned char   oled_reg = 0x40;         //書き込み対象のレジスタ

        int             i;                      //汎用カウンタ
        unsigned char   buf[4];                 //書き込み用バッファ
        char            dmesg[256];

        if(argc < 2) exit(1);

        //I2Cバスをオープンする
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
                perror("oledinit open");
                exit(1);
        }

        //スレーブのアドレスをioctlで設定
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
                 perror("oledinit can't set slave");
                 close(i2c_fd);
                 exit(1);
        }

        //DDRAMを2行目へ
        buf[0] = 0x00;
        buf[1] = 0xa0;
        write(i2c_fd,buf,2);
        usleep(20);

        //2行目処理
        strncpy(dmesg, argv[1], 16);
        //メッセージ書き込み
        for(i=0;i<16;i++) {
                buf[0] = 0x40;
                if(dmesg[i] == 0) break;
                buf[1] = dmesg[i];
                write(i2c_fd,buf,2);
                usleep(20);
        }

        close(i2c_fd);
}