
Aitendo 1.44inch TFT ZY-FGD1442701V1(ST7735S)を駆動させる. BusOutで接続. Bitmap画像をSDカードから読み込み. Connected with BusOut. Bitmap data read from SD(SDHC) card.
Dependencies: FatFileSystemCpp SDHC_FileSystem mbed
AitendoのTFT液晶モジュール ZY-FGD1442701V1 (ST7735S搭載版) http://www.aitendo.com/product/1621をmbedで動作させるサンプル。
bmp565形式のsample画像
_spi.frequencyを32MHzにするとfreadが高速化します。
SDHCFileSystem.cpp
230: _spi.frequency(32000000);
main.cpp
- Committer:
- 9SQ
- Date:
- 2014-11-19
- Revision:
- 0:80e5869332ba
File content as of revision 0:80e5869332ba:
#include "mbed.h" #include "SDHCFileSystem.h" Serial pc(USBTX, USBRX); SDFileSystem sd(p5, p6, p7, p8, "sd"); DigitalOut CS0(p21); DigitalOut CD(p22); DigitalOut RD(p23); DigitalOut WR(p24); DigitalOut RSTB(p25); BusOut Bout(p17, p16, p15, p14, p13, p12, p11, p10); Timer t; void LCD_Write_CMD(unsigned char cmd) { CS0=0; RD=1; CD=0; Bout=cmd; WR=0; WR=1; CS0=1; } void LCD_Write_Data(unsigned char d) { CS0=0; RD=1; CD=1; Bout=d; WR=0; WR=1; CS0=1; } void LCD_Reset(void) { RSTB=1; wait_ms(1); RSTB=0; wait_ms(1); RSTB=1; wait_ms(120); LCD_Write_CMD(0x11); // Sleep Out and Booster On wait_ms(120); } void LCD_Init(void) { LCD_Reset(); LCD_Write_CMD(0xB1); //In Normal Mode(Full Colors) Frame rate 80Hz LCD_Write_Data(0x02); LCD_Write_Data(0x35); LCD_Write_Data(0x36); LCD_Write_CMD(0xB2); //In Idle Mode(8-colors) LCD_Write_Data(0x02); LCD_Write_Data(0x35); LCD_Write_Data(0x36); LCD_Write_CMD(0xB3); //In Partial Mode + Full Colors LCD_Write_Data(0x02); LCD_Write_Data(0x35); LCD_Write_Data(0x36); LCD_Write_Data(0x02); LCD_Write_Data(0x35); LCD_Write_Data(0x36); LCD_Write_CMD(0xB4); //Dot Inversion Control LCD_Write_Data(0x03); // Inversion setting in Idle mode and full Colors partial mode LCD_Write_CMD(0xC0); // Power Control Setting (GVDD Voltage) LCD_Write_Data(0xA2); // AVDD=5, GVDD=4.6 LCD_Write_Data(0x02); // VGCL=-4.6 LCD_Write_Data(0x84); // MODE=AUTO LCD_Write_CMD(0xC1); // Power Control Setting (VGH/VGL Voltage) LCD_Write_Data(0xC5); // VGH and VGL supply power level = 2.4, VGL=-10, VGH=3*AVDD-0.5 LCD_Write_CMD(0xC2); // In Normal Mode(Full Colors) APA/DCA LCD_Write_Data(0x0D); // SAP=Small, AP=Large LCD_Write_Data(0x00); // Clock frequency for Booster circuit/1,/3,/1,/1,/1 LCD_Write_CMD(0xC3); // In Idle Mode(8-colors) APA/DCA LCD_Write_Data(0x8D); LCD_Write_Data(0xEA); LCD_Write_CMD(0xC4); // In Partial Mode(Full Colors) APA/DCA LCD_Write_Data(0x8D); LCD_Write_Data(0xEE); LCD_Write_CMD(0xC5); // VCOM LCD_Write_Data(0x05); // -0.55 LCD_Write_CMD(0x36); // Memory Data Access Control LCD_Write_Data(0x48); // MX, RGB mode (Row Address Order, RGB color filter panel) LCD_Write_CMD(0xE0); // Gamma Adjustment (+Polarity) LCD_Write_Data(0x03); LCD_Write_Data(0x1B); LCD_Write_Data(0x09); LCD_Write_Data(0x0E); LCD_Write_Data(0x32); LCD_Write_Data(0x2D); LCD_Write_Data(0x28); LCD_Write_Data(0x2C); LCD_Write_Data(0x2B); LCD_Write_Data(0x29); LCD_Write_Data(0x30); LCD_Write_Data(0x3B); LCD_Write_Data(0x00); LCD_Write_Data(0x01); LCD_Write_Data(0x02); LCD_Write_Data(0x10); LCD_Write_CMD(0xE1); // Gamma Adjustment (-Polarity) LCD_Write_Data(0x03); LCD_Write_Data(0x1B); LCD_Write_Data(0x09); LCD_Write_Data(0x0E); LCD_Write_Data(0x32); LCD_Write_Data(0x2E); LCD_Write_Data(0x28); LCD_Write_Data(0x2C); LCD_Write_Data(0x2B); LCD_Write_Data(0x28); LCD_Write_Data(0x31); LCD_Write_Data(0x3C); LCD_Write_Data(0x00); LCD_Write_Data(0x00); LCD_Write_Data(0x02); LCD_Write_Data(0x10); LCD_Write_CMD(0x3A); // Interface Pixel Format LCD_Write_Data(0x05); // 16-bit/pixel LCD_Write_CMD(0x2A); // Column Address Set LCD_Write_Data(0x00); LCD_Write_Data(0x02); LCD_Write_Data(0x00); LCD_Write_Data(0x81); LCD_Write_CMD(0x2B); // Row Address Set LCD_Write_Data(0x00); LCD_Write_Data(0x01); LCD_Write_Data(0x00); LCD_Write_Data(0x80); wait_ms(100); LCD_Write_CMD(0x2C); // Memory Write } void LCD_Enter_Sleep(void) { LCD_Write_CMD(0x10); //Sleep in wait_ms(120); } void LCD_Exit_Sleep(void) { LCD_Write_CMD(0x11); //Sleep out wait_ms(120); } void LCD_Fill_Black(void) { t.start(); LCD_Write_CMD(0x2C); // Memory Write for (int i=0; i<128; i++) { for (int j=0; j<128*2; j++) { LCD_Write_Data(0x00); } } LCD_Write_CMD(0x29); // Display On t.stop(); pc.printf("Fill Black %dms\r\n",t.read_ms()); t.reset(); } void LCD_Fill_White(void) { t.start(); LCD_Write_CMD(0x2C); // Memory Write for (int i=0; i<128; i++) { for (int j=0; j<128*2; j++) { LCD_Write_Data(0xFF); } } LCD_Write_CMD(0x29); // Display On t.stop(); pc.printf("Fill White %dms\r\n",t.read_ms()); t.reset(); } void LCD_Print_Bitmap(char path[32]) { t.start(); FILE *fp; int i,j; unsigned char offset; unsigned short pixel[128]; if ((fp=fopen(path, "rb")) == NULL) { LCD_Fill_Black(); exit(1); } //LCD_Write_CMD(0x28); // Display Off fseek(fp, 0x0a, SEEK_SET); fread(&offset, 1, 1, fp); fseek(fp, offset, SEEK_SET); LCD_Write_CMD(0x2C); // Memory Write for (i=0; i<128; i++) { fread(&pixel, 2, 128, fp); for(j=0;j<128;j++){ LCD_Write_Data((unsigned char)((pixel[j] & 0xFFFF) >> 8)); LCD_Write_Data((unsigned char)pixel[j]); } } LCD_Write_CMD(0x29); // Display On fclose(fp); t.stop(); pc.printf("Print Bitmap %dms\r\n",t.read_ms()); t.reset(); } int main() { LCD_Init(); pc.baud(115200); if (sd.disk_initialize()){ pc.printf("error\r\n"); LCD_Fill_Black(); exit(1); } while(1) { LCD_Print_Bitmap("/sd/sample.bmp"); wait(5); LCD_Print_Bitmap("/sd/sample2.bmp"); wait(5); LCD_Print_Bitmap("/sd/sample3.bmp"); wait(5); } }