LVGL学习记录:按键
按键按下加一
程序
#include <lvgl.h>
#include <TFT_eSPI.h>/*If you want to use the LVGL examples,make sure to install the lv_examples Arduino libraryand uncomment the following line.
#include <lv_examples.h>
*/// #include <lv_demo.h>#define LV_USE_LOG 1TFT_eSPI tft = TFT_eSPI(); /* TFT instance *//*Change to your screen resolution*/
static const uint32_t screenWidth = 320;
static const uint32_t screenHeight = 240;static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * 10 ];#if LV_USE_LOG != 0
/* Serial debugging */
void my_print( lv_log_level_t level, const char * file, uint32_t line, const char * fn_name, const char * dsc )
{Serial.printf( "%s(%s)@%d->%s\r\n", file, fn_name, line, dsc );Serial.flush();
}
#endif/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{uint32_t w = ( area->x2 - area->x1 + 1 );uint32_t h = ( area->y2 - area->y1 + 1 );tft.startWrite();tft.setAddrWindow( area->x1, area->y1, w, h );tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );tft.endWrite();lv_disp_flush_ready( disp );
}/*Read the touchpad*/
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{uint16_t touchX, touchY;bool touched = tft.getTouch( &touchX, &touchY, 600 );if( !touched ){data->state = LV_INDEV_STATE_REL;}else{data->state = LV_INDEV_STATE_PR;/*Set the coordinates*/data->point.x = touchX;data->point.y = touchY;Serial.print( "Data x " );Serial.println( touchX );Serial.print( "Data y " );Serial.println( touchY );}
}static void btn_event_callback(lv_event_t* event)
{static uint32_t counter = 1;lv_obj_t* btn = lv_event_get_target(event); //获取事件对象if (btn != NULL){lv_obj_t* label = lv_obj_get_child(btn, 0); // 获取第一个子对象if (label != NULL){lv_label_set_text_fmt(label, "%d", counter); //设置显示内容counter++;}}
}void lv_button_click_event_test()
{lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象if (btn != NULL){lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度lv_obj_set_pos(btn, 110, 100);; // 设置按钮位置,即X和Y坐标lv_obj_add_event_cb(btn, btn_event_callback, LV_EVENT_CLICKED, NULL); // 给对象添加CLICK事件和事件处理回调函数lv_obj_t* label = lv_label_create(btn); // 基于Button对象创建Label对象if (label != NULL){lv_label_set_text(label, "Click me!"); // 设置显示内容lv_obj_center(label); // 对象居中显示}}
}
/*
static void slider_event_callback(lv_event_t* event)
{lv_obj_t * slider = lv_event_get_target(event);if (slider != NULL){lv_obj_t* label = (lv_obj_t* )lv_event_get_user_data(event);if (label != NULL){// 刷新label对象的文本lv_label_set_text_fmt(label, "%d", lv_slider_get_value(slider));lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 设置对齐,label对象在slider对象上方中间位置}}
}void lv_slider_test()
{lv_obj_t * slider = lv_slider_create(lv_scr_act()); // 创建滑块对象if (slider != NULL){lv_obj_set_width(slider, 200); // 设置slider的宽度lv_obj_center(slider); // 对样显示在屏幕中央lv_slider_set_range(slider, 10, 200); // 设置滑块值的变化范围10-200lv_obj_t* label = lv_label_create(lv_scr_act()); // 创建一个标签,用于显示滑块的滑动值if (label != NULL){lv_label_set_text_fmt(label, "%d", lv_slider_get_min_value(slider)); // 标签默认显示滑块的最小值lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 标签对象放在slider对象的上方中间位置// 添加滑块值变化事件和事件回调函数,并将label对象最为事件的user_datalv_obj_add_event_cb(slider, slider_event_callback, LV_EVENT_VALUE_CHANGED, (void *)label);}}
}
*/
void setup()
{Serial.begin( 115200 ); /* prepare for possible serial debug */Serial.println( "Hello Arduino! (V8.0.X)" );Serial.println( "I am LVGL_Arduino" );lv_init();#if LV_USE_LOG != 0// lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endiftft.begin(); /* TFT init */tft.setRotation( 1 ); /* Landscape orientation, flipped *//*Set the touchscreen calibration data,the actual data for your display can be aquired usingthe Generic -> Touch_calibrate example from the TFT_eSPI library*/uint16_t calData[5] = { 442, 3414, 336, 3425, 3 };tft.setTouch(calData);lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * 10 );/*Initialize the display*/static lv_disp_drv_t disp_drv;lv_disp_drv_init( &disp_drv );/*Change the following line to your display resolution*/disp_drv.hor_res = screenWidth;disp_drv.ver_res = screenHeight;disp_drv.flush_cb = my_disp_flush;disp_drv.draw_buf = &draw_buf;lv_disp_drv_register( &disp_drv );/*Initialize the (dummy) input device driver*/static lv_indev_drv_t indev_drv;lv_indev_drv_init( &indev_drv );indev_drv.type = LV_INDEV_TYPE_POINTER;indev_drv.read_cb = my_touchpad_read;lv_indev_drv_register( &indev_drv );#if 0/* Create simple label */lv_obj_t *label = lv_label_create( lv_scr_act() );lv_label_set_text( label, "Hello Arduino! (V8.0.X)" );lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );
#elselv_button_click_event_test();
// lv_slider_test();/* Try an example from the lv_examples Arduino librarymake sure to include it as written above.lv_example_btn_1();*/// uncomment one of these demos// lv_demo_widgets(); // OK// lv_demo_benchmark(); // OK// lv_demo_keypad_encoder(); // works, but I haven't an encoder// lv_demo_music(); // NOK// lv_demo_printer();// lv_demo_stress(); // seems to be OK
#endifSerial.println( "Setup done" );
}void loop()
{lv_timer_handler(); /* let the GUI do its work */lv_tick_inc(5);delay(5);
}
其中主要的设置有以下几个
分别是设置大小,设置按键的位置
lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度
lv_obj_set_pos(btn, 110, 100);; // 设置按钮位置,即X和Y坐标
效果
按下一次数值加一
修改按键颜色
#include <lvgl.h>
#include <TFT_eSPI.h>/*If you want to use the LVGL examples,make sure to install the lv_examples Arduino libraryand uncomment the following line.
#include <lv_examples.h>
*/// #include <lv_demo.h>#define LV_USE_LOG 1TFT_eSPI tft = TFT_eSPI(); /* TFT instance *//*Change to your screen resolution*/
static const uint32_t screenWidth = 320;
static const uint32_t screenHeight = 240;static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * 10 ];static lv_style_t style_btn;
#if LV_USE_LOG != 0
/* Serial debugging */
void my_print( lv_log_level_t level, const char * file, uint32_t line, const char * fn_name, const char * dsc )
{Serial.printf( "%s(%s)@%d->%s\r\n", file, fn_name, line, dsc );Serial.flush();
}
#endif/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{uint32_t w = ( area->x2 - area->x1 + 1 );uint32_t h = ( area->y2 - area->y1 + 1 );tft.startWrite();tft.setAddrWindow( area->x1, area->y1, w, h );tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );tft.endWrite();lv_disp_flush_ready( disp );
}/*Read the touchpad*/
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{uint16_t touchX, touchY;bool touched = tft.getTouch( &touchX, &touchY, 600 );if( !touched ){data->state = LV_INDEV_STATE_REL;}else{data->state = LV_INDEV_STATE_PR;/*Set the coordinates*/data->point.x = touchX;data->point.y = touchY;Serial.print( "Data x " );Serial.println( touchX );Serial.print( "Data y " );Serial.println( touchY );}
}static void btn_event_callback(lv_event_t* event)
{static uint32_t counter = 1;lv_obj_t* btn = lv_event_get_target(event); //获取事件对象if (btn != NULL){lv_obj_t* label = lv_obj_get_child(btn, 0); // 获取第一个子对象if (label != NULL){lv_label_set_text_fmt(label, "%d", counter); //设置显示内容counter++;}}
}void lv_button_click_event_test()
{lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象if (btn != NULL){lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT); // 给按钮对象添加默认样式lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_RED)); // 样式背景色为红色lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度lv_obj_set_pos(btn, 110, 100);; // 设置按钮位置,即X和Y坐标lv_obj_add_event_cb(btn, btn_event_callback, LV_EVENT_CLICKED, NULL); // 给对象添加CLICK事件和事件处理回调函数lv_obj_t* label = lv_label_create(btn); // 基于Button对象创建Label对象if (label != NULL){lv_label_set_text(label, "Click me!"); // 设置显示内容lv_obj_center(label); // 对象居中显示}}
}
/*
static void slider_event_callback(lv_event_t* event)
{lv_obj_t * slider = lv_event_get_target(event);if (slider != NULL){lv_obj_t* label = (lv_obj_t* )lv_event_get_user_data(event);if (label != NULL){// 刷新label对象的文本lv_label_set_text_fmt(label, "%d", lv_slider_get_value(slider));lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 设置对齐,label对象在slider对象上方中间位置}}
}void lv_slider_test()
{lv_obj_t * slider = lv_slider_create(lv_scr_act()); // 创建滑块对象if (slider != NULL){lv_obj_set_width(slider, 200); // 设置slider的宽度lv_obj_center(slider); // 对样显示在屏幕中央lv_slider_set_range(slider, 0, 1024); // 设置滑块值的变化范围0-1024lv_obj_t* label = lv_label_create(lv_scr_act()); // 创建一个标签,用于显示滑块的滑动值if (label != NULL){lv_label_set_text_fmt(label, "%d", lv_slider_get_min_value(slider)); // 标签默认显示滑块的最小值lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 标签对象放在slider对象的上方中间位置// 添加滑块值变化事件和事件回调函数,并将label对象最为事件的user_datalv_obj_add_event_cb(slider, slider_event_callback, LV_EVENT_VALUE_CHANGED, (void *)label);}}
}*/void setup()
{Serial.begin( 115200 ); /* prepare for possible serial debug */Serial.println( "Hello Arduino! (V8.0.X)" );Serial.println( "I am LVGL_Arduino" );lv_init();#if LV_USE_LOG != 0// lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endiftft.begin(); /* TFT init */tft.setRotation( 1 ); /* Landscape orientation, flipped *//*Set the touchscreen calibration data,the actual data for your display can be aquired usingthe Generic -> Touch_calibrate example from the TFT_eSPI library*/uint16_t calData[5] = { 442, 3414, 336, 3425, 3 };tft.setTouch(calData);lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * 10 );/*Initialize the display*/static lv_disp_drv_t disp_drv;lv_disp_drv_init( &disp_drv );/*Change the following line to your display resolution*/disp_drv.hor_res = screenWidth;disp_drv.ver_res = screenHeight;disp_drv.flush_cb = my_disp_flush;disp_drv.draw_buf = &draw_buf;lv_disp_drv_register( &disp_drv );/*Initialize the (dummy) input device driver*/static lv_indev_drv_t indev_drv;lv_indev_drv_init( &indev_drv );indev_drv.type = LV_INDEV_TYPE_POINTER;indev_drv.read_cb = my_touchpad_read;lv_indev_drv_register( &indev_drv );#if 0/* Create simple label */lv_obj_t *label = lv_label_create( lv_scr_act() );lv_label_set_text( label, "Hello Arduino! (V8.0.X)" );lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );
#elselv_button_click_event_test();
// lv_slider_test();/* Try an example from the lv_examples Arduino librarymake sure to include it as written above.lv_example_btn_1();*/// uncomment one of these demos// lv_demo_widgets(); // OK// lv_demo_benchmark(); // OK// lv_demo_keypad_encoder(); // works, but I haven't an encoder// lv_demo_music(); // NOK// lv_demo_printer();// lv_demo_stress(); // seems to be OK
#endifSerial.println( "Setup done" );
}void loop()
{lv_timer_handler(); /* let the GUI do its work */lv_tick_inc(5);delay(5);
}
效果
也可以调为其他颜色
主要是这二句
lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT); // 给按钮对象添加默认样式
lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_YELLOW)); // 样式背景色为黄色
颜色名称如下:
LV_PALETTE_RED
LV_PALETTE_PINK
LV_PALETTE_PURPLE
LV_PALETTE_DEEP_PURPLE
LV_PALETTE_INDIGO
LV_PALETTE_BLUE
LV_PALETTE_LIGHT_BLUE
LV_PALETTE_CYAN
LV_PALETTE_TEAL
LV_PALETTE_GREEN
LV_PALETTE_LIGHT_GREEN
LV_PALETTE_LIME
LV_PALETTE_YELLOW
LV_PALETTE_AMBER
LV_PALETTE_ORANGE
LV_PALETTE_DEEP_ORANGE
LV_PALETTE_BROWN
LV_PALETTE_BLUE_GREY
LV_PALETTE_GREY
设置为圆角矩阵
代码
#include <lvgl.h>
#include <TFT_eSPI.h>/*If you want to use the LVGL examples,make sure to install the lv_examples Arduino libraryand uncomment the following line.
#include <lv_examples.h>
*/// #include <lv_demo.h>#define LV_USE_LOG 1TFT_eSPI tft = TFT_eSPI(); /* TFT instance *//*Change to your screen resolution*/
static const uint32_t screenWidth = 320;
static const uint32_t screenHeight = 240;static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * 10 ];static lv_style_t style_btn;
#if LV_USE_LOG != 0
/* Serial debugging */
void my_print( lv_log_level_t level, const char * file, uint32_t line, const char * fn_name, const char * dsc )
{Serial.printf( "%s(%s)@%d->%s\r\n", file, fn_name, line, dsc );Serial.flush();
}
#endif/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{uint32_t w = ( area->x2 - area->x1 + 1 );uint32_t h = ( area->y2 - area->y1 + 1 );tft.startWrite();tft.setAddrWindow( area->x1, area->y1, w, h );tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );tft.endWrite();lv_disp_flush_ready( disp );
}/*Read the touchpad*/
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{uint16_t touchX, touchY;bool touched = tft.getTouch( &touchX, &touchY, 600 );if( !touched ){data->state = LV_INDEV_STATE_REL;}else{data->state = LV_INDEV_STATE_PR;/*Set the coordinates*/data->point.x = touchX;data->point.y = touchY;Serial.print( "Data x " );Serial.println( touchX );Serial.print( "Data y " );Serial.println( touchY );}
}static void btn_event_callback(lv_event_t* event)
{static uint32_t counter = 1;lv_obj_t* btn = lv_event_get_target(event); //获取事件对象if (btn != NULL){lv_obj_t* label = lv_obj_get_child(btn, 0); // 获取第一个子对象if (label != NULL){lv_label_set_text_fmt(label, "%d", counter); //设置显示内容counter++;}}
}void lv_button_click_event_test()
{/*lv_obj_t* label = NULL;lv_style_reset(&style_btn); // 重置按钮样式lv_style_init(&style_btn); // 初始化按钮样式lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_RED)); // 样式背景色为红色*/lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象if (btn != NULL){lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT); // 给按钮对象添加默认样式lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_YELLOW)); // 样式背景色为黄色lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0); // 添加按钮对象的圆角弧度样lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度lv_obj_set_pos(btn, 110, 100);; // 设置按钮位置,即X和Y坐标lv_obj_add_event_cb(btn, btn_event_callback, LV_EVENT_CLICKED, NULL); // 给对象添加CLICK事件和事件处理回调函数lv_obj_t* label = lv_label_create(btn); // 基于Button对象创建Label对象if (label != NULL){lv_label_set_text(label, "Click me!"); // 设置显示内容lv_obj_center(label); // 对象居中显示}}
}
/*
static void slider_event_callback(lv_event_t* event)
{lv_obj_t * slider = lv_event_get_target(event);if (slider != NULL){lv_obj_t* label = (lv_obj_t* )lv_event_get_user_data(event);if (label != NULL){// 刷新label对象的文本lv_label_set_text_fmt(label, "%d", lv_slider_get_value(slider));lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 设置对齐,label对象在slider对象上方中间位置}}
}void lv_slider_test()
{lv_obj_t * slider = lv_slider_create(lv_scr_act()); // 创建滑块对象if (slider != NULL){lv_obj_set_width(slider, 200); // 设置slider的宽度lv_obj_center(slider); // 对样显示在屏幕中央lv_slider_set_range(slider, 0, 1024); // 设置滑块值的变化范围0-1024lv_obj_t* label = lv_label_create(lv_scr_act()); // 创建一个标签,用于显示滑块的滑动值if (label != NULL){lv_label_set_text_fmt(label, "%d", lv_slider_get_min_value(slider)); // 标签默认显示滑块的最小值lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15); // 标签对象放在slider对象的上方中间位置// 添加滑块值变化事件和事件回调函数,并将label对象最为事件的user_datalv_obj_add_event_cb(slider, slider_event_callback, LV_EVENT_VALUE_CHANGED, (void *)label);}}
}*/void setup()
{Serial.begin( 115200 ); /* prepare for possible serial debug */Serial.println( "Hello Arduino! (V8.0.X)" );Serial.println( "I am LVGL_Arduino" );lv_init();#if LV_USE_LOG != 0// lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endiftft.begin(); /* TFT init */tft.setRotation( 1 ); /* Landscape orientation, flipped *//*Set the touchscreen calibration data,the actual data for your display can be aquired usingthe Generic -> Touch_calibrate example from the TFT_eSPI library*/uint16_t calData[5] = { 442, 3414, 336, 3425, 3 };tft.setTouch(calData);lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * 10 );/*Initialize the display*/static lv_disp_drv_t disp_drv;lv_disp_drv_init( &disp_drv );/*Change the following line to your display resolution*/disp_drv.hor_res = screenWidth;disp_drv.ver_res = screenHeight;disp_drv.flush_cb = my_disp_flush;disp_drv.draw_buf = &draw_buf;lv_disp_drv_register( &disp_drv );/*Initialize the (dummy) input device driver*/static lv_indev_drv_t indev_drv;lv_indev_drv_init( &indev_drv );indev_drv.type = LV_INDEV_TYPE_POINTER;indev_drv.read_cb = my_touchpad_read;lv_indev_drv_register( &indev_drv );#if 0/* Create simple label */lv_obj_t *label = lv_label_create( lv_scr_act() );lv_label_set_text( label, "Hello Arduino! (V8.0.X)" );lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );
#elselv_button_click_event_test();
// lv_slider_test();/* Try an example from the lv_examples Arduino librarymake sure to include it as written above.lv_example_btn_1();*/// uncomment one of these demos// lv_demo_widgets(); // OK// lv_demo_benchmark(); // OK// lv_demo_keypad_encoder(); // works, but I haven't an encoder// lv_demo_music(); // NOK// lv_demo_printer();// lv_demo_stress(); // seems to be OK
#endifSerial.println( "Setup done" );
}void loop()
{lv_timer_handler(); /* let the GUI do its work */lv_tick_inc(5);delay(5);
}
其中主要是这一句
lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0); // 添加按钮对象的圆角弧度样
效果
LVGL学习记录:按键相关推荐
- 【按键精灵学习记录】以DOTA2人机为例
[按键精灵学习记录]以DOTA2人机为例 一.写在前面 二.准备工作 1.环境准备 2.需求分析 3.流程图 三.代码实现 1.命令分析 2.代码实现 状态判断 主循环 英雄选择 游戏中 3.实测 四 ...
- 架构与设计 之一 C 嵌入式设计模式(Design Patterns for Embedded Systems in C)的学习记录
唉 时至今日,已经不知道在嵌入式的道路上到底挣扎了多少个岁月,总感觉要"病入膏肓"了.此间总是不时出现一些疑惑:人家搞 Java.搞 C# 的动不动就是什么架构 / 框架的,搞 ...
- 树莓派学习记录1-树莓派系统烧录与无屏幕网线连接开机
树莓派学习记录1-树莓派系统烧录与无屏幕网线连接开机 1.所需硬件 树莓派3b+板子一个,电源线一根,网线一根, SD卡及读卡器 2.官方烧录工具下载 树莓派官方提供了树莓派的烧录工具,可以直接借助其 ...
- JavaScript-WebAPIs学习记录
JavaScript-WebAPIs学习记录 浏览器交互效果 console.dir(); // 更好地查看里面的属性和方法 javascript:void(0); 或者 javascript:; 可 ...
- Cadence Allegro 17.4学习记录开始06-PCB Editor 17.4快捷键的说明和中英文的切换和操作界面放大缩小设置
目录 Cadence Allegro 17.4学习记录开始06-PCB Editor 17.4快捷键的说明和中英文的切换和操作界面放大缩小设置 PCB Editor 17.4快捷键的说明 第一:env ...
- Opencv 入门篇学习记录(图片)
title: Opencv 入门篇学习记录(图片) Opencv 入门篇学习记录(图片) 前言 很早以前就接触Python了,大学的时候还自学了一段时间去做了课设,写了一些最速梯度下降法.黄金分割法. ...
- 【学习记录】QT5界面设计的踩坑记录
学习记录:QT5 界面设计的踩坑记录 前言 一.Qlabel显示视频与图片 1. 图片显示 1.1 显示格式 1.2 label随界面缩放 1.3 界面刷新 2. 视频显示 二.常见控件的StyleS ...
- linux个人学习记录
linux学习记录 资料: Linux 黑马程序员_bilibili AcWing Linux基础课 可能是东半球最全面易懂的 Tmux 使用教程! Shell 教程 | 菜鸟教程 (runoob.c ...
- Android 学习记录(持续更新)
Android 学习记录(持续更新) 1.AndroidManifest.xml 详解: http://www.jb51.net/article/73731.htm (AndroidManifest. ...
最新文章
- Go 学习笔记(9)— 循环(for、for range访问数组、切片、字符串和通道、goto、continue、break)
- C++ 定时器的用法:SetTimer和Ontimer
- 六元均匀直线阵的各元间距为_实验二 均匀直线阵
- matlab 误差椭圆,求3倍标准差误差椭圆分析的程序
- mariadb修改默认字符集
- 【MySQL】MySQL中的死锁
- 编码表概述和常见编码表
- 为什么acdsee服务器怎在运行,ACDSee 启动时报错的解决方法
- 甘超波:NLP理解层次
- 每日学英语之041104
- 【Linux】计算机的软硬件体系结构
- Graph Coverage
- 【转】伽马校正(Gamma Correction)
- 慕课网 前端JS面试技巧 笔记
- uip+freemodbus网络通信
- 用Java写贪吃蛇小游戏
- 计算机毕业设计SSM房地产销售系统【附源码数据库】
- 通过PHP 获取身份证相关信息 获取生肖,获取星座,获取年龄,获取性别
- 使用AutoCAD画PCB封装和板框
- GPIO口模拟串口发送接收(基于H861)