精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

LCD觸摸屏功能實現(xiàn)控制電機的設(shè)計

冬至子 ? 來源:聆思科技AI芯片 ? 作者:vesperW ? 2023-01-18 17:02 ? 次閱讀

LCD屏顯示實現(xiàn)觸摸功能

驅(qū)動320* 240 ST7789的SPI屏幕進行內(nèi)容顯示,顯示文字和觸控屏的基本使用;參考了:驅(qū)動模型中定義了可供上層應(yīng)用調(diào)用的關(guān)鍵接口,如 讀/寫framebuffer 、開/關(guān)觸控動作的操作畫面 、獲取屏幕設(shè)備信息 、 設(shè)置亮度/對比度/像素格式/方向等。

下圖為觸控屏的四個觸控開/關(guān)四個電機的“按鍵”

圖一 上電開機后顯示.jpg

圖一(上電開機后顯示)

圖二 1號電機工作.jpg

圖二(1號電機工作)

圖三 2號電機工作.jpg

圖三(2號電機工作)

圖四 3號電機工作.jpg

圖四(3號電機工作)

圖五 4號電機工作.jpg

圖五(4號電機工作)

圖六 等待操作的狀態(tài).jpg

圖六(等待操作的狀態(tài))

顯示觸控屏的常用API接口

void display_get_capabilities(const struct device *dev, struct display_capabilities *capabilities)

參數(shù)說明

圖七_屏的API接口參數(shù)說明.JPG

圖七

顯示屏設(shè)備樹配置

&csk6002_9s_nano_pinctrl{
            ...
            /* 顯示屏SPI接口配置 */
            pinctrl_spi0_sclk_default: spi0_sclk_default {
                    pinctrls = < &pinmuxa 15 6 >;
            };
            pinctrl_spi0_mosi_default: spi0_mosi_default {
                    pinctrls = < &pinmuxa 10 6 >;
            };
            pinctrl_spi0_miso_default: spi0_miso_default {
                    pinctrls = < &pinmuxa 17 6 >;
            };
            pinctrl_spi0_cs_default: spi0_cs_default {
                    pinctrls = < &pinmuxa 12 6 >;
            }; 
};

觸摸屏設(shè)備樹配置

用到引腳:i2c0_scl(pb2)、i2c0_sda(pb3)。

在 csk6011a_nano.overlay中完成外設(shè)接口的配置,具體實現(xiàn)如下:

在app/boards/目錄下的csk6002_9s_nano.overlay文件并添加如下設(shè)備樹配置:

圖八_overlay設(shè)備樹配置.JPG

圖八

&csk6002_9s_nano_pinctrl{
   // ...
    /* 觸摸屏I2C接口配置 */
    pinctrl_i2c0_scl_default: i2c0_scl_default{
            pinctrls = <&pinmuxb 2 8>;
    };
    
    pinctrl_i2c0_sda_default: i2c0_sda_default{
            pinctrls = <&pinmuxb 3 8>;
    }; 
};

&i2c0 {
        status = "okay";
        pinctrl-0 = <&pinctrl_i2c0_scl_default &pinctrl_i2c0_sda_default>; 
        pinctrl-names = "default";
        ft5336@0 {
                compatible = "focaltech,ft5336";
                reg = <0x38>;
                label = "FT5336";
                status = "okay";
                int-gpios = <&gpioa 3 0>;
        };
};

日志串口設(shè)備樹配置

本示例中將SDK默認的日志串口(GPIOA_2、GPIOA_3)中的GPIOA_3復用為觸控屏的int使能腳,因此將日志輸出串口配置為GPIOb_10 、GPIOb_11,具體如下:

&csk6002_9s_nano_pinctrl{  
            /* 日志串口配置 */
            pinctrl_uart0_rx_default: uart0_rx_default{
                    pinctrls = <&pinmuxb 10 2>;
            };
            
            pinctrl_uart0_tx_default: uart0_tx_default{
                    pinctrls = <&pinmuxb 11 2>;
            };
            ...
};

觸摸屏組件配置

在prj.conf文件中打開觸摸屏功能配置:

觸摸配置

CONFIG_KSCAN=y

I2C功能配置

CONFIG_I2C=y

觸摸屏屏驅(qū)動配置

CONFIG_KSCAN_BL6XXX=y

顯示屏組件配置

在prj.conf文件中打開顯示屏功能配置:

CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_LOG=y

GPIO功能配置

CONFIG_GPIO=y

顯示功能配置

CONFIG_DISPLAY=y

spi功能配置

CONFIG_SPI=y

ST7789V顯示屏驅(qū)動配置

CONFIG_ST7789V=y

LCD屏顯示實現(xiàn)

void main(void)
{
    size_t x;
    size_t y;
    size_t rect_w;
    size_t rect_h;
    size_t h_step;
    size_t scale;
    size_t grey_count;
    uint8_t *buf;
    int32_t grey_scale_sleep;
    const struct device *display_dev;
    struct display_capabilities capabilities;
    struct display_buffer_descriptor buf_desc;
    size_t buf_size = 0;
    fill_buffer fill_buffer_fnc = NULL;

    LOG_INF("Display sample for %s", DISPLAY_DEV_NAME);
    
    /* kscan初始化 */
    kscan_init();
    
    /* 獲取display設(shè)備實例 */
    display_dev = device_get_binding(DISPLAY_DEV_NAME);

    if (display_dev == NULL) {
        LOG_ERR("Device %s not found. Aborting sample.",
            DISPLAY_DEV_NAME);
        RETURN_FROM_MAIN(1);
    }
    
    /* 獲取顯示功能 */
    display_get_capabilities(display_dev, &capabilities);

    if (capabilities.screen_info & SCREEN_INFO_MONO_VTILED) {
        rect_w = 32;
        rect_h = 10;
    } else {
        rect_w = 2;
        rect_h = 1;
    }

    h_step = rect_h;
    scale = (capabilities.x_resolution / 8) / rect_h;

    rect_w *= scale;
    rect_h *= scale;

    if (capabilities.screen_info & SCREEN_INFO_EPD) {
        grey_scale_sleep = 10000;
    } else {
        grey_scale_sleep = 100;
    }

    buf_size = rect_w * rect_h;

    if (buf_size < (capabilities.x_resolution * h_step)) {
        buf_size = capabilities.x_resolution * h_step;
    }
    
    /* 色塊配置 */
    switch (capabilities.current_pixel_format) {
    case PIXEL_FORMAT_ARGB_8888:
        fill_buffer_fnc = fill_buffer_argb8888;
        buf_size *= 4;
        break;
    case PIXEL_FORMAT_RGB_888:
        fill_buffer_fnc = fill_buffer_rgb888;
        buf_size *= 3;
        break;
    case PIXEL_FORMAT_RGB_565:
        fill_buffer_fnc = fill_buffer_rgb565;
        buf_size *= 2;
        break;
    case PIXEL_FORMAT_BGR_565:
        fill_buffer_fnc = fill_buffer_bgr565;
        buf_size *= 2;
        break;
    case PIXEL_FORMAT_MONO01:
    case PIXEL_FORMAT_MONO10:
        fill_buffer_fnc = fill_buffer_mono;
        buf_size /= 8;
        break;
    default:
        LOG_ERR("Unsupported pixel format. Aborting sample.");
        RETURN_FROM_MAIN(1);
    }

    buf = k_malloc(buf_size);

    if (buf == NULL) {
        LOG_ERR("Could not allocate memory. Aborting sample.");
        RETURN_FROM_MAIN(1);
    }
    
    (void)memset(buf, 0xFFu, buf_size);

    buf_desc.buf_size = buf_size;
    buf_desc.pitch = capabilities.x_resolution;
    buf_desc.width = capabilities.x_resolution;
    buf_desc.height = h_step;

    /*整屏填充白色背景*/
    for (int idx = 0; idx < capabilities.y_resolution; idx += h_step) {
        display_write(display_dev, 0, idx, &buf_desc, buf);
    }

    /*左上角填充紅色塊*/
    fill_buffer_fnc(TOP_LEFT, 0, buf, buf_size);
    x = 0;
    y = 0;
    display_write(display_dev, x, y, &buf_desc, buf);

    /*右上角填充綠色塊*/
    fill_buffer_fnc(TOP_RIGHT, 0, buf, buf_size);
    x = capabilities.x_resolution - rect_w;
    y = 0;
    display_write(display_dev, x, y, &buf_desc, buf);

    /*右下角填充藍色塊*/
    fill_buffer_fnc(BOTTOM_RIGHT, 0, buf, buf_size);
    x = capabilities.x_resolution - rect_w;
    y = capabilities.y_resolution - rect_h;
    display_write(display_dev, x, y, &buf_desc, buf);
    
    /* 關(guān)閉顯示消隱 */
    display_blanking_off(display_dev);

    grey_count = 0;
    x = 0;
    y = capabilities.y_resolution - rect_h;

    /*左下角灰色動態(tài)色塊*/
    while (1) {
        fill_buffer_fnc(BOTTOM_LEFT, grey_count, buf, buf_size);
        display_write(display_dev, x, y, &buf_desc, buf);
        ++grey_count;
        k_msleep(grey_scale_sleep);
    }
}

觸摸屏功能實現(xiàn)

Zephyr具備kscan(keyboard scan matrix)驅(qū)動模型,其驅(qū)動程序用于檢測矩陣鍵盤或帶有按鈕的設(shè)備中的按鍵(用戶觸碰觸摸屏本質(zhì)上是生成一個行列坐標)。查閱zephyr官網(wǎng)Display Interface。

圖九_LCD點陣坐標觸控1.JPG

圖九

注冊callback函數(shù)

/* 觸摸回調(diào)函數(shù),打印坐標 */
static void k_callback(const struct device *dev, uint32_t row, uint32_t col,
               bool pressed)
{
    ARG_UNUSED(dev);
    printk("row = %u col = %u, pressed:%s\\n", row, col, pressed ? "TRUE" : "FLASE");
}

void kscan_init(void)
{   
    /* 獲取kscan設(shè)備實例 */
    const struct device *kscan_dev = device_get_binding(DISPLAY_KSAN_DEV_NAME);

    if (!device_is_ready(kscan_dev)) {
        LOG_ERR("kscan device %s not ready", kscan_dev->name);
        return;
    }
    
    /* 注冊回調(diào),在k_callback中可看到對應(yīng)的坐標與狀態(tài)printk輸出操作 */
    kscan_config(kscan_dev, k_callback);
    /* 使能回調(diào) */
    kscan_enable_callback(kscan_dev);
}

void main(void)
{
    kscan_init();
    ...
}

編譯的指令是:

lisa zep build

燒錄的指令是:

lisa zep flash

結(jié)果

觸控屏顯示了四個觸控開關(guān)符,分別觸摸對應(yīng)顯示在(LED1符 LED2符 LED3符 LED4符的下面觸控開關(guān))。四個功能(GPIO) PWM 控制電機運行,后面補上(高發(fā)性的疫情過后,回公司上班補上,焊接上電機驅(qū)動板)。我們開發(fā)了一個PC上位機軟件(視覺圖分析用)。GC032A攝像頭上傳的圖像以后可以在觸控屏顯(一個靜態(tài)圖)。

圖十_圖像LCD點陣坐標分析.JPG

圖十

審核編輯:劉清

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

    關(guān)注

    17

    文章

    1701

    瀏覽量

    91345
  • LCD觸摸屏
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    6684
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    87

    瀏覽量

    11543
  • 控制電機
    +關(guān)注

    關(guān)注

    0

    文章

    237

    瀏覽量

    18087
收藏 人收藏

    評論

    相關(guān)推薦

    LCD電阻觸摸屏的設(shè)計安裝

    如今LCD 觸摸屏的應(yīng)用在日常生活中已經(jīng)很常見,觸摸屏的人機交互簡單快捷,本文介紹了在設(shè)計安裝LCD的電阻式觸摸屏時,我們需要注意的事項。
    發(fā)表于 04-08 10:41 ?906次閱讀

    電阻式觸摸屏,什么是電阻式觸摸屏

    電阻式觸摸屏,什么是電阻式觸摸屏   這種觸摸屏利用壓力感應(yīng)進行控制。電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電
    發(fā)表于 03-24 11:02 ?5591次閱讀

    EP7212處理器的LCD控制觸摸屏接口設(shè)計

    介紹EP7212 嵌入式處理器上LCD 控制器的結(jié)構(gòu)和功能;深入探討 ADS7843 觸摸屏接口芯片的模式選擇才應(yīng)用技巧;基于該系統(tǒng)給出一個與彩色L
    發(fā)表于 07-19 15:08 ?29次下載
    EP7212處理器的<b class='flag-5'>LCD</b><b class='flag-5'>控制</b>及<b class='flag-5'>觸摸屏</b>接口設(shè)計

    LCD控制觸摸屏接口設(shè)計

    觸摸屏作為一種特殊的計算機外設(shè), 是目前最自然、便利的一種人機交互方式。提出了一種用8位單片機控制16位帶觸摸屏LCD的設(shè)計方法。TFT- LCD
    發(fā)表于 05-02 11:08 ?7495次閱讀
    <b class='flag-5'>LCD</b><b class='flag-5'>控制</b>及<b class='flag-5'>觸摸屏</b>接口設(shè)計

    電阻式觸摸屏的結(jié)構(gòu)和實現(xiàn)原理介紹

    很多LCD模塊都采用了電阻式觸摸屏,這些觸摸屏等效于將物理位置轉(zhuǎn)換為代表X、Y坐標的電壓值的傳感器。通常有4線、5線、7線和8線觸摸屏實現(xiàn)
    的頭像 發(fā)表于 12-11 09:35 ?2.5w次閱讀
    電阻式<b class='flag-5'>觸摸屏</b>的結(jié)構(gòu)和<b class='flag-5'>實現(xiàn)</b>原理介紹

    如何掌握PLC觸摸屏控制電機的正反轉(zhuǎn)

    PLC觸摸屏控制電機的正反轉(zhuǎn)是plc編程中很重要的一個環(huán)節(jié),所以難度是可想而知的。有些自動化高級工程師在初期也是經(jīng)過4到5編的練習才熟練掌握了技巧。今天就為大家做一下觸摸屏
    發(fā)表于 08-01 17:45 ?6948次閱讀

    PLC觸摸屏的作用_觸摸屏是怎樣控制PLC的

    PLC程序是用來控制電氣設(shè)備傳動的智能儀器,它需要工程人員利用編程語言編寫程序,以實現(xiàn)各種控制方式。觸摸屏程序可與PLC可編程序控制器直接連
    發(fā)表于 05-21 10:46 ?1.9w次閱讀

    基于EP7212處理器芯片實現(xiàn)LCD觸摸屏控制器的應(yīng)用方案

    隨著生活中類似于PDA的手持設(shè)備的增多,彩色LCD觸摸屏也越來越普及。本文除了簡單介紹EP7212的特性以外,主要討論EP7212上的LCD控制器如何驅(qū)動彩色
    的頭像 發(fā)表于 03-18 09:28 ?3138次閱讀
    基于EP7212處理器芯片<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>LCD</b><b class='flag-5'>觸摸屏</b><b class='flag-5'>控制</b>器的應(yīng)用方案

    電容觸摸屏的優(yōu)勢

    當你使用手機和POS設(shè)備時,有曾想過為什么可以通過LCD觸摸屏控制他們嗎? 沒錯,電容式觸摸技術(shù)可以實現(xiàn)這些
    的頭像 發(fā)表于 02-24 11:26 ?1726次閱讀

    LCD電容觸摸屏的三種觸摸技術(shù)In-Cell/On-Cell/OGS

    相信了解過TFT LCD觸摸顯示的朋友們一定都聽說過In-Cell/ On-Cell/ OGS電容觸摸技術(shù)。在很多的行業(yè)領(lǐng)域,都會應(yīng)用到
    的頭像 發(fā)表于 04-28 15:14 ?5318次閱讀
    <b class='flag-5'>LCD</b>電容<b class='flag-5'>觸摸屏</b>的三種<b class='flag-5'>觸摸</b>技術(shù)In-Cell/On-Cell/OGS

    LCD | TFT LCD 觸摸屏的選擇

    具有觸摸功能的TFT LCD顯示操作簡單,被廣泛應(yīng)用在各個領(lǐng)域。觸摸屏技術(shù)有5種類型,他們具有優(yōu)點和局限性,領(lǐng)域成本,圖像質(zhì)量,
    的頭像 發(fā)表于 10-13 16:57 ?2223次閱讀
    <b class='flag-5'>LCD</b> | TFT <b class='flag-5'>LCD</b> <b class='flag-5'>觸摸屏</b>的選擇

    modbus觸摸屏

    modbus觸摸屏是指支持Modbus通訊協(xié)議的觸摸屏,它可以通過串口或網(wǎng)絡(luò)與其他設(shè)備進行通訊,從而實現(xiàn)對其他設(shè)備的控制和監(jiān)測。Modbus觸摸屏
    的頭像 發(fā)表于 06-28 09:34 ?1565次閱讀
    modbus<b class='flag-5'>觸摸屏</b>

    基于嵌入式LCD觸摸屏的設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式LCD觸摸屏的設(shè)計.doc》資料免費下載
    發(fā)表于 10-12 10:18 ?4次下載
    基于嵌入式<b class='flag-5'>LCD</b>的<b class='flag-5'>觸摸屏</b>的設(shè)計

    電容觸摸屏原理 電容觸摸屏和電阻觸摸屏有什么區(qū)別

    電容觸摸屏和電阻觸摸屏是兩種常見的觸摸屏技術(shù),它們在原理、結(jié)構(gòu)和應(yīng)用方面都有很大的區(qū)別。下面將詳細介紹電容觸摸屏的原理、結(jié)構(gòu)和特點,并與電阻觸摸屏
    的頭像 發(fā)表于 01-22 16:13 ?4150次閱讀

    LCD觸摸屏的PCB設(shè)計

    液晶顯示LCD)和觸摸屏技術(shù)已經(jīng)成為各種電子設(shè)備的核心組成部分,從智能手機到電視和醫(yī)療設(shè)備。在這些設(shè)備中,PCB的設(shè)計對于LCD觸摸屏
    的頭像 發(fā)表于 07-18 11:17 ?1908次閱讀
    <b class='flag-5'>LCD</b><b class='flag-5'>屏</b>和<b class='flag-5'>觸摸屏</b>的PCB設(shè)計