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

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

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

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

開發(fā)第1個(gè)LVGL程序與實(shí)現(xiàn)按鍵操作

瑞薩MCU小百科 ? 來(lái)源: 瑞薩MCU小百科 ? 2025-01-07 13:49 ? 次閱讀

12.2.2 編譯程序

執(zhí)行如下命令編譯:

左右滑動(dòng)查看完整內(nèi)容

$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ cd lv_port_linux_frame_buffer-release-v9.0
$ mkdir build
$ cd build 
$ cmake .. # 如果提示沒有 cmake 的話,執(zhí)行:sudo apt install cmake
$ make -j 16

執(zhí)行完畢后,在源碼根目錄下生成了bin子目錄,里面有可執(zhí)行程序“main”:

左右滑動(dòng)查看完整內(nèi)容

$ ls ../bin/
main
$ file ../bin/main
../bin/main: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-aarch64.so.1, for GNU/Linux 
3.14.0, BuildID[sha1]=3fb9d000d98266fc0d4a252e8addaf07660e9612, wi
th debug_info, not stripped

12.2.3 上機(jī)運(yùn)行

把編譯出來(lái)的可執(zhí)行程序main復(fù)制到開發(fā)板/mnt目錄:

左右滑動(dòng)查看完整內(nèi)容

$ scp ../bin/main root@192.168.5.9:/mnt

把系統(tǒng)的GUI程序關(guān)閉:

左右滑動(dòng)查看完整內(nèi)容

$ systemctl stop myir.service # 現(xiàn)在停止,下次開機(jī)重新啟動(dòng)

執(zhí)行第1個(gè)LVGL程序:

左右滑動(dòng)查看完整內(nèi)容

$ /mnt/main

可以看到如下界面:

e8daba30-ccac-11ef-9310-92fbcf53809c.png

12.3 實(shí)現(xiàn)按鍵操作

本節(jié)課程將開發(fā)一個(gè)LVGL程序,它顯示2個(gè)按鈕(button):第1個(gè)名為“Click me”,第2個(gè)名為“Reset”;并顯示一個(gè)label。當(dāng)用戶點(diǎn)擊第1個(gè)按鈕時(shí),label顯示的計(jì)數(shù)值加一;當(dāng)用戶點(diǎn)擊第2個(gè)按鈕時(shí),label顯示的計(jì)數(shù)值復(fù)位為0。

本節(jié)源碼位于如下目錄(已修改好):

e90ba014-ccac-11ef-9310-92fbcf53809c.png

12.3.1 編寫程序

在“第1個(gè)LVGL程序”的基礎(chǔ)上修改代碼。

1. 增加鼠標(biāo)的支持

修改“l(fā)v_config.h”,把宏“LV_USE_EVDEV”定義為1,如下所示:

左右滑動(dòng)查看完整內(nèi)容

889 #define LV_USE_EVDEV 1

修改“main.c”,增加,代碼如下:

左右滑動(dòng)查看完整內(nèi)容

60 int main(void)
61 {
62 lv_init();
63
64 /*Linux frame buffer device init*/
65 lv_display_t * disp = lv_linux_fbdev_create();
66 lv_linux_fbdev_set_file(disp, "/dev/fb0");
67
68 LV_IMG_DECLARE(mouse_cursor_icon)
69 lv_obj_t * cursor_obj = lv_img_create(lv_layer_sys()); /*Create an image objec
t for the cursor */
70 lv_img_set_src(cursor_obj, &mouse_cursor_icon); /*Set the image sourc
e*/
71 lv_indev_t * indev = lv_evdev_create(LV_INDEV_TYPE_POINTER, "/dev/input/event1
");
72 lv_indev_set_cursor(indev, cursor_obj);
73
74 /*Create a Demo*/
75 //lv_demo_widgets();
76 //lv_demo_widgets_start_slideshow();
77
78 button_test();
79
80 /*Handle LVGL tasks*/
81 while(1) {
82 lv_timer_handler();
83 usleep(5000);
84 }
85
86 return 0;
87 }

第68行,聲明鼠標(biāo)指針的圖案,這就相當(dāng)于如下語(yǔ)句(mouse_curson_icon在“mouse_cursor_icon.c”中定義):

左右滑動(dòng)查看完整內(nèi)容

extern const lv_image_dsc_t mouse_cursor_icon;

第69行,創(chuàng)建一個(gè)“image object”。

第70行,設(shè)置“image object”的“image”,即:要顯示一個(gè)“image object”,需要設(shè)置它對(duì)應(yīng)的圖片。

第71行,創(chuàng)建一個(gè)輸入設(shè)備,它跟某個(gè)設(shè)備節(jié)點(diǎn)對(duì)應(yīng)。注意:需要接上鼠標(biāo),確定鼠標(biāo)對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)。方法為:接上鼠標(biāo)后,執(zhí)行如下命令(使用hexdump逐個(gè)測(cè)試設(shè)備節(jié)點(diǎn),執(zhí)行hexdump后,移動(dòng)鼠標(biāo),有數(shù)據(jù)打印的話就找到了設(shè)備節(jié)點(diǎn)):

左右滑動(dòng)查看完整內(nèi)容

root@myir-remi-1g:~# ls /dev/input/event*
/dev/input/event0 /dev/input/event1 /dev/input/event1 
/dev/input/event3 /dev/input/event4
root@myir-remi-1g:~#
root@myir-remi-1g:~# hexdump /dev/input/event2
0000000 0329 b493 0000 0000 9c6d 0008 0000 0000
0000010 0002 0000 0001 0000 0329 b493 0000 0000

第72行,輸入設(shè)備和前面的“image object”建立聯(lián)系。以后移動(dòng)鼠標(biāo)時(shí),就可以顯示對(duì)應(yīng)的光標(biāo)了。

第75~76行:注釋掉,我們不使用這個(gè)界面。

第78行,運(yùn)行我們的測(cè)試函數(shù)。

2. 創(chuàng)建按鈕及l(fā)abel

main函數(shù)里調(diào)用了“button_test”函數(shù),它里面創(chuàng)建了3個(gè)按鈕,代碼如下:

左右滑動(dòng)查看完整內(nèi)容

31 static void button_test(void)
32 {
33 lv_obj_t * btn_increment;
34 lv_obj_t * btn_reset;
35 lv_obj_t * label_btn_text;
36 lv_obj_t * label_value;
37
38 // Increment button
39 btn_increment = lv_button_create(lv_screen_active());
40 lv_obj_align(btn_increment, LV_ALIGN_CENTER, -100, 0);
41
42 label_btn_text = lv_label_create(btn_increment);
43 lv_label_set_text(label_btn_text, "Click me");
44
45 // Reset button
46 btn_reset = lv_button_create(lv_screen_active());
47 lv_obj_align(btn_reset, LV_ALIGN_CENTER, 100, 0);
48
49 label_btn_text = lv_label_create(btn_reset);
50 lv_label_set_text(label_btn_text, "Reset");
51
52 // Value label
53 label_value = lv_label_create(lv_screen_active());
54 lv_obj_align(label_value, LV_ALIGN_CENTER, 0, 0);
55
56 lv_obj_add_event_cb(btn_increment, btn_event_handler, LV_EVENT_CLICKED, label_
value);
57 lv_obj_add_event_cb(btn_reset, btn_event_handler, LV_EVENT_CLICKED, label_valu
e);
58 }
59

第39~43行,創(chuàng)建第1個(gè)按鈕“Click me”。

其中,第39行創(chuàng)建button,第40行設(shè)置對(duì)齊方式,第42行創(chuàng)建按鈕的label,第43行設(shè)置label的值。

第46~50行,創(chuàng)建第2個(gè)按鈕“Reset”。

其中,第46行創(chuàng)建button,第47行設(shè)置對(duì)齊方式,第49行創(chuàng)建按鈕的label,第50行設(shè)置label的值。

第53~54行,創(chuàng)建一個(gè)label。

其中,第53行創(chuàng)建label,第54行設(shè)置對(duì)齊方式。

第56行,為第1個(gè)按鈕設(shè)置回調(diào)函數(shù)。

第57行,為第2個(gè)按鈕設(shè)置回調(diào)函數(shù)。

3. 增加按鈕回調(diào)函數(shù)

按鈕回調(diào)函數(shù)為“btn_event_handler”,代碼如下:

左右滑動(dòng)查看完整內(nèi)容

08 static void btn_event_handler(lv_event_t * e)
09 {
10 lv_event_code_t code = lv_event_get_code(e);
11 lv_obj_t * btn = lv_event_get_target(e);
12 lv_obj_t * label_value = lv_event_get_user_data(e);
13 lv_obj_t * btn_label = lv_obj_get_child(btn, 0);
14 char * label_text = lv_label_get_text(btn_label);
15
16 if(code == LV_EVENT_CLICKED) {
17 if(strcmp(label_text, "Click me") == 0)
18 {
19 LV_LOG_USER("Increment");
20 lv_label_set_text_fmt(label_value, "%d", (atoi(lv_label_get_text(label
_value))+1));
21 }
22 else if(strcmp(label_text, "Reset") == 0)
23 {
24 LV_LOG_USER("Reset");
25 lv_label_set_text(label_value, "0");
26 }
27 }
28 }

第10行,取出輸入事件的code,它有這些取值:LV_EVENT_CLICKED、LV_EVENT_RELEASED等。

第11行,獲得被點(diǎn)擊的圖標(biāo)。

第12行,獲得“用戶數(shù)據(jù)”,在前面的第56、57行設(shè)置按鈕回調(diào)函數(shù)時(shí)設(shè)置了“用戶數(shù)據(jù)”,這個(gè)用戶數(shù)據(jù)就是用于顯示計(jì)數(shù)值的label。

第13行,獲得被點(diǎn)擊的圖標(biāo)的label。

第14行,獲得被點(diǎn)擊的圖標(biāo)的label的值。

第16~21行,如果點(diǎn)擊的是“Click me”按鈕,則增加label 的計(jì)數(shù)值。

第22~27行,如果點(diǎn)擊的是“Reset”按鈕,則復(fù)位label的計(jì)數(shù)值為0。

12.3.2 上機(jī)運(yùn)行

執(zhí)行如下命令編譯:

左右滑動(dòng)查看完整內(nèi)容

$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ tar xjf lv_port_linux_frame_buffer_mouse.tar.bz2
$ cd lv_port_linux_frame_buffer_mouse
$ mkdir build
$ cd build 
$ cmake .. # 如果提示沒有 cmake 的話,執(zhí)行:sudo apt install cmake
$ make -j 16

執(zhí)行完畢后,在源碼根目錄下生成了bin子目錄,里面有可執(zhí)行程序“main”:

左右滑動(dòng)查看完整內(nèi)容

$ ls ../bin/
main
$ file ../bin/main
../bin/main: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-aarch64.so.1, for GNU/Linux 
3.14.0, BuildID[sha1]=3fb9d000d98266fc0d4a252e8addaf07660e9612, wi
th debug_info, not stripped

把編譯出來(lái)的可執(zhí)行程序main復(fù)制到開發(fā)板/mnt目錄:

左右滑動(dòng)查看完整內(nèi)容

$ scp ../bin/main root@192.168.5.9:/mnt

把系統(tǒng)的GUI程序關(guān)閉:

左右滑動(dòng)查看完整內(nèi)容

$ systemctl stop myir.service # 現(xiàn)在停止,下次開機(jī)重新啟動(dòng)

執(zhí)行程序:

$ /mnt/main

如果沒有接入鼠標(biāo)的話,程序會(huì)出錯(cuò),如下所示:

e92f4e92-ccac-11ef-9310-92fbcf53809c.png

正常的界面如下(點(diǎn)擊“Click me”數(shù)值增加1,點(diǎn)擊“Reset”數(shù)值變?yōu)?):

e95f9692-ccac-11ef-9310-92fbcf53809c.png

12.4 實(shí)現(xiàn)開機(jī)運(yùn)行

修改板子的“/usr/bin/start.sh”,內(nèi)容如下:

左右滑動(dòng)查看完整內(nèi)容

#!/bin/sh -e
echo "Start MYiR HMI V2.0..."
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export QT_QPA_FB_TSLIB=1
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
echo 7 > /sys/class/backlight/backlight/brightness
sleep 5
# 【警告】這一行需要手動(dòng)敲上去,不可復(fù)制粘貼,否則不生效!作用:去掉屏幕左上角的光標(biāo)顯示
echo -e "?33[?25l" > /dev/tty1 
echo 1 > /proc/sys/kernel/printk # 降低內(nèi)核打印等級(jí),這樣屏幕上就不用有內(nèi)核信息輸出
/mnt/main & # 你自己的程序
#/home/mxapp2 -platform linuxfb & # 注釋掉
#/usr/share/myir_test/age.sh & # 注釋掉
exit 0

然后重啟即可。

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

    關(guān)注

    8

    文章

    652

    瀏覽量

    29358
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    695

    瀏覽量

    22073
  • 編譯程序
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    4145
  • LVGL
    +關(guān)注

    關(guān)注

    1

    文章

    91

    瀏覽量

    3031

原文標(biāo)題:開發(fā)第1個(gè)LVGL程序與實(shí)現(xiàn)按鍵操作 - RZ MPU工業(yè)控制教程連載(46)

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    按鍵操作的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    按鍵在我們的項(xiàng)目中是經(jīng)常使用到的組件。一般來(lái)說(shuō),我們都是在用到按鍵時(shí)直接針對(duì)編碼,但這樣每次都做很多重復(fù)性的工作。所以在這里我們考慮做一般性抽象得到一個(gè)可應(yīng)用于按鍵
    的頭像 發(fā)表于 12-08 10:57 ?1527次閱讀
    <b class='flag-5'>按鍵</b><b class='flag-5'>操作</b>的驅(qū)動(dòng)設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    LVGL開發(fā)入門教程

    LVGL(Light and Versatile Graphics Library)是一個(gè)開源的嵌入式圖形庫(kù),由Gábor Kiss-Vámosi于2016年創(chuàng)建,遵守MIT協(xié)議。目前由來(lái)自世界各地的志愿者共同維護(hù)和開發(fā)
    的頭像 發(fā)表于 01-03 15:23 ?994次閱讀
    <b class='flag-5'>LVGL</b><b class='flag-5'>開發(fā)</b>入門教程

    如何控制兩個(gè)按鍵實(shí)現(xiàn)個(gè)按鍵先按后,2個(gè)按鍵才能被按下

    簡(jiǎn)單講,必須一個(gè)按鍵先動(dòng)作后,2個(gè)按鍵才能被按下,否則2
    發(fā)表于 09-26 07:19

    LVGL的輸入設(shè)備API對(duì)接

    使用外部物理按鍵進(jìn)行操作,那么請(qǐng)確保你實(shí)現(xiàn)了讀按鍵狀態(tài)的驅(qū)動(dòng))。LVGL有三大種需要對(duì)接的APIy顯示API(教程一已
    發(fā)表于 01-18 10:12

    Purple Pi R1 LVGL使?參考

    LVGL是?個(gè)輕量級(jí)的,開源的圖形庫(kù)。本?詳細(xì)介紹了如何在Purple Pi開發(fā)板上運(yùn)?lvgl應(yīng)?,同時(shí)介紹了如何使?著名的LVGL ID
    發(fā)表于 09-06 15:25

    lvgl外部按鍵驅(qū)動(dòng)問題

    我使用lvgl作為屏幕的gui,但是屏幕觸摸驅(qū)動(dòng)跟按鍵驅(qū)動(dòng)都有,我觸摸驅(qū)動(dòng)可以直接添加進(jìn)lvgl里面,按鍵的功能不局限于屏幕的控制,我應(yīng)該怎么加進(jìn)去,或者外部使用的話怎么能讓
    發(fā)表于 10-07 09:52

    HL開發(fā)板獨(dú)立按鍵操作方法學(xué)習(xí)程序

    HL開發(fā)板【實(shí)驗(yàn)11】獨(dú)立按鍵操作方法,單片機(jī)學(xué)習(xí)程序,很好的學(xué)習(xí)資料。
    發(fā)表于 09-01 16:11 ?5次下載
    HL<b class='flag-5'>開發(fā)</b>板獨(dú)立<b class='flag-5'>按鍵</b><b class='flag-5'>操作</b>方法學(xué)習(xí)<b class='flag-5'>程序</b>

    使用單片機(jī)C語(yǔ)言實(shí)現(xiàn)獨(dú)立按鍵檢測(cè)與矩陣鍵盤操作的資料和程序

    所有的電子產(chǎn)品幾乎到涉及到按鍵操作。所以微控制器是如何識(shí)別一個(gè)按鍵是否被按下,按下后又該如何做出反應(yīng),又如何防止按鍵抖動(dòng)呢?更深入一點(diǎn),微控
    發(fā)表于 07-16 17:39 ?2次下載
    使用單片機(jī)C語(yǔ)言<b class='flag-5'>實(shí)現(xiàn)</b>獨(dú)立<b class='flag-5'>按鍵</b>檢測(cè)與矩陣鍵盤<b class='flag-5'>操作</b>的資料和<b class='flag-5'>程序</b>

    使用單片機(jī)實(shí)現(xiàn)1個(gè)獨(dú)立按鍵控制LED的C語(yǔ)言程序免費(fèi)

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)1個(gè)獨(dú)立按鍵控制LED的C語(yǔ)言程序免費(fèi)。
    發(fā)表于 11-19 18:10 ?21次下載

    使用單片機(jī)實(shí)現(xiàn)1個(gè)獨(dú)立按鍵控制LED狀態(tài)轉(zhuǎn)換的C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)1個(gè)獨(dú)立按鍵控制LED狀態(tài)轉(zhuǎn)換的C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 11-23 17:45 ?26次下載

    全面解讀目前LVGL的應(yīng)用小知識(shí)

    概述 本文介紹目前LVGL的應(yīng)用小知識(shí),希望對(duì)采用MCU設(shè)計(jì)UI界面的用戶有所啟發(fā),開發(fā)出界面更友好的消費(fèi)品或者工業(yè)產(chǎn)品,造福大眾。 01. LVGL系統(tǒng)架構(gòu) LVGL系統(tǒng)框架 應(yīng)用
    的頭像 發(fā)表于 06-04 12:01 ?3w次閱讀
    全面解讀目前<b class='flag-5'>LVGL</b>的應(yīng)用小知識(shí)

    RT-Thread大會(huì):如何實(shí)現(xiàn)4個(gè)按鍵的手勢(shì)組合?

    我有基于一個(gè)電極的非觸摸程序,如何實(shí)現(xiàn)4個(gè)按鍵的手勢(shì)組合?   通過4路波形判斷手勢(shì)   即使在在一一
    的頭像 發(fā)表于 05-27 11:01 ?1191次閱讀
    RT-Thread大會(huì):如何<b class='flag-5'>實(shí)現(xiàn)</b>4<b class='flag-5'>個(gè)</b><b class='flag-5'>按鍵</b>的手勢(shì)組合?

    【開鴻智谷NiobeU4開發(fā)板免費(fèi)試用體驗(yàn)】lvgl移植及實(shí)現(xiàn)ADC按鍵狀態(tài)顯示

    智谷NiobeU4開發(fā)板免費(fèi)試用體驗(yàn)】移植LVGL ?本文參考成功移植,實(shí)現(xiàn)按鍵按下sw4顯示SW4 Pressed松開顯示SW4 Release,整理踩坑經(jīng)驗(yàn)分享如下。
    的頭像 發(fā)表于 10-14 11:27 ?1335次閱讀
    【開鴻智谷NiobeU4<b class='flag-5'>開發(fā)</b>板免費(fèi)試用體驗(yàn)】<b class='flag-5'>lvgl</b>移植及<b class='flag-5'>實(shí)現(xiàn)</b>ADC<b class='flag-5'>按鍵</b>狀態(tài)顯示

    stm32單片機(jī)如何實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序

    stm32單片機(jī)如何實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序? 作為一款功能強(qiáng)大的微控制器,STM32單片機(jī)可以支持多種應(yīng)用場(chǎng)景,其中一
    的頭像 發(fā)表于 09-14 14:22 ?6272次閱讀

    LVGL開發(fā)指南介紹

    電子發(fā)燒友網(wǎng)站提供《LVGL開發(fā)指南介紹.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 10:24 ?17次下載
    主站蜘蛛池模板: 草莓湿漉漉是好事还是恶性| 亚洲精品国产第一区第二区| 国产精品成人网| 孕妇高潮抽搐喷水30分钟| 少妇被阴内射XXXB少妇BB| 美女不要啊| 黑人巨茎vide抽搐| 贵妇局长的蕾丝乳罩| 99精品电影| 在线视频 日韩视频二区| 胸太大被男同桌吃好爽| 人人在线碰碰视频免费| 免费国产成人高清在线观看视频| 红豆视频免费资源观看| 国产精品成人无码免费视频 | a圾片目录大全| 亚洲人成网站在线观看90影院| 日韩亚洲欧美中文高清| 免费成年人在线观看视频| 久久久久999| 精品一品国产午夜福利视频| 国产伦子沙发午休系列资源曝光| 北条麻妃久久99精品| 99在线这精品视频| 2021精品高清卡1卡2卡3麻豆| 亚洲日韩成人| 亚洲欧美综合乱码精品成人网| 香蕉97超级碰碰碰碰碰久| 射死你天天日| 双性大乳浪受噗呲噗呲h总| 日产精品高潮呻吟AV久久| 欧美亚洲国产免费高清视频| 欧美506070| 欧美日韩精品一区二区三区高清视频 | 日韩一区二区三区射精| 秋霞最新高清无码鲁丝片| 欧美人与禽ZOZO性伦交视频| 男人J放进女人P全黄网站| 蜜柚影院在线观看免费高清中文| 乱辈通奷XXXXXHD猛交| 噜噜噜在线AV免费观看看|