单片机LGVL实验2
·
单片机 :STM32F407
开发板:DMF407电机开发板
平台:keil V5.31
HSE 为8MHZ
HSI为16MHZ
一、二维码
主函数
void lv_mainstart(void)
{
/* 创建一个标签 */
lv_obj_t *label_time = lv_label_create(lv_scr_act());
/* 设置标签的文本 */
lv_label_set_text(label_time,"ALIENTEK_QR");
/* 设置标签的文本字体颜色 */
lv_obj_set_style_text_color(label_time,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
/* 设置标签的文本字体 */
lv_obj_set_style_text_font(label_time,&lv_font_montserrat_32,LV_STATE_DEFAULT);
/* 设置标签的顶部中间对齐 */
lv_obj_align(label_time,LV_ALIGN_TOP_MID,0,0);
/* 创建一个lcddev.width/2的二维码 */
lv_obj_t * qr = lv_qrcode_create(lv_scr_act(), lv_obj_get_width(lv_scr_act())/2, lv_color_hex3(0x33f), lv_color_hex3(0xeef));
/* 设置数据 */
lv_qrcode_update(qr, data, strlen(data));
/* 二维码中间对齐 */
lv_obj_align(qr,LV_ALIGN_CENTER,0,0);
}
测试结果:

二、计算器
主函数
void calc_fmt_show(int x2,const char * buf,uint8_t fmt)
{
x2 = atof((const char *)buf); /* 转换为数字 */
char *fmtstr="";
char outbuf[17];
char fmt_chx_buf[100];
memset(fmt_chx_buf, 0, sizeof(fmt_chx_buf));
fmtstr="HEX";
sprintf((char*)outbuf,"%X",x2); /* 输出结果到outbuf里面 */
lv_textarea_set_text(phone_ta,(const char *)outbuf);
strcat((char *)fmt_chx_buf, fmtstr);
lv_label_set_text(label_dec,fmt_chx_buf);
}
/**
* @brief 获取计算加减乘除标志
* @param ctype:计算的类型
* @retval 返回计算类型
*/
uint8_t lv_math_calc_label(uint8_t ctype)
{
char *chx;
memset(lv_chx_buf, 0, sizeof(lv_chx_buf));
switch(ctype)
{
case 0:/* 加法计算 */
chx = "+";
break;
case 1:/* 减法计算 */
chx = "-";
break;
case 2:/* 乘法计算 */
chx = "*";
break;
case 3:/* 除法计算 */
chx = "/";
break;
case 4:/* x^y次方计算 */
chx = "x ^ y";
break;
}
strcat((char *)lv_chx_buf, chx);
strcat((char *)lv_chx_buf, " DEG");
lv_label_set_text(label_dec,lv_chx_buf);
return ctype;
}
/**
* @brief 等于=按键计算
* @param x1:获取第一个数值
* @param x2:获取第二个数值
* @param ctype:计算的类型
* @retval 返回计算数值
*/
double lv_math_calc(double x1,double x2,uint8_t ctype)
{
switch(ctype)
{
case 0:/* 加法 */
x1=x1+x2;
break;
case 1:/* 减法 */
x1=x1-x2;
break;
case 2:/* 乘法 */
x1=x1*(x2);
break;
case 3:/* 除法 */
x1=x1/(x2);
break;
case 4:/* x^y次方 */
x1=pow(x1,x2);
break;
case 5:/* 没有任何运算符 */
x1=x2;
break;
}
return x1;
}
/**
* @brief 计算特殊的类型
* @param x1:获取第一个数值
* @param x2:无
* @param buf:获取的字符串
* @param ctype:计算的类型
* @retval 无
*/
void lv_calc_exe(double *x1,double *x2,const char * buf,uint8_t ctype)
{
*x1 = atof((const char *)buf); /* 转换为数字 */
char *chx;
memset(lv_chx_buf, 0, sizeof(lv_chx_buf));
switch(ctype)
{
case 0:/* sin计算 */
*x1 = sin((*x1*CALC_PI)/180);/* 转换为角度计算结果 */
chx = "sin";
break;
case 1:/* cos计算 */
*x1 = cos((*x1*CALC_PI)/180);/* 转换为角度计算结果 */
chx = "cos";
break;
case 2:/* tan计算 */
*x1 = tan((*x1*CALC_PI)/180);/* 转换为角度计算结果 */
chx = "tan";
break;
case 3:/* log计算 */
*x1 = log10(*x1);
chx = "log";
break;
case 4:/* ln计算 */
*x1 = log(*x1);
chx = "ln";
break;
case 5:/* x^2计算 */
*x1 = *x1*(*x1);
chx = "x^2";
break;
case 6:/* 开方计算 */
*x1=sqrt(*x1);
chx = "^";
break;
case 7:/* 倒数计算 */
*x1=1/(*x1);
chx = "1/x";
break;
}
strcat((char *)lv_chx_buf, chx);
strcat((char *)lv_chx_buf, " DEG");
lv_label_set_text(label_dec,lv_chx_buf);
}
/**
* @brief 回调函数
* @param obj :对象
* @param event:事件
* @retval 无
*/
static void lv_event_handler(lv_event_t *event)
{
char str[25];
char chx_buf[100];
memset(chx_buf, 0, sizeof(chx_buf));
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if (code == LV_EVENT_DRAW_PART_BEGIN)
{
lv_obj_draw_part_dsc_t* dsc = lv_event_get_param(event);
if (dsc->id == 0)
{
dsc->rect_dsc->radius = 0;
dsc->rect_dsc->border_width = 2;
dsc->rect_dsc->bg_color = lv_color_make(1, 27, 54);
dsc->rect_dsc->border_color = lv_color_white();
}
else
{
dsc->rect_dsc->border_width = 2;
dsc->rect_dsc->radius = 0;
dsc->rect_dsc->bg_color = lv_color_make(1, 27, 54);
dsc->rect_dsc->border_color = lv_color_white();
dsc->label_dsc->color = lv_color_white();
}
}
if(code == LV_EVENT_VALUE_CHANGED)
{
uint32_t id = lv_btnmatrix_get_selected_btn(obj);
const char * txt = lv_btnmatrix_get_btn_text (obj,id);
uint32_t cur = lv_textarea_get_cursor_pos(phone_ta);
if (atof(lv_textarea_get_text(phone_ta)) == 0&&lv_calc_pos == 0&&lv_cbp_and_negative ==0&&lv_calc_math == 0)
{
lv_textarea_set_text(phone_ta, "");
}
if (txt == kb_map_num[0]) /* sin */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),0);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[1])/* cos */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),1);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[2]) /* tan */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),2);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[3]) /* log */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),3);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[4]) /* ln */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),4);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[6]) /* x^2 */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),5);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[8]) /* sqrt */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),6);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[9])/* 1/x */
{
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_calc_exe(&calc_x1,0,lv_textarea_get_text(phone_ta),7);
sprintf(str,"%g",calc_x1);
lv_textarea_set_text(phone_ta,(const char *)str);
}
else if (txt == kb_map_num[16]) /* AC */
{
lv_textarea_set_text(phone_ta, "0");
lv_label_set_text(label_dec,"DEG");
lv_calc_pos = 0;
lv_cbp_and_negativee = 0;
lv_cbp_and_negative = 0;
}
else if(txt == kb_map_num[15]) /* 删除一个字符 */
{
if (calc_ec == 0)
{
lv_textarea_del_char(phone_ta);
if (atof(lv_textarea_get_text(phone_ta)) == 0)
{
lv_textarea_set_text(phone_ta, "0");
}
}
else
{
lv_textarea_set_text(phone_ta, "0");
lv_calc_math = 0;
lv_calc_pos = 0;
lv_cbp_and_negativee = 0;
lv_cbp_and_negative = 0;
}
}
else if (txt == kb_map_num[12]||txt == kb_map_num[13]||txt == kb_map_num[14]
||txt == kb_map_num[18]||txt == kb_map_num[19]||txt == kb_map_num[20]
||txt == kb_map_num[24]||txt == kb_map_num[25]||txt == kb_map_num[26]
||txt == kb_map_num[30]||txt == kb_map_num[32])
{
if (calc_ec == 1)
{
lv_textarea_set_text(phone_ta, "");
lv_label_set_text(label_dec,"DEG");
calc_ec = 0;
lv_calc_num = 0;
lv_calc_pos = 0;
lv_cbp_and_negativee = 0;
lv_cbp_and_negative = 0;
}
if (lv_math_x1!=0&&atof(lv_textarea_get_text(phone_ta)) == 0&&!strstr(lv_textarea_get_text(phone_ta), ".")&&!strstr(lv_textarea_get_text(phone_ta), "-"))
{
lv_textarea_set_text(phone_ta, "");
}
if (lv_cbp_and_negative == 1&&strstr(lv_textarea_get_text(phone_ta), "-")&&lv_cbp_and_negativee == 0)
{
lv_textarea_del_char(phone_ta);
lv_cbp_and_negative = 0;
lv_cbp_and_negativee = 1;
}
lv_textarea_set_cursor_pos(phone_ta, (int32_t)cur);
if (atof(lv_textarea_get_text(phone_ta)) == 0&&txt == kb_map_num[32]&&lv_calc_pos != 1)
{
lv_calc_pos = 1;
strcat((char *)chx_buf, "0.");
lv_textarea_add_text(phone_ta,chx_buf);
}
else
{
if (txt == kb_map_num[32]&&strstr(lv_textarea_get_text(phone_ta), "."))
{
}
else
{
lv_textarea_add_text(phone_ta,txt);
}
}
}
else if (txt == kb_map_num[10]) /* FMT */
{
lv_calc_num ++;
if (lv_calc_num == 1)
{
calc_ec = 1;
calc_fmt_show(lv_calc_x1,lv_textarea_get_text(phone_ta),lv_calc_num);
}
if (lv_calc_num > 1)
{
lv_cbp_and_negative = 0;
lv_cbp_and_negativee = 0;
lv_calc_num = 0;
lv_calc_pos = 0;
lv_label_set_text(label_dec,"DEG");
lv_textarea_set_text(phone_ta, "0");
}
}
else if (txt == kb_map_num[31]) /* +/- */
{
cbp_and_negative = atof((const char *)lv_textarea_get_text(phone_ta)); /* 转换为数字 */
cbp_and_negative = - cbp_and_negative;
memset(str, 0, sizeof(str));
sprintf(str,"%g",cbp_and_negative);
lv_textarea_set_text(phone_ta,(const char *)str);
lv_cbp_and_negative = 1;
}
else if (txt == kb_map_num[21]) /* + */
{
lv_calc_math = 1;
if (lv_math_x1 == 0)
{
lv_math_x1 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_textarea_set_text(phone_ta, "0");
}
else
{
lv_calc_math = 0;
}
lv_math_flag = lv_math_calc_label(0);
}
else if (txt == kb_map_num[22]) /* - */
{
lv_calc_math = 1;
if (lv_math_x1 == 0)
{
lv_math_x1 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_textarea_set_text(phone_ta, "0");
}
else
{
lv_calc_math = 0;
}
lv_math_flag = lv_math_calc_label(1);
}
else if (txt == kb_map_num[27]) /* X */
{
lv_calc_math = 1;
if (lv_math_x1 == 0)
{
lv_math_x1 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_textarea_set_text(phone_ta, "0");
}
else
{
lv_calc_math = 0;
}
lv_math_flag = lv_math_calc_label(2);
}
else if (txt == kb_map_num[28]) /* / */
{
lv_calc_math = 1;
if (lv_math_x1 == 0)
{
lv_math_x1 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_textarea_set_text(phone_ta, "0");
}
else
{
lv_calc_math = 0;
}
lv_math_flag = lv_math_calc_label(3);
}
else if (txt == kb_map_num[7]) /* x^y */
{
lv_calc_math = 1;
if (lv_math_x1 == 0)
{
lv_math_x1 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_textarea_set_text(phone_ta, "0");
}
else
{
lv_calc_math = 0;
}
lv_math_flag = lv_math_calc_label(4);
}
else if (txt == kb_map_num[33]) /* = */
{
lv_math_x2 = atof((const char *)lv_textarea_get_text(phone_ta));
lv_math_result = lv_math_calc(lv_math_x1,lv_math_x2,lv_math_flag);
lv_label_set_text(label_dec,"DEG");
memset(str, 0, sizeof(str));
calc_ec = 1;
lv_math_x1 = 0;
sprintf(str,"%g",lv_math_result);
lv_textarea_set_text(phone_ta,(const char *)str);
}
}
}
/**
* @brief 测试
* @param 无
* @retval 无
*/
void lv_mainstart(void)
{
lv_calculator_cont = lv_obj_create(lv_scr_act());
lv_obj_set_size(lv_calculator_cont,lv_obj_get_width(lv_scr_act()),lv_obj_get_height(lv_scr_act()));
lv_obj_set_style_radius(lv_calculator_cont, 0, LV_PART_MAIN);
lv_obj_clear_flag(lv_calculator_cont, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_bg_color(lv_calculator_cont, lv_color_make(1, 27, 54), LV_STATE_DEFAULT);
lv_obj_t *label_title = lv_label_create(lv_calculator_cont);
lv_label_set_text(label_title,"scientific calculator");
lv_obj_set_style_text_color(label_title, lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
lv_obj_set_style_text_font(label_title,&lv_font_montserrat_14,0);
lv_obj_align(label_title,LV_ALIGN_TOP_MID,0,10);
lv_obj_t * btnm1 = lv_btnmatrix_create(lv_calculator_cont);
lv_btnmatrix_set_map(btnm1, kb_map_num);
lv_btnmatrix_set_btn_width(btnm1, 0, 5); /* 设置第一行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 1, 5);
lv_btnmatrix_set_btn_width(btnm1, 2, 5);
lv_btnmatrix_set_btn_width(btnm1, 3, 5);
lv_btnmatrix_set_btn_width(btnm1, 4, 5);
lv_btnmatrix_set_btn_width(btnm1, 5, 5);
lv_btnmatrix_set_btn_width(btnm1, 6, 5); /* 设置第二行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 7, 5);
lv_btnmatrix_set_btn_width(btnm1, 8, 5);
lv_btnmatrix_set_btn_width(btnm1, 9, 5);
lv_btnmatrix_set_btn_width(btnm1, 10, 1);
lv_btnmatrix_set_btn_width(btnm1, 11, 1); /* 设置第三行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 12, 1);
lv_btnmatrix_set_btn_width(btnm1, 13, 7);
lv_btnmatrix_set_btn_width(btnm1, 14, 7);
lv_btnmatrix_set_btn_width(btnm1, 15, 1);
lv_btnmatrix_set_btn_width(btnm1, 16, 1);
lv_btnmatrix_set_btn_width(btnm1, 17, 1); /* 设置第四行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 18, 7);
lv_btnmatrix_set_btn_width(btnm1, 19, 7);
lv_btnmatrix_set_btn_width(btnm1, 20, 1);
lv_btnmatrix_set_btn_width(btnm1, 21, 1);
lv_btnmatrix_set_btn_width(btnm1, 22, 1); /* 设置第五行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 23, 7);
lv_btnmatrix_set_btn_width(btnm1, 24, 7);
lv_btnmatrix_set_btn_width(btnm1, 25, 1);
lv_btnmatrix_set_btn_width(btnm1, 26, 5);
lv_btnmatrix_set_btn_width(btnm1, 27, 5); /* 设置第六行按钮宽度 */
lv_btnmatrix_set_btn_width(btnm1, 28, 5);
lv_btnmatrix_set_btn_width(btnm1, 29, 5);
lv_obj_set_size(btnm1,lv_obj_get_width(lv_scr_act()), lv_obj_get_height(lv_scr_act())/2);
lv_obj_align(btnm1, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_add_event_cb(btnm1, lv_event_handler, LV_EVENT_ALL, NULL);
// lv_obj_set_style_text_font(btnm1,&myFont18,0);
/* 创建输入框 */
phone_ta = lv_textarea_create(lv_calculator_cont);
lv_textarea_set_text(phone_ta, "0");
lv_textarea_set_one_line(phone_ta, true); /* 将文本区域配置为一行或恢复正常 */
lv_textarea_set_cursor_click_pos(phone_ta,false); /* 隐藏光标 */
lv_obj_set_size(phone_ta, lv_obj_get_width(lv_scr_act()) - 20,lv_font_montserrat_14.line_height * 4 + 20);
lv_obj_clear_flag(phone_ta, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_align_to(phone_ta, btnm1, LV_ALIGN_OUT_TOP_MID, 0, -50);
lv_obj_set_style_text_font(phone_ta,&lv_font_montserrat_14,0);
label_dec = lv_label_create(lv_calculator_cont);
lv_label_set_text(label_dec,"DEG");
lv_obj_set_style_text_font(label_dec,&lv_font_montserrat_14,0);
lv_obj_align_to(label_dec,phone_ta,LV_ALIGN_BOTTOM_RIGHT,-50,-10);
}
测试结果

三、二维码生成器
主函数
void lv_keyboard_cb(lv_event_t *event)
{
lv_obj_t* obj = lv_event_get_target(event);
lv_event_code_t code = lv_event_get_code(event);
if(code == LV_EVENT_CLICKED)
{
if (lv_keyboard_get_selected_btn ((lv_obj_t *)event->user_data) == 39)
{
lv_obj_del((lv_obj_t *)event->user_data); /* 删除键盘 */
}
}
}
/**
* @brief 例
* @param 无
* @return 无
*/
static void lv_example_keyboard(void)
{
lv_obj_t* keyboard = lv_keyboard_create(lv_scr_act()); /* 定义并创建键盘 */
lv_keyboard_set_textarea(keyboard, ta);
lv_obj_add_event_cb(keyboard, lv_keyboard_cb, LV_EVENT_ALL, keyboard); /* 设置文本框事件回调 */
}
/**
* @brief 文本区域回调
* @param event:事件
* @return 无
*/
void lv_ta_action_click(lv_event_t *event)
{
lv_obj_t* obj = lv_event_get_target(event);
lv_event_code_t code = lv_event_get_code(event);
if(code == LV_EVENT_CLICKED) /* 文本区域点击 */
{
lv_example_keyboard();
}
}
/**
* @brief LVGL演示
* @param 无
* @return 无
*/
void lv_mainstart(void)
{
lv_qr_windowm();
}
/**
* @brief 退出回调函数
* @param event:事件
* @return 无
*/
static void lv_qr_event_handler(lv_event_t * event)
{
lv_obj_t* obj = lv_event_get_target(event);
lv_event_code_t code = lv_event_get_code(event);
if(code == LV_EVENT_CLICKED) /*点击 */
{
lv_obj_del(lv_qr_win);
lv_mainstart();
}
}
/**
* @brief 二维码生成回调函数
* @param event:事件
* @return 无
*/
static void lv_btn_create_cb(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if (code == LV_EVENT_CLICKED)
{
lv_label_set_text(lv_qr_label,"Generated QR code successfully!");
data = lv_textarea_get_text(ta);
/* 创建一个lcddev.width/2的二维码 */
lv_obj_t * qr = lv_qrcode_create(lv_qr_btn_win, lv_obj_get_width(lv_qr_btn_win) - 10, lv_color_hex3(0x33f), lv_color_hex3(0xeef));
/* 设置数据 */
lv_qrcode_update(qr, data, strlen(data));
/* 二维码中间对齐 */
lv_obj_center(qr);
lv_obj_invalidate(qr);
}
}
/**
* @brief 二维码界面
* @param 无
* @return 无
*/
void lv_qr_windowm(void)
{
lv_qr_win = lv_win_create(lv_scr_act(),lv_font_montserrat_14.line_height * 2);
lv_obj_set_size(lv_qr_win,lv_obj_get_width(lv_scr_act()),lv_obj_get_height(lv_scr_act()));
lv_obj_set_style_text_font(lv_qr_win,&lv_font_montserrat_14,LV_STATE_DEFAULT);
lv_win_add_title(lv_qr_win, "QR V1.0");
lv_obj_t * btn = lv_win_add_btn(lv_qr_win, LV_SYMBOL_CLOSE, 50);
lv_obj_add_event_cb(btn, lv_qr_event_handler, LV_EVENT_CLICKED, NULL);
lv_qr_cont = lv_win_get_content(lv_qr_win);
ta = lv_textarea_create(lv_qr_cont); /* 创建文本区域控件 */
lv_obj_set_style_radius(ta, 0, LV_PART_MAIN);
lv_obj_set_style_text_font(ta,&lv_font_montserrat_14,LV_STATE_DEFAULT); /* 设置文本字体 */
lv_obj_set_style_border_color(ta,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_size(ta, lv_obj_get_width(lv_scr_act())/2, lv_obj_get_height(lv_scr_act())/2); /* 文本区域的大小 */
lv_obj_align_to(ta, lv_qr_cont, LV_ALIGN_TOP_LEFT, 0, 30); /* 对齐 */
lv_textarea_set_cursor_click_pos(ta, true); /* 单击文本区域上的文本启用/禁用光标定位 */
lv_obj_add_event_cb(ta, lv_ta_action_click,LV_EVENT_ALL,NULL); /* 设置回调函数 */
lv_textarea_set_text(ta, " "); /* 设置初始状态的文本为空 */
lv_qr_btn_win = lv_obj_create(lv_qr_cont);
lv_obj_set_style_border_color(lv_qr_btn_win,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_radius(lv_qr_btn_win, 0, LV_PART_MAIN);
lv_obj_set_size(lv_qr_btn_win,lv_obj_get_width(ta)/2 + 40,lv_obj_get_width(ta)/2 + 40);
lv_obj_invalidate(lv_qr_btn_win);
lv_obj_align_to(lv_qr_btn_win, ta, LV_ALIGN_OUT_RIGHT_MID, lv_obj_get_width(ta)/4, 0); /* 对齐 */
lv_obj_t *lv_qr_btn = lv_btn_create(lv_qr_cont);
lv_obj_set_style_bg_color(lv_qr_btn,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_align_to(lv_qr_btn, lv_qr_btn_win, LV_ALIGN_OUT_BOTTOM_LEFT, 0, lv_obj_get_height(lv_qr_btn_win)/6); /* 对齐 */
lv_obj_set_size(lv_qr_btn,lv_obj_get_width(lv_qr_btn_win),lv_obj_get_height(lv_qr_btn_win)/3);
lv_obj_add_event_cb(lv_qr_btn,lv_btn_create_cb,LV_EVENT_ALL,NULL);
lv_obj_t *lv_qr_btn_label = lv_label_create(lv_qr_btn);
lv_obj_set_style_text_color(lv_qr_btn_label,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_text_font(lv_qr_btn_label,&lv_font_montserrat_14,LV_STATE_DEFAULT); /* 设置文本字体 */
lv_obj_clear_flag(lv_qr_btn_win,LV_OBJ_FLAG_SCROLLABLE);
lv_label_set_text(lv_qr_btn_label,"Create Qr");
lv_obj_center(lv_qr_btn_label);
lv_qr_label = lv_label_create(lv_qr_cont);
lv_obj_set_style_text_color(lv_qr_label,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_label_set_text(lv_qr_label,"");
lv_obj_align_to(lv_qr_label, ta, LV_ALIGN_OUT_BOTTOM_LEFT, 0, lv_obj_get_height(ta)/6); /* 对齐 */
lv_qr_c_label = lv_label_create(lv_qr_cont);
lv_obj_set_style_text_color(lv_qr_c_label,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_label_set_text(lv_qr_c_label,"Alientek:http://www.openedv.com/");
lv_obj_align_to(lv_qr_c_label, lv_qr_label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, lv_obj_get_height(ta)/6); /* 对齐 */
}
测试结果

四、绘画系统
主函数
static void lv_rst_event(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if(code == LV_EVENT_CLICKED)
{
lv_obj_set_style_bg_color(lv_touch_cont, lv_color_make(255,255,255),LV_STATE_DEFAULT);
}
}
/**
* @brief 画粗线
* @param x1,y1: 起点坐标
* @param x2,y2: 终点坐标
* @param size : 线条粗细程度
* @param color: 线的颜色
* @retval 无
*/
void lcd_draw_bline(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t size, uint16_t color)
{
uint16_t t;
int xerr = 0, yerr = 0, delta_x, delta_y, distance;
int incx, incy, row, col;
if (x1 < size || x2 < size || y1 < size || y2 < size)return;
delta_x = x2 - x1; /* 计算坐标增量 */
delta_y = y2 - y1;
row = x1;
col = y1;
if (delta_x > 0)incx = 1; /* 设置单步方向 */
else if (delta_x == 0)incx = 0; /* 垂直线 */
else
{
incx = -1;
delta_x = -delta_x;
}
if (delta_y > 0)
{
incy = 1;
}
else if (delta_y == 0)
{
incy = 0; /* 水平线 */
}
else
{
incy = -1;
delta_y = -delta_y;
}
if ( delta_x > delta_y)distance = delta_x; /* 选取基本增量坐标轴 */
else distance = delta_y;
for (t = 0; t <= distance + 1; t++ ) /* 画线输出 */
{
lcd_fill_circle(row, col, size, color); /* 画点 */
xerr += delta_x ;
yerr += delta_y ;
if (xerr > distance)
{
xerr -= distance;
row += incx;
}
if (yerr > distance)
{
yerr -= distance;
col += incy;
}
}
}
static lv_point_t line_points1[] = { {0, 0}, {0, 70}, {0, 120}, {0, 180}, {0, 240}, {0, 480} };
lv_obj_t *lv_pen_size_2;
lv_obj_t *lv_pen_size_5;
lv_obj_t *lv_pen_size_10;
lv_obj_t *lv_pen_size_15;
lv_obj_t *lv_pen_color_red;
lv_obj_t *lv_pen_color_green;
lv_obj_t *lv_pen_color_blue;
lv_obj_t *lv_pen_color_grey;
/**
* @brief 画笔大小回调函数
* @param event: 事件
* @retval 无
*/
static void lv_pen_size_event(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if(code == LV_EVENT_CLICKED)
{
if (obj == lv_pen_size_2)
{
lv_pensise = 2;
lv_obj_set_style_bg_color(lv_pen_size_5,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_10,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_15,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_2,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
}
else if (obj == lv_pen_size_5)
{
lv_pensise = 5;
lv_obj_set_style_bg_color(lv_pen_size_2,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_10,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_15,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_5,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
}
else if (obj == lv_pen_size_10)
{
lv_pensise = 10;
lv_obj_set_style_bg_color(lv_pen_size_5,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_2,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_15,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_10,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
}
else if (obj == lv_pen_size_15)
{
lv_pensise = 15;
lv_obj_set_style_bg_color(lv_pen_size_5,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_10,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_2,lv_color_make(255,255,255),LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_size_15,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
}
}
}
/**
* @brief 颜色设置回调函数
* @param event: 事件
* @retval 无
*/
static void lv_pen_color_event(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if(code == LV_EVENT_CLICKED)
{
if (obj == lv_pen_color_red)
{
lv_obj_set_style_border_color(lv_pen_color_green,lv_palette_main(LV_PALETTE_GREEN),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_green,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_blue,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_blue,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_grey,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_grey,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_red,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_red,2,LV_STATE_DEFAULT);
lv_pencolor = 0;
}
else if (obj == lv_pen_color_green)
{
lv_obj_set_style_border_color(lv_pen_color_red,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_red,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_blue,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_blue,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_grey,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_grey,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_green,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_green,2,LV_STATE_DEFAULT);
lv_pencolor = 1;
}
else if (obj == lv_pen_color_blue)
{
lv_obj_set_style_border_color(lv_pen_color_green,lv_palette_main(LV_PALETTE_GREEN),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_green,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_red,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_red,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_grey,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_grey,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_blue,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_blue,2,LV_STATE_DEFAULT);
lv_pencolor = 2;
}
else if (obj == lv_pen_color_grey)
{
lv_obj_set_style_border_color(lv_pen_color_green,lv_palette_main(LV_PALETTE_GREEN),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_green,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_blue,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_blue,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_red,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_red,0,LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_grey,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_grey,2,LV_STATE_DEFAULT);
lv_pencolor = 3;
}
lv_obj_set_style_shadow_width(obj,0,LV_STATE_DEFAULT);
}
}
/**
* @brief 返回主界面的按键回调函数
* @param event: 事件
* @retval 无
*/
static void lv_back_event(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if (code == LV_EVENT_RELEASED)
{
lv_obj_del(lv_touch_cont);
lv_timer_del(lv_touchtask);
lv_mainstart();
}
}
/**
* @brief 返回主界面的按键
* @param parent:父类
* @retval 无
*/
void lv_btn_back(lv_obj_t * parent)
{
/* 将样式初始化为默认状态 */
static lv_style_t style;
lv_style_init(&style);
lv_style_set_radius(&style, 3);
lv_style_set_bg_opa(&style, LV_OPA_100);
lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_BLUE));
lv_style_set_bg_grad_color(&style, lv_palette_darken(LV_PALETTE_BLUE, 2));
lv_style_set_bg_grad_dir(&style, LV_GRAD_DIR_VER);
lv_style_set_border_opa(&style, LV_OPA_40);
lv_style_set_border_width(&style, 2);
lv_style_set_border_color(&style, lv_palette_main(LV_PALETTE_GREY));
lv_style_set_shadow_width(&style, 8);
lv_style_set_shadow_color(&style, lv_palette_main(LV_PALETTE_GREY));
lv_style_set_shadow_ofs_y(&style, 8);
lv_style_set_outline_opa(&style, LV_OPA_COVER);
lv_style_set_outline_color(&style, lv_palette_main(LV_PALETTE_BLUE));
lv_style_set_text_color(&style, lv_color_white());
lv_style_set_pad_all(&style, 10);
/* 初始化按下的样式 */
static lv_style_t style_pr;
lv_style_init(&style_pr);
/* 按下时添加一个大的轮廓 */
lv_style_set_outline_width(&style_pr, 30);
lv_style_set_outline_opa(&style_pr, LV_OPA_TRANSP);
lv_style_set_translate_y(&style_pr, 5);
lv_style_set_shadow_ofs_y(&style_pr, 3);
lv_style_set_bg_color(&style_pr, lv_palette_darken(LV_PALETTE_BLUE, 2));
lv_style_set_bg_grad_color(&style_pr, lv_palette_darken(LV_PALETTE_BLUE, 4));
/* 向大纲添加过渡 */
static lv_style_transition_dsc_t trans;
static lv_style_prop_t props[] = {LV_STYLE_OUTLINE_WIDTH, LV_STYLE_OUTLINE_OPA, 0};
lv_style_transition_dsc_init(&trans, props, lv_anim_path_linear, 300, 0, NULL);
lv_style_set_transition(&style_pr, &trans);
lv_obj_t * btn1 = lv_btn_create(parent);
lv_obj_remove_style_all(btn1); /* 移除来自主题的样式 */
lv_obj_add_style(btn1, &style, 0);
lv_obj_add_style(btn1, &style_pr, LV_STATE_PRESSED);
lv_obj_set_size(btn1, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_align(btn1,LV_ALIGN_BOTTOM_RIGHT,15,0);
lv_obj_add_event_cb(btn1,lv_back_event,LV_EVENT_ALL,NULL);
lv_obj_t * label = lv_label_create(btn1);
lv_label_set_text(label, "Back");
lv_obj_center(label);
}
/**
* @brief 清空屏幕并在右上角显示"RST"
* @param parent:父类
* @retval 无
*/
void lv_load_draw_dialog(lv_obj_t *parent)
{
lcd_clear(WHITE); /* 清屏 */
lcd_show_string(lcddev.width - 24, 0, 200, 16, 16, "RST", BLUE); /* 显示清屏区域 */
#define TOP_OFFSET 5
lv_obj_t * RST_btn = lv_label_create(parent);
lv_obj_move_foreground(RST_btn);
lv_label_set_text(RST_btn,"RST");
lv_obj_align_to(RST_btn,NULL,LV_ALIGN_TOP_RIGHT,-5,TOP_OFFSET);
lv_obj_add_flag(RST_btn,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(RST_btn,lv_rst_event,LV_EVENT_CLICKED,NULL);
lv_obj_t * lv_pen_size = lv_label_create(parent);
lv_label_set_text(lv_pen_size,"pen size");
lv_obj_align_to(lv_pen_size,RST_btn,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_pen_size_2 = lv_led_create(parent);
lv_obj_set_style_bg_color(lv_pen_size_2,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
lv_obj_align_to(lv_pen_size_2,lv_pen_size,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *lv_pen_size_2_label = lv_label_create(parent);
lv_label_set_text(lv_pen_size_2_label,"2");
lv_obj_align_to(lv_pen_size_2_label,lv_pen_size_2,LV_ALIGN_LEFT_MID,-15,0);
lv_pen_size_5 = lv_led_create(parent);
lv_obj_align_to(lv_pen_size_5,lv_pen_size_2,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *lv_pen_size_5_label = lv_label_create(parent);
lv_label_set_text(lv_pen_size_5_label,"5");
lv_obj_align_to(lv_pen_size_5_label,lv_pen_size_5,LV_ALIGN_LEFT_MID,-15,0);
lv_pen_size_10 = lv_led_create(parent);
lv_obj_align_to(lv_pen_size_10,lv_pen_size_5,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *lv_pen_size_10_label = lv_label_create(parent);
lv_label_set_text(lv_pen_size_10_label,"10");
lv_obj_align_to(lv_pen_size_10_label,lv_pen_size_10,LV_ALIGN_LEFT_MID,-15,0);
lv_pen_size_15 = lv_led_create(parent);
lv_obj_align_to(lv_pen_size_15,lv_pen_size_10,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *lv_pen_size_15_label = lv_label_create(parent);
lv_label_set_text(lv_pen_size_15_label,"15");
lv_obj_align_to(lv_pen_size_15_label,lv_pen_size_15,LV_ALIGN_LEFT_MID,-15,0);
lv_obj_add_flag(lv_pen_size_2,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_size_5,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_size_10,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_size_15,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(lv_pen_size_2,lv_pen_size_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_size_5,lv_pen_size_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_size_10,lv_pen_size_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_size_15,lv_pen_size_event,LV_EVENT_ALL,NULL);
lv_obj_t * lv_pen_color = lv_label_create(parent);
lv_label_set_text(lv_pen_color,"color");
lv_obj_align_to(lv_pen_color,lv_pen_size,LV_ALIGN_OUT_BOTTOM_MID,0,150);
lv_pen_color_red = lv_led_create(parent);
lv_obj_set_style_shadow_width(lv_pen_color_red,0,LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_color_red,lv_palette_main(LV_PALETTE_RED),LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_red,lv_color_make(0,0,0),LV_STATE_DEFAULT);
lv_obj_set_style_border_width(lv_pen_color_red,2,LV_STATE_DEFAULT);
lv_obj_align_to(lv_pen_color_red,lv_pen_color,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_pen_color_green = lv_led_create(parent);
lv_obj_set_style_shadow_width(lv_pen_color_green,0,LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_color_green,lv_palette_main(LV_PALETTE_GREEN),LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_green,lv_palette_main(LV_PALETTE_GREEN),LV_STATE_DEFAULT);
lv_obj_align_to(lv_pen_color_green,lv_pen_color_red,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_pen_color_blue = lv_led_create(parent);
lv_obj_set_style_shadow_width(lv_pen_color_blue,0,LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_color_blue,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_blue,lv_palette_main(LV_PALETTE_BLUE),LV_STATE_DEFAULT);
lv_obj_align_to(lv_pen_color_blue,lv_pen_color_green,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_pen_color_grey = lv_led_create(parent);
lv_obj_set_style_shadow_width(lv_pen_color_grey,0,LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(lv_pen_color_grey,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_set_style_border_color(lv_pen_color_grey,lv_palette_main(LV_PALETTE_GREY),LV_STATE_DEFAULT);
lv_obj_align_to(lv_pen_color_grey,lv_pen_color_blue,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_add_flag(lv_pen_color_red,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_color_green,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_color_blue,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(lv_pen_color_grey,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(lv_pen_color_red,lv_pen_color_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_color_green,lv_pen_color_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_color_blue,lv_pen_color_event,LV_EVENT_ALL,NULL);
lv_obj_add_event_cb(lv_pen_color_grey,lv_pen_color_event,LV_EVENT_ALL,NULL);
lv_obj_t* line1 = lv_line_create(parent);
lv_line_set_points(line1, line_points1, 6);
lv_obj_align_to(line1,lv_pen_size,LV_ALIGN_OUT_LEFT_TOP,0,-50);
lv_btn_back(parent);/* 创建返回主界面按键 */
}
/**
* @brief 电容触摸屏测试函数
* @param 无
* @retval 无
*/
void ctp_test(void)
{
if (lcddev.id == 0X1018)maxp = 10;
tp_dev.scan(0);
for (t = 0; t < maxp; t++)
{
if ((tp_dev.sta) & (1 << t))
{
if (tp_dev.x[t] < lv_obj_get_width(lv_touch_cont) - lv_obj_get_width(lv_obj_get_child(lv_touch_cont,1)) - 10 && tp_dev.y[t] < lv_obj_get_height(lv_touch_cont)) /* 坐标在屏幕范围内 */
{
if (lastpos[t][0] == 0XFFFF)
{
lastpos[t][0] = tp_dev.x[t];
lastpos[t][1] = tp_dev.y[t];
}
lcd_draw_bline(lastpos[t][0], lastpos[t][1], tp_dev.x[t], tp_dev.y[t], lv_pensise, POINT_COLOR_TBL[lv_pencolor]); /* 画线 */
lastpos[t][0] = tp_dev.x[t];
lastpos[t][1] = tp_dev.y[t];
}
}
else
{
lastpos[t][0] = 0XFFFF;
}
}
}
/**
* @brief 电阻触摸屏测试函数
* @param 无
* @retval 无
*/
void rtp_test(void)
{
tp_dev.scan(0);
if (tp_dev.sta & TP_PRES_DOWN) /* 触摸屏被按下 */
{
if (tp_dev.x[0] < lv_obj_get_width(lv_touch_cont) - lv_obj_get_width(lv_obj_get_child(lv_touch_cont,1)) - 10 && tp_dev.y[0] < lv_obj_get_height(lv_touch_cont))
{
tp_draw_big_point(tp_dev.x[0], tp_dev.y[0], POINT_COLOR_TBL[lv_pencolor]); /* 画点 */
}
}
}
void lv_touch_task(lv_timer_t *task)
{
lv_touchtask = task;
if (tp_dev.touchtype & 0X80)
{
ctp_test(); /* 电容屏测试 */
}
else
{
rtp_test(); /* 电组屏测试 */
}
}
/**
* @brief 电阻触摸屏测试函数
* @param 无
* @retval 无
*/
void lv_mainstart(void)
{
lv_touch_cont = lv_obj_create(lv_scr_act());
lv_obj_set_size(lv_touch_cont,lv_obj_get_width(lv_scr_act()),lv_obj_get_height(lv_scr_act()));
lv_obj_clear_flag(lv_touch_cont,LV_OBJ_FLAG_SCROLLABLE);
lv_load_draw_dialog(lv_touch_cont);
lv_timer_create(lv_touch_task,10,NULL);
}
测试结果

五、进制系统
主函数
static void lv_atk_bit_str_reverse(char str[])
{
int n=strlen(str);
int i;
char temp;
for (i = 0;i < (n/2); i++)
{
temp = str[i];
str[i] = str[n-i-1];
str[n-i-1] = temp;
}
}
/**
* @brief 把二进制字符串转换为十进制
* @param pbin:二进制
* @retval 二进制字符串转换为十进制整数的结果
*/
static long lv_atk_bit_bin_to_dec(const char *pbin)
{
int ii=0;
long result=0;
while (pbin[ii] != 0)
{
result = result * 2 + (pbin[ii] - '0');
ii++;
}
return result;
}
/**
* @brief 查找按下的BIT位
* @param parent:父类
* @retval 返回位数
*/
int lv_atk_bit_to_dec(lv_obj_t *parent)
{
int j = 0;
for (int i = 0 ; i < LV_ATK_BIT_COUNT; i++)
{
if (parent == lv_bit_text[i])
{
return j;
}
j ++;
}
return j;
}
/**
* @brief 将十进制转换为八进制
* @param n:十进制
* @retval 返回八进制
*/
long lv_atk_dec_to_oct(long dec)
{
int oct = 0, i = 0;
i = 1;
while (dec != 0)
{
oct += (dec % 8) * i;
dec /= 8;
i *= 10;
}
return oct;
}
/**
* @brief 十进制转二进制
* @param n:十进制
* @retval 返回二进制
*/
long lv_atk_bec_to_bin(long n)
{
long result=0,k=1,i,temp;
temp = n;
while(temp)
{
i = temp%2;
result = k * i + result;
k = k*10;
temp = temp/2;
}
printf("%ld\n", result);
return result;
}
/**
* @brief 十六进制转十进制
* @param n:十六进制
* @retval 返回十进制
*/
long lv_atk_hex_to_dex(char*s)
{
int i,t;
long sum=0;
for(i=0;s[i];i++)
{
if(s[i]>= '0' &&s[i]<='9')/* 当字符是'0'--'9'时,*-‘0'就行了 */
{
t=s[i]-'0';
}
if(s[i]>='a'&&s[i]<='z')
{
t=s[i]-'a'+10;/* 当字符是 abcdef 时,*-‘a’+10 就行了 */
}
if(s[i]>='A'&&s[i]<='Z')
{
t=s[i]-'A'+10;/* 当字符是 ABCDEF 时,*-‘A’+10 就行了 */
}
sum=sum*16+t;
}
return sum;
}
/**
* @brief 八进制转十进制
* @param n:八进制的数值
* @retval 返回十进制
*/
long lv_atk_oct_to_dex(long n)
{
int i=0,tmp,sum=0;
while(n)
{
tmp=n%10;
n=n/10;
sum+=tmp*pow(8,i);
i++;
}
printf("%d",sum);
return sum;
}
/*
* 函数名: static void event_handler_regbit_map(lv_obj_t * obj, lv_event_t event)
* 输入参数: 触发事件的对象
* 输入参数: 触发的事件类型
* 返回值: 无
* 函数作用: 位按键响应事件,定位到当前选中的位按钮
*/
static void lv_event_bit_map_handler(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if(code == LV_EVENT_CLICKED)
{
static char lv_buf[32];
int lv_bit_post = 0;
char lv_str_buf[32];
char lv_oct_buf[32];
char lv_bit_flag_buf[LV_ATK_BIT_COUNT - 1] = "00000000000000000000000000000000";
if (lv_btnmatrix != NULL)
{
lv_obj_del(lv_btnmatrix); /* 删除键盘 */
lv_textarea_set_cursor_click_pos(lv_middle, true); /* 其他文本区域有效隐藏 */
lv_middle = NULL;
lv_btnmatrix = NULL;
}
lv_textarea_set_text(lv_bin, "");
lv_textarea_set_text(lv_dec, "");
lv_textarea_set_text(lv_hex, "");
lv_textarea_set_text(lv_oct, "");
lv_textarea_set_placeholder_text(lv_bin, "");
lv_textarea_set_placeholder_text(lv_dec, "");
lv_textarea_set_placeholder_text(lv_hex, "");
lv_textarea_set_placeholder_text(lv_oct, "");
lv_obj_t * lv_obj_child = lv_obj_get_child(obj, NULL);
lv_bit_post = lv_atk_bit_to_dec(obj);
lv_snprintf(lv_buf, sizeof(lv_buf), "%s",lv_label_get_text(lv_obj_child));
if (strcmp(lv_buf, "1") == 0)
{
lv_label_set_text(lv_obj_child, "0");
lv_bit_flag[lv_bit_post] = '0';
}
else if (strcmp(lv_buf, "0") == 0)
{
lv_label_set_text(lv_obj_child, "1");
lv_bit_flag[lv_bit_post] = '1';
}
strcpy(lv_bit_flag_buf, lv_bit_flag);
lv_atk_bit_str_reverse(lv_bit_flag_buf);
lv_textarea_set_placeholder_text(lv_bin, lv_bit_flag_buf);
const char * lv_show_lv_atk_str_buffer = lv_textarea_get_placeholder_text(lv_bin); /* 获取输入内容 */
lv_snprintf(lv_str_buf, sizeof(lv_str_buf), "%d", lv_atk_bit_bin_to_dec(lv_show_lv_atk_str_buffer)); /* 二进制转十进制 */
lv_textarea_set_placeholder_text(lv_dec, lv_str_buf);
lv_snprintf(lv_oct_buf, sizeof(lv_oct_buf), "%d", lv_atk_dec_to_oct(atof((const char *)lv_str_buf)));
lv_textarea_set_placeholder_text(lv_oct, lv_oct_buf); /* 十进制转八进制 */
lv_snprintf(lv_str_buf, sizeof(lv_str_buf),"0x%X", lv_atk_bit_bin_to_dec(lv_show_lv_atk_str_buffer)); /* 二进制转十六进制 */
lv_textarea_set_placeholder_text(lv_hex, lv_str_buf);
}
}
/**
* @brief btnmatrix控件回调函数
* @param obj: 对象
* @param event: 事件
* @return 无
*/
static void lv_btnmatrix_event_handler(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
if(code == LV_EVENT_VALUE_CHANGED)
{
const char * txt = lv_btnmatrix_get_btn_text(lv_btnmatrix,lv_btnmatrix_get_selected_btn(obj));
if (txt == btnm1_map[22]||txt == btnm1_map[21])
{
lv_obj_del(lv_btnmatrix); /* 删除键盘 */
lv_btnmatrix = NULL;
lv_middle = NULL;
}
for (int i = 0 ;i < 20 ;i ++)
{
if (txt == btnm1_map[i])
{
lv_textarea_add_text(lv_middle,(const char *)txt);
break;
}
}
}
}
/**
* @brief 创建进制界面
* @param ta:文本区域
* @param e:事件
* @retval 无
*/
static void lv_ta_cb_event_handler(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * ta = lv_event_get_target(event);
if((code == LV_EVENT_CLICKED) && (lv_btnmatrix == NULL))
{
lv_middle = NULL;
lv_textarea_set_cursor_click_pos(ta, false); /* 失能游标隐藏 */
lv_btnmatrix = lv_btnmatrix_create(lv_scr_act()); /* 创建矩阵按键 */
lv_btnmatrix_set_map(lv_btnmatrix, btnm1_map); /* 设置矩阵按键数组 */
lv_btnmatrix_set_btn_width(lv_btnmatrix, 12, 1); /* 设置按键的比例 */
lv_obj_set_size(lv_btnmatrix,lcddev.width,lcddev.height/2); /* 设置矩阵按键的大小 */
lv_obj_align_to(lv_btnmatrix, NULL, LV_ALIGN_BOTTOM_MID, 0, 0);/* 设置对齐模式 */
lv_obj_add_event_cb(lv_btnmatrix, lv_btnmatrix_event_handler,LV_EVENT_ALL,NULL); /* 设置矩阵按键的回调函数 */
/* 清除文本区域开始 */
lv_textarea_set_text(lv_bin, "");
lv_textarea_set_text(lv_dec, "");
lv_textarea_set_text(lv_hex, "");
lv_textarea_set_text(lv_oct, "");
lv_textarea_set_placeholder_text(lv_bin, "");
lv_textarea_set_placeholder_text(lv_dec, "");
lv_textarea_set_placeholder_text(lv_hex, "");
lv_textarea_set_placeholder_text(lv_oct, "");
/* 清除文本区域结束 */
if (ta == lv_bin) /* 按下是二进制的文本区域实现代码 */
{
for (int i = 0 ; i < 18 ; i++)
{
if (i == 0 || i == 9 || i == 16 || i == 17) /* 矩阵按键的索引号0,9,16,17不做处理 */
{
continue;
}
else /* 其他索引做处理 */
{
lv_btnmatrix_set_btn_ctrl(lv_btnmatrix, i, LV_BTNMATRIX_CTRL_DISABLED); /* 失能这些索引 */
}
}
lv_middle = lv_bin; /* 中间对象等于二进制文本区域对象 */
lv_textarea_set_cursor_click_pos(lv_dec, true); /* 其他文本区域有效隐藏 */
lv_textarea_set_cursor_click_pos(lv_hex, true);
lv_textarea_set_cursor_click_pos(lv_oct, true);
}
else if (ta == lv_dec)
{
for (int i = 0 ; i < 18 ; i++)
{
if (i == 10 || i == 11 || i == 12 || i == 13 || i == 14 || i == 15)
{
lv_btnmatrix_set_btn_ctrl(lv_btnmatrix, i, LV_BTNMATRIX_CTRL_DISABLED);
}
}
lv_middle = lv_dec;
lv_textarea_set_cursor_click_pos(lv_bin, true); /* 其他文本区域有效隐藏 */
lv_textarea_set_cursor_click_pos(lv_hex, true);
lv_textarea_set_cursor_click_pos(lv_oct, true);
}
else if (ta == lv_hex)
{
for (int i = 0 ; i < 19 ; i++)
{
lv_btnmatrix_set_btn_ctrl(lv_btnmatrix, i, LV_BTNMATRIX_CTRL_CHECKABLE);
}
lv_middle = lv_hex;
lv_textarea_set_cursor_click_pos(lv_bin, true); /* 其他文本区域有效隐藏 */
lv_textarea_set_cursor_click_pos(lv_dec, true);
lv_textarea_set_cursor_click_pos(lv_oct, true);
}
else if (ta == lv_oct)
{
for (int i = 0 ; i < 18 ; i++)
{
if (i > 6 && i < 16)
{
lv_btnmatrix_set_btn_ctrl(lv_btnmatrix, i, LV_BTNMATRIX_CTRL_DISABLED);
}
}
lv_middle = lv_oct;
lv_textarea_set_cursor_click_pos(lv_bin, true); /* 其他文本区域有效隐藏 */
lv_textarea_set_cursor_click_pos(lv_dec, true);
lv_textarea_set_cursor_click_pos(lv_hex, true);
}
}
else if(code == LV_EVENT_VALUE_CHANGED) /* 如果文本区域的数值发生改变,就执行下面的代码 */
{
/* 根据输入类型转换数据 */
char str_tmp[32]; /* 进制存储数组 */
char lv_oct_buf[32]; /* 进制存储数组 */
char lv_dex_oct_buf[32]; /* 十进制转八进制存储数组 */
static char regbit_flag_buf[32];
const char * lv_atk_str_buffer = lv_textarea_get_text(ta); /* 获取输入内容 */
if (ta == lv_bin) /* 如果是二进制文本区域的数值改变 */
{
if (lv_atk_str_buffer != NULL)
{
memset(lv_oct_buf,0,sizeof(lv_oct_buf));
lv_snprintf(str_tmp, sizeof(str_tmp),"%d", lv_atk_bit_bin_to_dec(lv_atk_str_buffer)); /* 二进制转十进制 */
lv_textarea_set_placeholder_text(lv_dec, str_tmp);
lv_snprintf(lv_oct_buf, sizeof(lv_oct_buf), "%d", lv_atk_dec_to_oct(atof((const char *)str_tmp)));
lv_textarea_set_placeholder_text(lv_oct, lv_oct_buf); /* 十进制转八进制 */
lv_snprintf(str_tmp, sizeof(str_tmp), "0x%X", lv_atk_bit_bin_to_dec(lv_atk_str_buffer)); /* 二进制转十六进制 */
lv_textarea_set_placeholder_text(lv_hex, str_tmp);
}
else /* 其他文本区域清空 */
{
lv_textarea_set_placeholder_text(lv_dec, "");
lv_textarea_set_placeholder_text(lv_hex, "");
lv_textarea_set_placeholder_text(lv_oct, "");
}
}
else if (ta == lv_dec) /* 如果是十进制文本区域的数值改变 */
{
if (lv_atk_str_buffer != NULL)
{
/* 十进制转二进制 */
memset(regbit_flag_buf,0,sizeof(regbit_flag_buf));
memset(lv_oct_buf,0,sizeof(lv_oct_buf));
sprintf(regbit_flag_buf,"%ld",lv_atk_bec_to_bin(atof((const char *)lv_atk_str_buffer)));
lv_textarea_set_placeholder_text(lv_bin, regbit_flag_buf);
lv_snprintf(lv_oct_buf, sizeof(lv_oct_buf), "%d", lv_atk_dec_to_oct(atof((const char *)lv_atk_str_buffer))); /* 十进制转八进制 */
lv_textarea_set_placeholder_text(lv_oct, lv_oct_buf); /* 十进制转八进制 */
lv_snprintf(str_tmp, sizeof(str_tmp),"0x%X", lv_atk_bit_bin_to_dec(regbit_flag_buf)); /* 二进制转十六进制 */
lv_textarea_set_placeholder_text(lv_hex, str_tmp);
}
else
{
lv_textarea_set_placeholder_text(lv_bin, "");
lv_textarea_set_placeholder_text(lv_hex, "");
lv_textarea_set_placeholder_text(lv_oct, "");
}
}
else if (ta == lv_hex) /* 如果是十六进制文本区域的数值改变 */
{
if (lv_atk_str_buffer != NULL)
{
memset(lv_oct_buf,0,sizeof(lv_oct_buf));
memset(regbit_flag_buf,0,sizeof(regbit_flag_buf));
memset(lv_dex_oct_buf,0,sizeof(lv_dex_oct_buf));
lv_snprintf(lv_oct_buf, sizeof(lv_oct_buf), "%ld", lv_atk_hex_to_dex((char *)lv_atk_str_buffer)); /* 十六进制转十进制 */
lv_textarea_set_placeholder_text(lv_dec, lv_oct_buf);
sprintf(regbit_flag_buf,"%ld",lv_atk_bec_to_bin(atof((const char *)lv_oct_buf)));
lv_textarea_set_placeholder_text(lv_bin, regbit_flag_buf);
lv_snprintf(lv_dex_oct_buf, sizeof(lv_dex_oct_buf), "%d", lv_atk_dec_to_oct(atof((const char *)lv_oct_buf))); /* 十进制转八进制 */
lv_textarea_set_placeholder_text(lv_oct, lv_dex_oct_buf); /* 十进制转八进制 */
lv_snprintf(str_tmp, sizeof(str_tmp),"0x%X", lv_atk_bit_bin_to_dec(regbit_flag_buf)); /* 二进制转十六进制 */
lv_textarea_set_placeholder_text(lv_hex, str_tmp);
}
else
{
lv_textarea_set_placeholder_text(lv_dec, "");
lv_textarea_set_placeholder_text(lv_bin, "");
lv_textarea_set_placeholder_text(lv_oct, "");
}
}
else if (ta == lv_oct) /* 如果是八进制文本区域的数值改变 */
{
if (lv_atk_str_buffer != NULL)
{
memset(lv_oct_buf,0,sizeof(lv_oct_buf));
memset(regbit_flag_buf,0,sizeof(regbit_flag_buf));
lv_snprintf(lv_oct_buf, sizeof(lv_oct_buf), "%ld", lv_atk_oct_to_dex(atof((const char *)lv_atk_str_buffer))); /* 八进制转十进制 */
lv_textarea_set_placeholder_text(lv_dec, lv_oct_buf);
sprintf(regbit_flag_buf,"%ld",lv_atk_bec_to_bin(atof((const char *)lv_oct_buf))); /* 十进制换二进制 */
lv_textarea_set_placeholder_text(lv_bin, regbit_flag_buf);
lv_snprintf(str_tmp, sizeof(str_tmp),"0x%X", lv_atk_bit_bin_to_dec(regbit_flag_buf)); /* 二进制转十六进制 */
lv_textarea_set_placeholder_text(lv_hex, str_tmp);
}
else
{
lv_textarea_set_placeholder_text(lv_dec, "");
lv_textarea_set_placeholder_text(lv_bin, "");
lv_textarea_set_placeholder_text(lv_hex, "");
}
}
}
}
/**
* @brief 创建进制界面
* @param parent:父类
* @retval 无
*/
void lv_atk_scale_bit_init(lv_obj_t *parent)
{
int lv_scale_col_1 = 0; /* 列 */
lv_obj_t *lv_obj_text;
for (int i = 0 ; i < LV_ATK_BIT_COUNT; i++)
{
/* 位按钮编号索引 */
lv_bit_index[i] = lv_obj_create(parent); /* 创建obj对象 */
lv_obj_set_style_bg_color(lv_bit_index[i], lv_color_hex3(0x00), LV_STATE_DEFAULT); /* 设置颜色 */
lv_obj_set_style_border_side(lv_bit_index[i], 0, LV_STATE_DEFAULT); /* 设置边界宽度 */
lv_obj_set_style_text_color(lv_bit_index[i], lv_color_hex3(0xffffff), LV_STATE_DEFAULT); /* 设置字符 */
lv_obj_set_style_radius(lv_bit_index[i], 2, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_size(lv_bit_index[i], LV_ATK_BIT_W, LV_ATK_BIT_INDEX_H); /* 设置对象大小(宽度和高度) */
/* 位按钮 */
lv_bit_text[i] = lv_btn_create(parent); /* 创建按钮对象 */
lv_obj_set_style_radius(lv_bit_text[i], 5, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_style_bg_color(lv_bit_text[i], lv_palette_main(LV_PALETTE_RED), LV_STATE_DEFAULT); /* 设置颜色 */
lv_obj_set_style_border_side(lv_bit_text[i], 0, LV_STATE_DEFAULT); /* 设置边界宽度*/
lv_obj_set_style_text_color(lv_bit_text[i], lv_color_hex3(0xffffff), LV_STATE_DEFAULT); /* 设置字符 */
lv_obj_set_size(lv_bit_text[i], LV_ATK_BIT_W, LV_ATK_BIT_H); /* 设置对象大小(宽度和高度) */
lv_obj_add_event_cb(lv_bit_text[i], lv_event_bit_map_handler,LV_EVENT_ALL,NULL); /* 分配点击事件处理函数 */
/* 位按钮数字 */
lv_obj_text = lv_label_create(lv_bit_text[i]); /* 创建标签 */
lv_label_set_text(lv_obj_text, "0");
lv_obj_align_to(lv_obj_text, NULL, LV_ALIGN_CENTER, 0, 0); /* 当前画布居中 */
lv_obj_align_to(lv_bit_index[i], parent, LV_ALIGN_TOP_RIGHT, -(LV_ATK_BIT_ROW_SPACE*(lv_scale_col_1 ++ )+3), 50); /* 设置摆放位置 */
lv_obj_align_to(lv_bit_text[i], lv_bit_index[i], LV_ALIGN_OUT_BOTTOM_MID, 0, 0); /* 设置摆放位置 */
if (i == 32)
{
lv_obj_set_style_bg_color(lv_bit_text[32], lv_palette_main(LV_PALETTE_BLUE), LV_STATE_DEFAULT); /* 设置颜色 */
lv_obj_set_style_bg_color(lv_bit_index[32], lv_palette_main(LV_PALETTE_BLUE), LV_STATE_DEFAULT); /* 设置颜色 */
lv_label_set_text(lv_obj_get_child(lv_bit_text[32],NULL), "");
}
}
lv_bin_label = lv_label_create(parent);
lv_label_set_text(lv_bin_label,"BIN");
lv_obj_align_to(lv_bin_label,lv_bit_text[LV_ATK_BIT_COUNT - 1],LV_ALIGN_OUT_BOTTOM_MID,0,20);
/* 二进制 */
lv_bin = lv_textarea_create(parent);
lv_textarea_set_accepted_chars(lv_bin, "01"); /* 设置字符列表,文本区域只接受这些字符 */
lv_obj_set_style_text_font(lv_bin, &lv_font_montserrat_14, LV_STATE_DEFAULT); /* 设置数值字体格式 */
lv_obj_set_style_radius(lv_bin, 0, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_size(lv_bin,lcddev.width/2,LV_ATK_BIT_H);
lv_textarea_set_text(lv_bin, "");
lv_textarea_set_one_line(lv_bin, true);
lv_textarea_set_cursor_click_pos(lv_bin, true);
lv_obj_add_event_cb(lv_bin, lv_ta_cb_event_handler,LV_EVENT_ALL,NULL);
lv_obj_align_to(lv_bin, lv_bin_label, LV_ALIGN_OUT_RIGHT_MID, 12, 0); /* 摆放位置 */
lv_dec_label = lv_label_create(parent);
lv_label_set_text(lv_dec_label,"DEC");
lv_obj_align_to(lv_dec_label,lv_bin_label,LV_ALIGN_OUT_BOTTOM_MID,0,20);
/* 十进制 */
lv_dec = lv_textarea_create(parent);
lv_textarea_set_accepted_chars(lv_dec, "0123456789"); /* 设置字符列表,文本区域只接受这些字符 */
lv_obj_set_style_text_font(lv_dec, &lv_font_montserrat_14, LV_STATE_DEFAULT); /* 设置文本字体格式 */
lv_obj_set_style_radius(lv_dec, 0, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_size(lv_dec,lcddev.width/2,LV_ATK_BIT_H);
lv_textarea_set_text(lv_dec, "");
lv_textarea_set_one_line(lv_dec, lv_dec);
lv_textarea_set_cursor_click_pos(lv_dec, true);
lv_obj_add_event_cb(lv_dec, lv_ta_cb_event_handler,LV_EVENT_ALL,NULL);
lv_obj_align_to(lv_dec, lv_dec_label, LV_ALIGN_OUT_RIGHT_MID, 10, 0); /* 摆放位置 */
lv_hex_label = lv_label_create(parent);
lv_label_set_text(lv_hex_label,"HEX");
lv_obj_align_to(lv_hex_label,lv_dec_label,LV_ALIGN_OUT_BOTTOM_MID,0,20);
/* 十六进制 */
lv_hex = lv_textarea_create(parent);
lv_textarea_set_accepted_chars(lv_hex, "0123456789ABCDEFabcdef"); /* 设置字符列表,文本区域只接受这些字符 */
lv_obj_set_style_text_font(lv_hex, &lv_font_montserrat_14, LV_STATE_DEFAULT); /* 设置文本字体格式 */
lv_obj_set_style_radius(lv_hex, 0, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_size(lv_hex,lcddev.width/2,LV_ATK_BIT_H);
lv_textarea_set_text(lv_hex, "");
lv_textarea_set_one_line(lv_hex, true);
lv_textarea_set_cursor_click_pos(lv_hex, true);
lv_obj_add_event_cb(lv_hex, lv_ta_cb_event_handler,LV_EVENT_ALL,NULL);
lv_obj_align_to(lv_hex, lv_hex_label, LV_ALIGN_OUT_RIGHT_MID, 10, 0); /* 摆放位置 */
lv_oct_label = lv_label_create(parent);
lv_label_set_text(lv_oct_label,"OCT");
lv_obj_align_to(lv_oct_label,lv_hex_label,LV_ALIGN_OUT_BOTTOM_MID,0,20);
/* 八进制 */
lv_oct = lv_textarea_create(parent);
lv_textarea_set_accepted_chars(lv_oct, "01234567"); /* 设置字符列表,文本区域只接受这些字符 */
lv_obj_set_style_text_font(lv_oct, &lv_font_montserrat_14, LV_STATE_DEFAULT); /* 设置文本字体格式 */
lv_obj_set_style_radius(lv_oct, 0, LV_STATE_DEFAULT); /* 设置圆角 */
lv_obj_set_size(lv_oct,lcddev.width/2,LV_ATK_BIT_H);
lv_textarea_set_text(lv_oct, "");
lv_textarea_set_one_line(lv_oct, true);
lv_textarea_set_cursor_click_pos(lv_oct, true);
lv_obj_add_event_cb(lv_oct, lv_ta_cb_event_handler,LV_EVENT_ALL,NULL);
lv_obj_align_to(lv_oct, lv_oct_label, LV_ALIGN_OUT_RIGHT_MID, 10, 0); /* 摆放位置 */
}
/**
* @brief 程序入口
* @param 无
* @retval 无
*/
void lv_mainstart(void)
{
lv_snprintf(lv_bit_flag, sizeof(lv_bit_flag), "000000000000000000000000000000000"); /* 设置位的标志初始化值 */
lv_scale_cont = lv_obj_create(lv_scr_act()); /* 创建一个容器 */
lv_obj_set_size(lv_scale_cont, lcddev.width, lcddev.height); /* 设置容器的大小 */
lv_obj_set_pos(lv_scale_cont,0,0); /* 设置容器的位置 */
lv_btnmatrix = NULL; /* 设置键盘对象位空 */
lv_atk_scale_bit_init(lv_scale_cont); /* 初始化界面 */
}
测试结果

六、综合历程
主函数
void lv_general_win_create(void)
{
#define TOP_OFFSET -10
lv_obj_t* back_btn = lv_label_create(lv_general_dev.parent);
lv_label_set_text(back_btn, BACK_BTN_TITLE);
lv_obj_add_flag(back_btn, LV_OBJ_FLAG_CLICKABLE);
lv_obj_align_to(back_btn, NULL, LV_ALIGN_TOP_LEFT, 15, TOP_OFFSET);
lv_obj_set_style_text_color(back_btn, lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
lv_obj_add_event_cb(back_btn, lv_general_dev.lv_back_event, LV_EVENT_ALL, NULL);
}
/**
* @brief 计算前导置零
* @param 无
* @retval 无
*/
int lv_clz(unsigned int app_readly_list[])
{
int bit = 0;
for (int i = 0; i < 32; i++)
{
if (app_readly_list[i] == 1)
{
break;
}
bit ++ ;
}
return bit;
}
/**
* @brief APP按键回调函数
* @param obj :对象
* @param event:事件
* @retval 无
*/
static void lv_imgbtn_control_event_handler(lv_event_t *event)
{
lv_event_code_t code = lv_event_get_code(event);
lv_obj_t * obj = lv_event_get_target(event);
lv_obj_t *lv_app_parent = lv_obj_get_parent(obj);
if (code == LV_EVENT_CLICKED)
{
for (int i = 0;i < image_mun;i ++)
{
if (obj == lv_app_t[i])
{
app_readly_list[i] = 1 ; /* app就绪表位置1 */
}
}
lv_trigger_bit = ((unsigned int)lv_clz((app_readly_list))); /* 计算前导指令 */
app_readly_list[lv_trigger_bit] = 0; /* 该位清零就绪表 */
lv_obj_del(lv_app_parent); /* 界面切换使用删除方法 */
lv_app_parent = NULL; /* 主界面的容器设置为空 */
switch(lv_trigger_bit) /* 根据该位做相应的函数 */
{
case 1:
lv_setting_demo(); /* 设置系统(完成) */
break;
case 2:
lv_shelf_demo(); /* 板载测试系统(完成) */
break;
case 3:
lv_draw_demo(); /* 绘画(完成) */
break;
case 4:
lv_calculator_demo(); /* 计算器(完成) */
break;
case 5:
lv_qr_windowm(); /* 二维码制作(完成) */
break;
default:
break;
}
}
}
/**
* @brief APP显示
* @param parent:父类对象
* @retval 无
*/
void lv_mid_cont_add_app(lv_obj_t *parent)
{
int line_feed_num = 0;
int lv_index = 0;
lv_app_t[lv_index] = NULL;
lv_index ++;
int i = 0;
int n = 1;
lv_app_t[lv_index] = lv_obj_create(parent);
lv_obj_set_pos(lv_app_t[lv_index],-7,20);
lv_obj_set_size(lv_app_t[lv_index], app_image[lv_index].app_witch, app_image[lv_index].app_hietch);
lv_obj_set_style_bg_color(lv_app_t[lv_index], lv_color_make(26, 57, 137), LV_STATE_DEFAULT);
lv_obj_clear_flag(lv_app_t[lv_index], LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_radius(lv_app_t[lv_index],0,LV_PART_MAIN);
lv_obj_add_event_cb(lv_app_t[lv_index], lv_imgbtn_control_event_handler, LV_EVENT_ALL, NULL);
lv_app_name[lv_index] = lv_label_create(lv_app_t[lv_index]);
lv_obj_set_style_text_color(lv_app_name[lv_index],lv_color_make(255,255,255), LV_STATE_DEFAULT);
lv_obj_set_style_text_font(lv_app_name[lv_index],&myFont14, LV_STATE_DEFAULT);
lv_label_set_text(lv_app_name[lv_index], app_image[lv_index].app_text_English);
lv_obj_align(lv_app_name[lv_index],LV_ALIGN_BOTTOM_LEFT,-10, 10);
lv_app_img[lv_index] = lv_img_create(lv_app_t[lv_index]);
lv_img_set_src(lv_app_img[lv_index], app_image[lv_index].app_image);
lv_obj_center(lv_app_img[lv_index]);
lv_obj_set_style_img_recolor_opa(lv_app_img[lv_index], 255, LV_PART_MAIN);
lv_obj_set_style_img_recolor(lv_app_img[lv_index], lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
unsigned int lv_width_x = lv_obj_get_width(lv_app_t[1]) + 20;
lv_index ++;
for (lv_index = 2 ; lv_index < image_mun ; lv_index ++)
{
lv_app_t[lv_index] = lv_obj_create(parent);
lv_obj_set_size(lv_app_t[lv_index], app_image[lv_index].app_witch, app_image[lv_index].app_hietch);
lv_obj_set_style_bg_color(lv_app_t[lv_index], lv_color_make(26, 57, 137), LV_STATE_DEFAULT);
lv_obj_clear_flag(lv_app_t[lv_index], LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_radius(lv_app_t[lv_index], 0, LV_PART_MAIN);
lv_obj_update_layout(lv_app_t[lv_index]);
lv_width_x = lv_width_x + lv_obj_get_width(lv_app_t[lv_index]) + 10;
if (lv_width_x < lv_obj_get_width(lv_scr_act()))
{
lv_obj_align_to(lv_app_t[lv_index], lv_app_t[lv_index - 1], LV_ALIGN_OUT_RIGHT_MID, 10, 0);
}
else
{
line_feed_num++;
if (line_feed_num >= 2)
{
i = 10 * n;
n ++;
}
else
{
i = 0;
}
lv_obj_set_pos(lv_app_t[lv_index], -7, (lv_obj_get_height(lv_app_t[lv_index]) + 20) * line_feed_num + 10 - i );
lv_width_x = lv_obj_get_width(lv_app_t[lv_index]) + 10;
}
lv_app_name[lv_index] = lv_label_create(lv_app_t[lv_index]);
lv_obj_set_style_text_color(lv_app_name[lv_index], lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
lv_obj_set_style_text_font(lv_app_name[lv_index], &myFont14, LV_STATE_DEFAULT);
lv_label_set_text(lv_app_name[lv_index], app_image[lv_index].app_text_English);
lv_obj_align(lv_app_name[lv_index], LV_ALIGN_BOTTOM_LEFT, -10, 10);
lv_app_img[lv_index] = lv_img_create(lv_app_t[lv_index]);
lv_img_set_src(lv_app_img[lv_index], app_image[lv_index].app_image);
lv_obj_center(lv_app_img[lv_index]);
lv_obj_set_style_img_recolor_opa(lv_app_img[lv_index], 255, LV_PART_MAIN);
lv_obj_set_style_img_recolor(lv_app_img[lv_index], lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
lv_obj_add_event_cb(lv_app_t[lv_index], lv_imgbtn_control_event_handler, LV_EVENT_ALL, NULL);
}
}
void lv_app_icon(lv_obj_t *praten)
{
/* 左上角图标 */
lv_obj_t* lv_letf_acon = lv_label_create(praten);
lv_label_set_text(lv_letf_acon, LV_SYMBOL_WIFI " " LV_SYMBOL_AUDIO);
lv_obj_align(lv_letf_acon,LV_ALIGN_TOP_LEFT,-5,-10);
lv_obj_set_style_text_color(lv_letf_acon, lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
/* 中间的时间 */
lv_obj_t* lv_timer = lv_label_create(praten);
lv_label_set_text(lv_timer, "2022/1/20");
lv_obj_align(lv_timer, LV_ALIGN_TOP_MID, 0, -10);
lv_obj_set_style_text_color(lv_timer, lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
/* 右上角图标 */
lv_obj_t* lv_right_acon = lv_label_create(praten);
lv_label_set_text(lv_right_acon, LV_SYMBOL_BATTERY_3 " " LV_SYMBOL_USB);
lv_obj_align(lv_right_acon, LV_ALIGN_TOP_RIGHT, 5, -10);
lv_obj_set_style_text_color(lv_right_acon, lv_color_make(255, 255, 255), LV_STATE_DEFAULT);
}
/**
* @brief 主界面
* @param 无
* @retval 无
*/
void lv_main_window(void)
{
lv_obj_t *lv_main_cont = lv_obj_create(lv_scr_act());
lv_obj_set_size(lv_main_cont, lv_obj_get_width(lv_scr_act()), lv_obj_get_height(lv_scr_act()));
lv_obj_set_style_bg_color(lv_main_cont, lv_color_make(1, 27, 54), LV_STATE_DEFAULT);
lv_obj_set_style_radius(lv_main_cont, 0, LV_PART_MAIN);
lv_mid_cont_add_app(lv_main_cont);
lv_app_icon(lv_main_cont);
}
/**
* @brief LVGL 入口
* @param 无
* @retval 无
*/
void lv_mainstart(void)
{
lv_main_window(); /* 进入页面 */
}
测试结果


更多推荐

所有评论(0)