色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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屏幕進(jìn)行內(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ù)說明

圖七_(dá)屏的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默認(rèn)的日志串口(GPIOA_2、GPIOA_3)中的GPIOA_3復(fù)用為觸控屏的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);

    /*右下角填充藍(lán)色塊*/
    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ì)上是生成一個行列坐標(biāo))。查閱zephyr官網(wǎng)Display Interface。

圖九_LCD點陣坐標(biāo)觸控1.JPG

圖九

注冊callback函數(shù)

/* 觸摸回調(diào)函數(shù),打印坐標(biāo) */
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)的坐標(biāo)與狀態(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點陣坐標(biāo)分析.JPG

圖十

審核編輯:劉清

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

    關(guān)注

    17

    文章

    1721

    瀏覽量

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

    關(guān)注

    0

    文章

    11

    瀏覽量

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

    關(guān)注

    0

    文章

    87

    瀏覽量

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

    關(guān)注

    0

    文章

    241

    瀏覽量

    18195
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    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 ?7629次閱讀
    <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坐標(biāo)的電壓值的傳感器。通常有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編的練習(xí)才熟練掌握了技巧。今天就為大家做一下觸摸屏
    發(fā)表于 08-01 17:45 ?7069次閱讀

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

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

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

    隨著生活中類似于PDA的手持設(shè)備的增多,彩色LCD觸摸屏也越來越普及。本文除了簡單介紹EP7212的特性以外,主要討論EP7212上的LCD控制器如何驅(qū)動彩色
    的頭像 發(fā)表于 03-18 09:28 ?3243次閱讀
    基于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)勢

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

    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 ?5725次閱讀
    <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 ?2446次閱讀
    <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è)備進(jìn)行通訊,從而實現(xiàn)對其他設(shè)備的控制和監(jiān)測。Modbus觸摸屏
    的頭像 發(fā)表于 06-28 09:34 ?1639次閱讀
    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ū)別。下面將詳細(xì)介紹電容觸摸屏的原理、結(jié)構(gòu)和特點,并與電阻觸摸屏
    的頭像 發(fā)表于 01-22 16:13 ?5169次閱讀

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

    液晶顯示LCD)和觸摸屏技術(shù)已經(jīng)成為各種電子設(shè)備的核心組成部分,從智能手機到電視和醫(yī)療設(shè)備。在這些設(shè)備中,PCB的設(shè)計對于LCD觸摸屏
    的頭像 發(fā)表于 07-18 11:17 ?2248次閱讀
    <b class='flag-5'>LCD</b><b class='flag-5'>屏</b>和<b class='flag-5'>觸摸屏</b>的PCB設(shè)計
    主站蜘蛛池模板: 成在线人免费视频| 老阿姨儿子一二三区| 超碰97免费人妻| 成人免费在线观看| 成视频高清| 国产精品97久久AV麻豆| 国产精品久久久久久免费字体| 国产乱人偷精品视频A人人澡| 国产精品无码AV天天爽人妻蜜桃| 国产精品网红女主播久久久| 天美传媒MV高清免费看| 性满足久久久久久久久| 亚洲精品伊人久久久久| 亚洲精品久久久午夜福利电影网| 亚洲欧洲精品A片久久99| 真人做受120分钟免费看| 99国产在线视频有精品视频| 俺来也俺去也视频久久| 高h 大尺度纯肉 np快穿| 国产色精品久久人妻无码| 黄色三级在线| 麻豆传煤网站网址入口在线下载 | 亚洲欧美一区二区三区四区| 伊人久久免费| 99视频免费观看| 国产精品卡1卡2卡三卡四| 黄色日本女人| 欧美 国产 日产 韩国 在线| 翁止熄痒禁伦短文合集免费视频| 亚洲视频免费看| 99久久精品免费看国产免费| 国产成人拍精品视频网| 久久大胆视频| 欧美黑人经典片免费观看| 偷窥 亚洲 色 国产 日韩| 伊人久久亚洲精品一区| 成年视频国产免费观看| 激情床戏揉胸吃胸视频| 青草精品国产福利在线视频| 亚洲精品久久久久中文字幕二区 | 欧美性极品黑人hd|