中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站創(chuàng)建風(fēng)格網(wǎng)站優(yōu)化排名哪家性價比高

網(wǎng)站創(chuàng)建風(fēng)格,網(wǎng)站優(yōu)化排名哪家性價比高,東倉建設(shè)網(wǎng)站,一般網(wǎng)站寬度前言 學(xué)習(xí)esp32單片機開發(fā),前段時間在網(wǎng)上買了一塊2.0寸TFT屏幕。 長這個樣子,這個屏幕帶漢字字庫的硬件模塊。我仔細(xì)看了一下這個字庫模塊上面寫的字是25Q32FVSIG 1336 文檔 賣家也發(fā)來了開發(fā)文檔,是個doc文檔,張這個樣子。 開…

前言

學(xué)習(xí)esp32單片機開發(fā),前段時間在網(wǎng)上買了一塊2.0寸TFT屏幕。

長這個樣子,這個屏幕帶漢字字庫的硬件模塊。我仔細(xì)看了一下這個字庫模塊上面寫的字是25Q32FVSIG 1336

在這里插入圖片描述在這里插入圖片描述

文檔

賣家也發(fā)來了開發(fā)文檔,是個doc文檔,張這個樣子。

在這里插入圖片描述
在這里插入圖片描述

開發(fā)準(zhǔn)備

下面開始根據(jù)文檔進(jìn)行開發(fā),調(diào)用這個字庫文件內(nèi)的漢字,并且把它顯示出來。
這個是我的接線,沒有走硬件spi,這樣直接插上去,就免去了接線線。
引腳對應(yīng)

ST7789_GND GND
ST7789_VCC 15 VCC
ST7789_SCL 2  (SCLK)
ST7789_SDA 4  (MOSI)
ST7789_SDO 16  (MISO)
ST7789_RST 17
ST7789_DC 5
ST7789_CS 18
ST7789_CSF 19  
ST7789_BLK 21 VCC

在這里插入圖片描述

創(chuàng)建工程 PlatformIO工程
配置和引用

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps = bodmer/TFT_eSPI@^2.5.43tikaflow/UTF8ToGB2312@^1.1.52
1.引入TFT_eSPI.h 下載地址:https://github.com/Bodmer/TFT_eSPI
2.在User_Setup.h中放開注釋: #define TFT_WIDTH  240放開注釋: #define TFT_HEIGHT 320放開注釋: #define ST7789_DRIVER 注釋掉:默認(rèn)的#define ILI9341_DRIVER#define TFT_MOSI 4
#define TFT_SCLK 2
#define TFT_CS   18  // Chip select control pin
#define TFT_DC   5   // Data Command control pin
#define TFT_RST  17  // Reset pin (could connect to RST pin)
#define TFT_BL   21  // LED back-light

源碼實現(xiàn)

根據(jù)上面文檔,實現(xiàn)讀取模塊中漢字并且渲染到屏幕上。下面是源碼

main.cpp

#include <Arduino.h>
#include <TFT_eSPI.h>
#include <SPI.h>
#include "UTF8ToGB2312.h"
TFT_eSPI tft;
// 字庫芯片引腳
#define FLASH_CS 19
#define FLASH_MISO 16// 字庫結(jié)構(gòu)體
struct FontInfo {uint8_t fontSize;      // 字號uint32_t byteSize;     // 字庫占用字節(jié)數(shù) 實際占用是 byteSize * fontSizeuint32_t addr;         // 字庫偏移地址
};// ASCII 字庫信息
const FontInfo ASCII_FONTS[] = {{12, 1, 0X1000L},  // 6x12{14, 1, 0X1600L},  // 7x14{16, 1, 0X1D00L},  // 8x16{18, 2, 0X2500L},  // 9x18{20, 2, 0X3700L},  // 10x20{22, 2, 0X4B00L},  // 11x22{24, 2, 0X6100L},  // 12x24{26, 2, 0X7900L}   // 13x26
};// GB2312 字庫信息
const FontInfo GB2312_FONTS[] = {{12, 2, 0X9300L},     // 12x12{14, 2, 0X39300L},    // 14x14{16, 2, 0X71300L},    // 16x16{18, 3, 0XB1300L},    // 18x18{20, 3, 0X11D300L},   // 20x20{22, 3, 0X195300L},   // 22x22{24, 3, 0X219300L},   // 24x24{26, 4, 0X2A9300L}    // 26x26
};// 初始化 SPI Flash
void initFlash() {pinMode(FLASH_CS, OUTPUT);digitalWrite(FLASH_CS, HIGH);SPI.begin(TFT_SCLK, FLASH_MISO, TFT_MOSI, FLASH_CS);SPI.setFrequency(1000000);SPI.setDataMode(SPI_MODE0);
}// 讀取字庫數(shù)據(jù)
uint8_t readFontData(uint32_t addr) {uint8_t data;digitalWrite(FLASH_CS, LOW);SPI.transfer(0x03);SPI.transfer((addr >> 16) & 0xFF);SPI.transfer((addr >> 8) & 0xFF);SPI.transfer(addr & 0xFF);data = SPI.transfer(0x00);digitalWrite(FLASH_CS, HIGH);return data;
}// 顯示一個漢字 (GB2312)
void drawGB2312Char(uint16_t x, uint16_t y, uint16_t ch, uint16_t color, uint8_t fontSize) {if (fontSize < 12 || fontSize > 26 || (fontSize % 2) != 0) {return; // 無效的字體大小}const FontInfo& fontInfo = GB2312_FONTS[(fontSize - 12) / 2];uint32_t fontAddr = fontInfo.addr + (((ch >> 8) - 0xA1) * 94 + (ch & 0xFF) - 0xA1) * fontInfo.fontSize * fontInfo.byteSize;for (uint16_t i = 0; i < fontInfo.fontSize; i++) {for (uint16_t j = 0; j < fontInfo.byteSize; j++) {uint8_t data = readFontData(fontAddr + i * fontInfo.byteSize + j);for (uint8_t k = 0; k < 8; k++) {if (data & (0x80 >> k)) {tft.drawPixel(x + j * 8 + k, y + i, color);}}}}
}// 顯示一個 ASCII 字符
void drawASCIIChar(uint16_t x, uint16_t y, uint8_t ch, uint16_t color, uint8_t fontSize) {if (fontSize < 12 || fontSize > 26 || (fontSize % 2) != 0) {return; // 無效的字體大小}const FontInfo& fontInfo = ASCII_FONTS[(fontSize - 12) / 2];uint32_t fontAddr = fontInfo.addr + ch * fontInfo.byteSize * fontInfo.fontSize;for (uint16_t i = 0; i < fontInfo.fontSize; i++) {for (uint16_t j = 0; j < fontInfo.byteSize; j++) {uint8_t data = readFontData(fontAddr + i * fontInfo.byteSize + j);for (uint8_t k = 0; k < 8; k++) {if (data & (0x80 >> k)) {tft.drawPixel(x + j * 8 + k, y + i, color);}}}}
}// 顯示字符串 (兼容漢字、英文字符和數(shù)字)
void drawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint8_t fontSize = 16) {String gbStr = GB.get(str); // UTF-8 to GB2312const char *gbCharPtr = gbStr.c_str();uint16_t xPos = x;while (*gbCharPtr) {uint8_t ch = (uint8_t)gbCharPtr[0];if (ch >= 0xA1) { // 漢字uint16_t gbCh = (ch << 8) | (uint8_t)gbCharPtr[1];drawGB2312Char(xPos, y, gbCh, color, fontSize);xPos += fontSize;gbCharPtr += 2;} else if (ch >= 32 && ch <= 126) { // ASCII 字符drawASCIIChar(xPos, y, ch, color, fontSize);gbCharPtr++;xPos += fontSize / 2;} else { // 其他字符或錯誤處理gbCharPtr++; // 跳過未知字符}}
}void setup() {Serial.begin(115200);pinMode(15, OUTPUT);pinMode(21, OUTPUT);digitalWrite(15, HIGH);digitalWrite(21, HIGH);tft.init();tft.fillScreen(TFT_BLACK);initFlash();drawString(0, 0, "12號:你好,世界!123abc", TFT_GREEN, 12);drawString(0, 12, "14號:你好,世界!123abc", TFT_GREEN, 14);drawString(0, 26, "16號:你好,世界!123abc", TFT_GREEN, 16);drawString(0, 42, "18號:你好,世界!123abc", TFT_GREEN, 18);drawString(0, 60, "20號:你好,世界!123abc", TFT_GREEN, 20);drawString(0, 80, "22號:你好,世界!123abc", TFT_GREEN, 22);drawString(0, 102, "24號:你好,世界!123abc", TFT_GREEN, 24);drawString(0, 126, "26號:你好,世界!123abc", TFT_GREEN, 26);drawString(0, 180, "CSDN關(guān)注:雨季余靜", TFT_GREEN, 26);
}void loop() {}

最終效果如下

在這里插入圖片描述

總結(jié)

雖然源碼沒多少行,但是真的折騰了我一整天。

主要是這模塊是gb2312的字庫,然而程序代碼中的漢字是UTF-8漢字。顯示出來就是亂碼,開始我還以為是我弄錯了,后來才發(fā)現(xiàn)代碼中的文字是UTF-8編碼。引入了UTF8ToGB2312.h 問題就迎刃而解了。

如果解決了你的問題希望給個關(guān)注,謝謝。

http://www.risenshineclean.com/news/52483.html

相關(guān)文章:

  • 行業(yè)網(wǎng)站渠道選擇和內(nèi)容運營免費二級域名生成網(wǎng)站
  • 網(wǎng)站建設(shè)的技術(shù)需要多少錢下載百度網(wǎng)盤
  • 推廣網(wǎng)站利潤推廣普通話的意義是什么
  • 公司網(wǎng)站建設(shè)宣傳杭州網(wǎng)站seo推廣
  • 義烏網(wǎng)站建設(shè)微信開發(fā)2023年6月份疫情嚴(yán)重嗎
  • 微網(wǎng)站模板建設(shè)編程培訓(xùn)機構(gòu)排名前十
  • wordpress網(wǎng)站怎么打開資源網(wǎng)站快速優(yōu)化排名
  • 公司網(wǎng)站封面怎么做搜索引擎優(yōu)化的具體操作
  • 政協(xié)網(wǎng)站建設(shè)方案seo北京優(yōu)化
  • 網(wǎng)上哪些網(wǎng)站可以做兼職湖北seo
  • b2c十大平臺排名seo是搜索引擎營銷嗎
  • 桂平做網(wǎng)站公司百度seo怎么提高排名
  • 微信小程序開發(fā)網(wǎng)站谷歌瀏覽器官方app下載
  • 工作站seo云優(yōu)化是什么意思
  • 網(wǎng)站怎么做友情鏈接河南seo網(wǎng)站多少錢
  • 網(wǎng)站制作公司網(wǎng)站建設(shè)海外seo網(wǎng)站推廣
  • 高級營銷網(wǎng)站建設(shè)只需1200元營銷推廣的方法有哪些
  • 做招生網(wǎng)站軟文推廣例子
  • 做幼兒園成長冊的素材網(wǎng)站軟文發(fā)布平臺排名
  • 國外設(shè)計網(wǎng)站d百度官方網(wǎng)站首頁
  • 響應(yīng)式網(wǎng)站源碼快速收錄工具
  • 進(jìn)入網(wǎng)站服務(wù)器怎么做青島關(guān)鍵詞優(yōu)化平臺
  • 蘇州企業(yè)網(wǎng)站設(shè)計注冊網(wǎng)站多少錢
  • 如何搭建電子商務(wù)平臺佛山做seo推廣公司
  • 西部數(shù)碼個人網(wǎng)站seo實戰(zhàn)培訓(xùn)學(xué)校
  • 娛樂網(wǎng)站建設(shè)淄博網(wǎng)站制作優(yōu)化
  • 信管女生做網(wǎng)站開發(fā)百度集團(tuán)
  • 泉州企業(yè)自助建站促銷策略的四種方式
  • php動態(tài)網(wǎng)站開發(fā)教學(xué)設(shè)計360網(wǎng)站安全檢測
  • 廣州專業(yè)網(wǎng)站建設(shè)價格百度小程序?qū)W(wǎng)站seo