Created
November 17, 2024 11:18
-
-
Save akira345/570887301c0ee0a40347fc5600650453 to your computer and use it in GitHub Desktop.
PIC16F627+ST7735制御テストプログラム。ソフトウエアSPIなので遅い
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <xc.h> | |
// 構成ビット設定 | |
#pragma config FOSC = INTOSCIO // 内部クロック使用、RA6, RA7はI/Oとして使用可能 | |
#pragma config WDTE = OFF // ウォッチドッグタイマー無効 | |
#pragma config PWRTE = ON // パワーオンタイマー無効 | |
#pragma config MCLRE = OFF // MCLRピン無効 | |
#pragma config BOREN = OFF // 電源電圧低下検出無効 | |
#pragma config LVP = OFF // 低電圧プログラミング無効 | |
#pragma config CP = OFF // コード保護無効 | |
#pragma config CPD = OFF // データEEPROMコード保護無効 | |
#define _XTAL_FREQ (4000000) // 内部クロック4MHz | |
// ピン操作マクロ | |
#define SCL PORTAbits.RA0 | |
#define SDA PORTAbits.RA1 | |
#define CS PORTAbits.RA2 | |
#define DC PORTAbits.RA3 | |
#define RST PORTAbits.RA6 | |
// ピン方向設定 | |
#define SCL_DIR TRISAbits.TRISA0 | |
#define SDA_DIR TRISAbits.TRISA1 | |
#define CS_DIR TRISAbits.TRISA2 | |
#define DC_DIR TRISAbits.TRISA3 | |
#define RST_DIR TRISAbits.TRISA6 | |
void SPI_Init(void); | |
void SPI_Write(unsigned char data); | |
void ST7735_Command(unsigned char cmd); | |
void ST7735_Data(unsigned char data); | |
void ST7735_Init(void); | |
void ST7735_SetRotation(uint8_t rotation); | |
void SPI_Init(void) { | |
CMCON = 0x07; // 比較器を無効化 | |
SCL_DIR = 0; // 出力 | |
SDA_DIR = 0; // 出力 | |
CS_DIR = 0; // 出力 | |
DC_DIR = 0; // 出力 | |
RST_DIR = 0; // 出力 | |
SCL = 0; | |
SDA = 0; | |
CS = 1; | |
DC = 0; | |
RST = 1; | |
} | |
void SPI_Write(unsigned char data) { | |
for (int i = 0; i < 8; i++) { | |
SCL = 0; | |
SDA = (data & 0x80) ? 1 : 0; | |
data <<= 1; | |
//__delay_us(1); | |
SCL = 1; | |
//__delay_us(1); | |
} | |
} | |
void ST7735_Command(unsigned char cmd) { | |
DC = 0; | |
CS = 0; | |
SPI_Write(cmd); | |
CS = 1; | |
} | |
void ST7735_Data(unsigned char data) { | |
DC = 1; | |
CS = 0; | |
SPI_Write(data); | |
CS = 1; | |
} | |
void ST7735_Init(void) { | |
// Reset sequence | |
RST = 0; | |
__delay_ms(100); | |
RST = 1; | |
__delay_ms(100); | |
// Software reset | |
ST7735_Command(0x01); | |
__delay_ms(150); | |
// Sleep out | |
ST7735_Command(0x11); | |
__delay_ms(500); | |
// Frame rate control | |
ST7735_Command(0xB1); | |
ST7735_Data(0x01); | |
ST7735_Data(0x2C); | |
ST7735_Data(0x2D); | |
// Frame rate control (idle mode) | |
ST7735_Command(0xB2); | |
ST7735_Data(0x01); | |
ST7735_Data(0x2C); | |
ST7735_Data(0x2D); | |
// Power control | |
ST7735_Command(0xC0); | |
ST7735_Data(0xA2); | |
ST7735_Data(0x02); | |
ST7735_Data(0x84); | |
// VCOM control | |
ST7735_Command(0xC5); | |
ST7735_Data(0x0A); | |
ST7735_Data(0x00); | |
// Memory data access control | |
ST7735_Command(0x36); | |
ST7735_Data(0xC8); // RGB color order, column address order | |
// Interface pixel format | |
ST7735_Command(0x3A); | |
ST7735_Data(0x05); // 16-bit per pixel | |
// Column address set (X range) | |
ST7735_Command(0x2A); | |
ST7735_Data(0x00); | |
ST7735_Data(0x00); // Start at 0 | |
ST7735_Data(0x00); | |
ST7735_Data(0x82); // End at 130 | |
// Row address set (Y range) | |
ST7735_Command(0x2B); | |
ST7735_Data(0x00); | |
ST7735_Data(0x00); // Start at 0 | |
ST7735_Data(0x00); | |
ST7735_Data(0x84); // End at 130 | |
// Display on | |
ST7735_Command(0x29); | |
__delay_ms(100); | |
} | |
void ST7735_SetRotation(uint8_t rotation) { | |
uint8_t madctl = 0; | |
switch (rotation) { | |
case 0: | |
madctl = 0x00; // 0度 | |
break; | |
case 1: | |
madctl = 0x60; // 90度 | |
break; | |
case 2: | |
madctl = 0xC0; // 180度 | |
break; | |
case 3: | |
madctl = 0xA0; // 270度 | |
break; | |
default: | |
madctl = 0x00; // デフォルトは0度 | |
break; | |
} | |
ST7735_Command(0x36); // MADCTLコマンド | |
ST7735_Data(madctl); // 回転設定 | |
} | |
void main(void) { | |
SPI_Init(); | |
ST7735_Init(); | |
// ST7735_SetRotation(0); | |
while (1) { | |
ST7735_Command(0x2C); //コマンドモード | |
for (int i = 0; i < 130 * 132; i++) { | |
// ST7735_Data(0xFF); // 白色ピクセルデータ | |
ST7735_Data(0xF8); // 赤色の上位8ビット | |
ST7735_Data(0x00); // 赤色の下位8ビット | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment