哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32驅(qū)動ST7789觸摸屏開發(fā)指南:LVGL主題設(shè)置與示波器面板

零知實驗室 ? 來源:PCB56242069 ? 作者:PCB56242069 ? 2025-04-28 18:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項目概述

本文介紹如何使用ESP32微控制器驅(qū)動ST7789 TFT液晶屏和XPT2046觸摸芯片,通過LVGL圖形庫實現(xiàn)主題切換功能,并開發(fā)一個實用的觸摸屏示波器應用。項目包含兩大核心功能:

LVGL多主題切換:支持8種不同風格的UI主題

示波器功能
模擬/數(shù)字信號采集、觸摸控制面板、光標測量系統(tǒng)、自動頻率檢測

二、硬件準備

組件 型號 說明
主控 零知ESP32 雙核240MHz處理器
屏幕 ST7789 2.4寸 240×320分辨率
觸摸芯片 XPT2046 電阻式觸摸控制器
接線 SPI 使用硬件SPI接口

接線圖

wKgZPGgPE5iAVw_4AAWAWieXOA0976.png

三、環(huán)境搭建

1. 安裝庫

lv_arduino v3.0.1

TFT_eSPI

XPT2046_Touchscreen

2. TFT_eSPI配置(User_Setup.h):

?
?#define ST7789_DRIVER      // Full configuration option, define additional parameters below for this display

#define TFT_WIDTH  240 // ST7789 240 x 240
#define TFT_HEIGHT 320 // ST7789 240 x 320

#define TFT_MISO 19
#define TFT_MOSI 23   
#define TFT_SCLK 18
#define TFT_CS   15  Chip select control pin
#define TFT_DC   2   Data Command control pin
#define TFT_RST  4   Reset pin (could connect to RST pin)

四、核心代碼解析

4.1 LVGL主題設(shè)置

?
// 主題初始化
void setup() {
    lv_test_theme(); // 默認主題
    // 可選主題:
    // lv_test_theme_1(lv_theme_night_init(210, NULL));
    // lv_test_theme_1(lv_theme_material_init(210, NULL));
}

// 顯示驅(qū)動回調(diào)
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
    tft.setAddrWindow(area->x1, area->y1, area->x2, area->y2);
    for(int y=area->y1; y<=area-?>y2; y++){
        for(int x=area->x1; x<=area-?>x2; x++){
            tft.writeColor(color_p->full, 1);
            color_p++;
        }
    }
    lv_disp_flush_ready(disp);
}

4.2 觸摸驅(qū)動(帶消抖)

?
bool my_touchpad_read(lv_indev_drv_t *indev, lv_indev_data_t *data) {
    static lv_coord_t last_x = 0, last_y = 0;
    bool is_touched = ts.touched();
    
    if(is_touched){
        TS_Point p = ts.getPoint();
        // 坐標轉(zhuǎn)換與校準
        last_x = map(p.x, cal_x_min, cal_x_max, 0, 320);
        last_y = map(p.y, cal_y_max, cal_y_min, 0, 240);
        
        // 滑動檢測
        if(abs(last_x - prev_x) >5 || abs(last_y - prev_y) >5){
            is_sliding = true;
        }
        
        // 消抖處理
        if(!is_sliding && (millis()-last_touch_time)>CLICK_DEBOUNCE_MS){
            last_touch_time = millis();
        }
    }
    data->point.x = last_x;
    data->point.y = last_y;
    return false;
}

4.3 簡易示波器核心邏輯

波形采樣:

?
void takeSample() {
    if(!digitalMode){ // 模擬模式
        uint16_t raw = analogRead(ADC_PIN);
        samplesBuffer[sampleIndex] = raw * amplitudeScale;
    }else{ // 數(shù)字模式
        bool state = digitalRead(DIGITAL_PIN);
        samplesBuffer[sampleIndex] = state ? 4095 : 0;
    }
    sampleIndex = (sampleIndex+1) % MAX_SAMPLES;
}

波形繪制:

?
void updateWaveform() {
    waveSprite.fillSprite(BG_COLOR);
    // 繪制網(wǎng)格
    for(int x=0; x

五、觸摸控制面板實現(xiàn)

?
void create_ui(){
    // 創(chuàng)建選項卡式控制面板
    lv_obj_t *tabview = lv_tabview_create(rightPanel, NULL);
    lv_obj_t *timeTab = lv_tabview_add_tab(tabview, "時基");
    
    // 時基選擇滾輪
    lv_obj_t *timebaseRoller = lv_roller_create(timeTab);
    lv_roller_set_options(timebaseRoller, "0.5msn1.0msn2.0ms", LV_ROLLER_MODE_NORMAL);
    
    // 幅度控制滑塊
    lv_obj_t *ampSlider = lv_slider_create(ampTab);
    lv_slider_set_range(ampSlider, 0, 400);
    
    // 模式切換開關(guān)
    modeSwitch = lv_switch_create(controlPanel);
    lv_obj_set_event_cb(modeSwitch, mode_switch_event_cb);
}

六、性能優(yōu)化技巧

雙緩沖機制:使用TFT_eSPI的Sprite功能減少閃爍

異步采樣:在loop()中分離采樣和顯示邏輯

動態(tài)刷新:根據(jù)時基自動調(diào)整刷新率

內(nèi)存管理

?
static lv_color_t buf[LV_HOR_RES_MAX * 10]; // LVGL緩沖區(qū)
TFT_eSprite waveSprite = TFT_eSprite(&tft); // 波形緩沖

七、實測效果

7.1 LVGL不同主題切換

wKgZPGgPUXGAMURlAEDocwUkdmk964.png

演示視頻:
https://www.bilibili.com/video/BV1CwjAziEKj/?spm_id_from=888.80997.embed_other.whitelist&bvid=BV1CwjAziEKj&vd_source=a31e3d8d8ce008260eee442534c2f63d

7.2示波器觸控界面效果

wKgZO2gPUeWAH6IOAFIlaHG6FZY336.png

演示視頻:
https://www.bilibili.com/video/BV1FxjwzwEyF/?spm_id_from=888.80997.embed_other.whitelist&bvid=BV1FxjwzwEyF&vd_source=a31e3d8d8ce008260eee442534c2f63d

八、常見問題解決

觸摸校準異常

修改cal_x_min/max和cal_y_min/max值

使用校準例程獲取實際參數(shù)

LVGL內(nèi)存不足

?// 修改lv_conf.h配置
#define LV_MEM_SIZE (48*1024)
#define LV_DISP_DEF_REFR_PERIOD 30

完整代碼獲取:

Github倉庫:https://github.com/Leeri1y/esp32-st7789

百度網(wǎng)盤:https://pan.baidu.com/s/19TVS2PBJpYqExxsannnH3w?pwd=epyd 提取碼: epyd

互動交流:歡迎在評論區(qū)留言討論,遇到問題可提交Issues

附錄:關(guān)鍵函數(shù)速查表

函數(shù) 功能 調(diào)用示例
lv_btn_create() 創(chuàng)建按鈕 lv_obj_t * btn = lv_btn_create(parent, NULL);
lv_sw_get_state() 獲取開關(guān)狀態(tài) bool state = lv_sw_get_state(sw);
lv_roller_set_options() 設(shè)置滾輪選項 lv_roller_set_options(roller, "1n2n3", true);
waveSprite.pushSprite() 刷新顯示 waveSprite.pushSprite(0, 0);
ts.touched() 檢測觸摸 if(ts.touched()) { ... }

?動手實踐建議

先運行基礎(chǔ)顯示示例驗證硬件連接

逐步添加功能模塊(先顯示后觸摸)

使用串口監(jiān)視器調(diào)試輸出

保存不同版本的代碼備份

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 示波器
    +關(guān)注

    關(guān)注

    113

    文章

    7117

    瀏覽量

    196721
  • ESP32
    +關(guān)注

    關(guān)注

    26

    文章

    1220

    瀏覽量

    22277
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    低電壓觸摸屏控制器AD7879/AD7889:技術(shù)解析與應用指南

    低電壓觸摸屏控制器AD7879/AD7889:技術(shù)解析與應用指南 引言 在當今的電子設(shè)備中,觸摸屏的應用越來越廣泛,從智能手機到工業(yè)控制終端,觸摸屏為用戶提供了直觀、便捷的交互方式。而
    的頭像 發(fā)表于 04-01 15:35 ?125次閱讀

    ESP32/ESP8266開發(fā)板單向一對多ESP-NOW無線通信

    通過ESP-NOW無線通信協(xié)議實現(xiàn)ESP32開發(fā)板向多個ESP32/ESP 8266開發(fā)板發(fā)送數(shù)
    的頭像 發(fā)表于 03-13 09:23 ?238次閱讀
    <b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266<b class='flag-5'>開發(fā)</b>板單向一對多<b class='flag-5'>ESP</b>-NOW無線通信

    【課程升級】鴻蒙星閃WS63開發(fā)板新增《LVGL應用開發(fā)指南》課程,帶開發(fā)讓你的畢設(shè)項目更出彩!

    用的圖形界面。01課程升級核心內(nèi)容快速入門,LVGL圖形界面開發(fā)新增《LVGL應用開發(fā)指南》精品課程,這部分升級已完成,共58講精講,17小時干貨。課程基于Windows
    的頭像 發(fā)表于 11-04 11:45 ?533次閱讀
    【課程升級】鴻蒙星閃WS63<b class='flag-5'>開發(fā)</b>板新增《<b class='flag-5'>LVGL</b>應用<b class='flag-5'>開發(fā)指南</b>》課程,帶<b class='flag-5'>屏</b><b class='flag-5'>開發(fā)</b>讓你的畢設(shè)項目更出彩!

    LVGL實戰(zhàn)指南:手把手教你玩轉(zhuǎn)ESP32-S3 2.8寸串口UI開發(fā)

    你是否也曾被ESP32的顯示開發(fā)折磨到“頭禿”?環(huán)境配置報錯、LVGL移植失敗、屏幕死活不亮……無數(shù)個小時在調(diào)試中白白浪費。別擔心,這篇指南就是你的“速救手冊”。我們將跳過所有繁瑣的坑
    的頭像 發(fā)表于 10-30 18:04 ?2734次閱讀
    <b class='flag-5'>LVGL</b>實戰(zhàn)<b class='flag-5'>指南</b>:手把手教你玩轉(zhuǎn)<b class='flag-5'>ESP32</b>-S3 2.8寸串口<b class='flag-5'>屏</b>UI<b class='flag-5'>開發(fā)</b>

    快速上手!帶你用LVGL工具完成樂鑫科技ESP32-S3 2.8寸串口UI開發(fā)!代碼完全開源!

    還在為嵌入式顯示界面的開發(fā)而煩惱嗎?配置環(huán)境復雜、移植LVGL困難、燒錄過程頻頻出錯——這些問題我們都懂。今天,我們將手把手帶你走完啟明云端ESP32-S32.8寸串口的完整
    的頭像 發(fā)表于 10-30 18:04 ?2313次閱讀
    快速上手!帶你用<b class='flag-5'>LVGL</b>工具完成樂鑫科技<b class='flag-5'>ESP32</b>-S3 2.8寸串口<b class='flag-5'>屏</b>UI<b class='flag-5'>開發(fā)</b>!代碼完全開源!

    st7789軟件包不能添加是怎么回事?

    1、在UI界面上可以看到st7789,但在packages中沒有。 2、沒有看到對應的下載信息。 3、在對應github中可以正常下載。 4、RTT版本為5.1.0. 5、類似的ili9341的添加是正常的。
    發(fā)表于 09-26 07:56

    ESP32-P4-MINI開發(fā)板開箱和上手指南來了!速速碼住!

    上期“夢中情板”ESP32-P4-MINI開發(fā)板一出就備受青睞這期我們立馬就端著開箱和上手指南來了!不用驚嘆,我們就是這么迅速,請把“啟明云端權(quán)威”打在公上好嘛!開箱展示拿到
    的頭像 發(fā)表于 07-25 18:02 ?2443次閱讀
    <b class='flag-5'>ESP32</b>-P4-MINI<b class='flag-5'>開發(fā)</b>板開箱和上手<b class='flag-5'>指南</b>來了!速速碼?。? />    </a>
</div>                              <div   id=

    ESP32開發(fā)板元件資料

    ESP32開發(fā)板元件
    發(fā)表于 07-21 14:47 ?17次下載

    零知開源——STM32F4結(jié)合BMP581氣壓傳感器實現(xiàn)ST7789中文顯示教程

    零知開源平臺是一個專為國開發(fā)者設(shè)計的軟硬件開源平臺,提供比Arduino更易上手的開發(fā)體驗。本教程展示了如何在STM32F407VET6增強板上實現(xiàn)ST7789顯示的中文顯示功能,結(jié)
    的頭像 發(fā)表于 07-09 09:21 ?2182次閱讀
    零知開源——STM32F4結(jié)合BMP581氣壓傳感器實現(xiàn)<b class='flag-5'>ST7789</b>中文顯示教程

    啟明云端ESP32-S3 2.8寸串口到手了?如何上手?看這篇!

    【場外插播】ESP32-S32.8寸串口、MX1.25-7P線、MX1.25-8P線我們都帶來了,開箱展示如下【競猜繼續(xù)】ESP32-S32.8寸串口到手還不知道如何上手點
    的頭像 發(fā)表于 07-07 18:04 ?1099次閱讀
    啟明云端<b class='flag-5'>ESP32</b>-S3 2.8寸串口<b class='flag-5'>屏</b>到手了?如何上手?看這篇!

    零知開源——STM32F1驅(qū)動BMP581壓強傳感器使用SPI實現(xiàn)ST7789顯示的環(huán)境監(jiān)測系統(tǒng)

    clockFrequency = 100000;// 設(shè)置SPI時鐘頻率 // ST7789 顯示引腳定義 #define TFT_CS6// 設(shè)置軟件SPI的片選引腳 #def
    發(fā)表于 07-03 17:26

    泰克4系列MSO示波器觸摸屏操作、協(xié)議解碼與電源噪聲分析指南

    高速信號調(diào)試與復雜系統(tǒng)測試中的得力助手。本文將詳細介紹該示波器觸摸屏操作、協(xié)議解碼應用及電源噪聲分析的具體方法,幫助用戶高效掌握其核心功能。 ? 一、觸摸屏操作指南:直觀交互與高效控
    的頭像 發(fā)表于 05-30 14:19 ?1437次閱讀
    泰克4系列MSO<b class='flag-5'>示波器</b><b class='flag-5'>觸摸屏</b>操作、協(xié)議解碼與電源噪聲分析<b class='flag-5'>指南</b>

    ESP32驅(qū)動ST7789觸摸屏開發(fā)指南LVGL主題設(shè)置示波器面板

    一、項目概述本文介紹如何使用ESP32微控制器驅(qū)動ST7789 TFT液晶和XPT2046觸摸芯片,通過
    發(fā)表于 04-29 10:20

    示波器觸控界面設(shè)計 #ST7789 #嵌入式

    示波器
    PCB56242069
    發(fā)布于 :2025年04月29日 09:29:20

    LVGL主題切換 #ST7789 #嵌入式開發(fā)

    嵌入式開發(fā)
    PCB56242069
    發(fā)布于 :2025年04月29日 08:50:04
    哈巴河县| 黄石市| 河西区| 浮梁县| 东乡县| 恩施市| 襄樊市| 濉溪县| 舒兰市| 青龙| 宁南县| 大英县| 威海市| 山西省| 陵川县| 南江县| 池州市| 斗六市| 茶陵县| 黑河市| 渭源县| 滕州市| 石泉县| 武平县| 永仁县| 宝应县| 富民县| 公主岭市| 盐池县| 永丰县| 镇坪县| 兴国县| 长顺县| 泊头市| 临武县| 疏附县| 新干县| 临桂县| 游戏| 武穴市| 镇远县|