参考
結果
プログラム
//atm0177b5_46_743zi2_1
//ヘッダーファイル
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <hh.h>
//定義
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 160 // OLED display height, in pixels
NA_ST7735_P display(SCREEN_WIDTH, SCREEN_HEIGHT);
//初期化
void setup() {
// I2Cアドレスは使用するディスプレイに合わせて変更する
display.begin();
} //setup
//メインループ
void loop() {
// 画面表示をクリア
display.clearDisplay();
// テキストサイズを設定
display.setTextSize(3);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0, 10);
//46を設定
int tempval = 46;
// 1行目に46を表示
display.println(tempval);
// 描画バッファの内容を画面に表示
display.display();
delay(1000); //1秒待つ
} //loop
hh.cpp
//インクルド
#include <Arduino.h>
#include "hh.h"
#include <Adafruit_GFX.h>
//定義
#define NA_ST7735_P_swap(a, b) \
(((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b))) ///< No-temp-var swap operation
///*
//GPIOの設定1 開始
//GPIO
#define GPIO_A0_P A0
#define GPIO_A1_P A1
#define GPIO_A2_P A2
#define GPIO_A3_P A3
//GPIO
#define GPIO_A0(s) digitalWrite(GPIO_A0_P, s)
#define GPIO_A1(s) digitalWrite(GPIO_A1_P, s)
#define GPIO_A2(s) digitalWrite(GPIO_A2_P, s)
#define GPIO_A3(s) digitalWrite(GPIO_A3_P, s)
#define GPIO_RD_P GPIO_A3_P //RD=1
#define GPIO_WR_P GPIO_A2_P //WR=1
#define GPIO_RS_P GPIO_A1_P //RS=0
#define GPIO_RESET_P GPIO_A0_P //RESET=1
#define GPIO_RD(y) GPIO_A3(y) //RD=1
#define GPIO_WR(y) GPIO_A2(y) //WR=1
#define GPIO_RS(y) GPIO_A1(y) //RS=0
#define GPIO_RESET(y) GPIO_A0(y) //RESET=1
#define GPIO_DB7 7
#define GPIO_DB6 6
#define GPIO_DB5 5
#define GPIO_DB4 4
#define GPIO_DB3 3
#define GPIO_DB2 2
#define GPIO_DB1 A5
#define GPIO_DB0 A4
//GPIOの設定1 終了
//*/
void NA_ST7735_P::GPIO_8BIT(uint8_t s) {
digitalWrite(GPIO_DB7, (s >> 7) & 1);
digitalWrite(GPIO_DB6, (s >> 6) & 1);
digitalWrite(GPIO_DB5, (s >> 5) & 1);
digitalWrite(GPIO_DB4, (s >> 4) & 1);
digitalWrite(GPIO_DB3, (s >> 3) & 1);
digitalWrite(GPIO_DB2, (s >> 2) & 1);
digitalWrite(GPIO_DB1, (s >> 1) & 1);
digitalWrite(GPIO_DB0, s & 1);
} //GPIO_8BIT
//コマンドの書き込み
void NA_ST7735_P::LCD_Write_CMD(uint8_t a) {
GPIO_RS(0); //A0=0;
GPIO_8BIT(a); //P1=a; data
GPIO_WR(0); //WRB=0;
GPIO_WR(1); //WRB=1;
} //LCD_Write_CMD
//データ書き込み
void NA_ST7735_P::LCD_Write_Data(uint8_t a) {
GPIO_RS(1); //A0=1;
GPIO_8BIT(a); //P1=a; data
GPIO_WR(0); //WRB=0;
GPIO_WR(1); //WRB=1;
} //LCD_Write_Data
//液晶の初期化処理
void NA_ST7735_P::TXDT144TF_ST7735S_Init(void) {
//---------- ST7735S Reset Sequence --------//
GPIO_RESET(1); //LCD_RESET=1;
delay(1); //Delay 1ms
GPIO_RESET(0); //LCD_RESET=0;
delay(1); //Delay 1ms
GPIO_RESET(1); //LCD_RESET=1;
delay(120); //Delay 120ms
LCD_Write_CMD(0x01); //SOFTWARE RESET
delay(50);
LCD_Write_CMD(0x11); //SLEEP OUT
delay(200);
LCD_Write_CMD(0x29); //display on
delay(100);
LCD_Write_CMD(0x3a); //Interface pixel format
LCD_Write_Data(0x05); //16bit mode
delay(100);
LCD_Write_CMD(0x36); //RGB-RGR format
LCD_Write_Data(0x08); //RGB mode
delay(100);
} //TXDT144TF_ST7735S_Init
NA_ST7735_P::NA_ST7735_P(uint8_t w, uint8_t h)
: Adafruit_GFX(w, h), buffer(NULL)
{
}
//バッファのクリア
NA_ST7735_P::~NA_ST7735_P(void) {
if (buffer) {
free(buffer);
buffer = NULL;
}
} //~NA_ST7735_P
//初期処理
bool NA_ST7735_P::begin(void) {
if ((!buffer) && !(buffer = (uint16_t *)malloc(WIDTH * HEIGHT * 2)))
return false;
//バッファーのクリア
clearDisplay();
//ポートのモード設定
//アウトプットモード
pinMode(GPIO_DB7, OUTPUT);
pinMode(GPIO_DB6, OUTPUT);
pinMode(GPIO_DB5, OUTPUT);
pinMode(GPIO_DB4, OUTPUT);
pinMode(GPIO_DB3, OUTPUT);
pinMode(GPIO_DB2, OUTPUT);
pinMode(GPIO_RESET_P, OUTPUT);
pinMode(GPIO_RS_P, OUTPUT);
pinMode(GPIO_WR_P, OUTPUT);
pinMode(GPIO_RD_P, OUTPUT);
pinMode(GPIO_DB0, OUTPUT);
pinMode(GPIO_DB1, OUTPUT);
//ポートの初期化
GPIO_RD(1); //RD=1
GPIO_WR(1); //WR=1
GPIO_RS(0); //RS=0
GPIO_RESET(1); //RESET=1
delay(500); //0.5秒待つ
//液晶の初期化処理
TXDT144TF_ST7735S_Init();
//画面の書き込み開始
display();
return true; // Success
} //begin
//点の表示
void NA_ST7735_P::drawPixel(int16_t x, int16_t y, uint16_t color) {
if ((x >= 0) && (x < width()) && (y >= 0) && (y < height())) {
// Pixel is in-bounds. Rotate coordinates if needed.
switch (getRotation()) {
case 1:
NA_ST7735_P_swap(x, y);
x = WIDTH - x - 1;
break;
case 2:
x = WIDTH - x - 1;
y = HEIGHT - y - 1;
break;
case 3:
NA_ST7735_P_swap(x, y);
y = HEIGHT - y - 1;
break;
} //end switch
//ドットのカラーの設定
buffer[y << 7 | x] = color;
} //if
} //drawPixel
//バッファのクリア
void NA_ST7735_P::clearDisplay(void) {
memset(buffer, 0, WIDTH * HEIGHT * 2);
}
bool NA_ST7735_P::getPixel(int16_t x, int16_t y) {
if ((x >= 0) && (x < width()) && (y >= 0) && (y < height())) {
// Pixel is in-bounds. Rotate coordinates if needed.
switch (getRotation()) {
case 1:
NA_ST7735_P_swap(x, y);
x = WIDTH - x - 1;
break;
case 2:
x = WIDTH - x - 1;
y = HEIGHT - y - 1;
break;
case 3:
NA_ST7735_P_swap(x, y);
y = HEIGHT - y - 1;
break;
}
return (buffer[y << 7 | x]);
}
return false; // Pixel out of bounds
}
uint16_t *NA_ST7735_P::getBuffer(void) {
return buffer;
}
//画面のリフレッシュ
void NA_ST7735_P::display(void) {
//画面の書き込み開始
LCD_Write_CMD(0x2C); //memory write
GPIO_RS(1); //A0=1; //データモード
for (int i = 0; i < (HEIGHT * WIDTH); i++) {
//---------------- 1バイト目
GPIO_8BIT(buffer[i] >> 8); //汎用
GPIO_WR(0); //WRB=0; 10 //汎用
GPIO_WR(1); //WRB=1; 10 //汎用
//---------------- 2バイト目
GPIO_8BIT(buffer[i] & 0xff); //汎用
GPIO_WR(0); //WRB=0; 10 //汎用
GPIO_WR(1); //WRB=1; 10 //汎用
} //i
} //display
hh.h
#ifndef _NA_ST7735_P_H_
#define _NA_ST7735_P_H_
#include <Adafruit_GFX.h>
#ifndef NO_ADAFRUIT_NA_ST7735_P_COLOR_COMPATIBILITY
#define BLACK NA_ST7735_P_BLACK ///< Draw 'off' pixels
#define WHITE NA_ST7735_P_WHITE ///< Draw 'on' pixels
#define RED NA_ST7735_P_RED ///< Draw 'on' pixels
//#define INVERSE NA_ST7735_P_INVERSE ///< Invert pixels
#endif
/// fit into the SSD1306_ naming scheme
#define NA_ST7735_P_BLACK 0x0000 ///< Draw 'off' pixels
#define NA_ST7735_P_WHITE 0xffff ///< Draw 'on' pixels
#define NA_ST7735_P_RED 0b1111100000000000 //red
///< Draw 'on' pixels
//#define NA_ST7735_P_INVERSE 2 ///< Invert pixels
class NA_ST7735_P : public Adafruit_GFX {
public:
NA_ST7735_P(uint8_t w, uint8_t h);
~NA_ST7735_P(void);
bool begin(void);
void display(void);
void clearDisplay(void);
void drawPixel(int16_t x, int16_t y, uint16_t color);
bool getPixel(int16_t x, int16_t y);
uint16_t *getBuffer(void);
void GPIO_8BIT(uint8_t s);
void LCD_Write_CMD(uint8_t ww);
void LCD_Write_Data(uint8_t ii);
void TXDT144TF_ST7735S_Init(void);
void HS_GPIO_8BIT_A(uint8_t s);
void HS_GPIO_8BIT_B(uint8_t s);
void HS_GPIO_WR(int o_a);
protected:
uint16_t *buffer; ///< Buffer data used for display buffer. Allocated when
///< begin method is called.
};
#endif // _NA_ST7735_P_H_