差分

移動先: 案内検索

PIAST OLED プログラム

5,253 バイト追加, 2016年3月1日 (火) 17:52
ページの作成:「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);
}

案内メニュー

VoIp-Info.jp

HP Directplus -HP公式オンラインストア-