在例程中,《辅助功能》显示界面,进入后有《预约》、《除菌消毒》选项,点击《预约》进去,显示《时钟设置》,有一个时和分的设置功能,但例程中数字是不能变化的,那么计划在这个界面配合编码器来设置时和分的数值大小,再UI素材中增加一个选项清除图标,这样可以通过编码器来选择分别控制时和分的数值大小。
在UI素材里添加图标
,其名字命名为《331-非选择标》,增加了新素材后,需要将新的UI素材通过转换为Bin文件后发送给单片机,使单片机写入到外挂flash中。 然后再将转换好的bin文件通过串口发送至单片机,注意串口波特率选择921600.由于是UI文件更新,地址设置为10240K,如下图: 图片更新完毕后,接下来是对单片机程序中图标存储位置的更新,图标的索引及在flash中真实存储地址的更新,需要打开上一步上位机生成的《00-Map》文件,里面包含了新添加的图标索引及存储地址,如下图: 索引75 存储地址:{0xb2800,23,28}, 那么在MDK软件工程中,对应的修改在IMG_MAP.C中 添加存储地址:{0xb2800,23,28}, 在IMG_MAP.h中添加新增加图标的名称及索引,即命名一个新的名称,如下: 另需要更改图标的索引数,我们增加了一个图标,所以索引数量需要增加一个,即: #define ImgTotalNum 76 , ImgTotalNum 原来是75。 至此,所有设置完毕,在程序中就可以调用索引来显示新增加的图标了。 最后,为了实现编码器改变时和分,需要添加标志位,时变量,分变量,如下: unsigned char Hour=12; unsigned char Minute=34; unsigned char ShizhongFlag=0; 再添加时更新显示函数,分显示函数: void Meau_FuZhuGongNeng_Shi_Doing(void) { //时间 LCD_ShowImg(80, 160 ,63+Hour/10); LCD_ShowImg(98, 160 ,63+Hour%10); //选择标 LCD_ShowImg(80, 190 ,ICO_Select_Up); //选择标清除 LCD_ShowImg(130, 190 ,ICO_Select_Esc); } void Meau_FuZhuGongNeng_Fen_Doing(void) { //时间 LCD_ShowImg(120, 160 ,63+Minute/10); LCD_ShowImg(138, 160 ,63+Minute%10); //选择标 LCD_ShowImg(80, 190 ,ICO_Select_Esc); //选择标清除 LCD_ShowImg(130, 190 ,ICO_Select_Up); } 那么在Key_Deal()函数中需添加: //执行界面,需要返回 else if(MeauNow == Meau_FuZhuGongNeng_Do_Yuyue || MeauNow == Meau_FuZhuGongNeng_Do_Shizhong || MeauNow == Meau_FuZhuGongNeng_Do_ChuJun ) { if(Key_Value == KS_Up) { if(ShizhongFlag==1) { Hour++; if(Hour>23) Hour=0; Meau_FuZhuGongNeng_Shi_Doing(); } else if(ShizhongFlag==2) { Minute++; if(Minute>59) Minute=0; Meau_FuZhuGongNeng_Fen_Doing(); } } else if(Key_Value == KS_Down) { if(ShizhongFlag==1) { Hour--; if(Hour<1) Hour=23; Meau_FuZhuGongNeng_Shi_Doing(); } else if(ShizhongFlag==2) { Minute--; if(Minute<1) Minute=59; Meau_FuZhuGongNeng_Fen_Doing(); } } if(Key_Value == KL_Set) { MeauNow = Meau_FuZhuGongNeng_Select; Meau_FuZhuGongNeng_Select_Init(); } if(Key_Value == KS_Set) { if(ShizhongFlag>0) { ShizhongFlag++; if(ShizhongFlag>2) { ShizhongFlag=0; MeauNow = Meau_End; Meau_End_Show(); } if(ShizhongFlag==1) Meau_FuZhuGongNeng_Shi_Doing(); else if(ShizhongFlag==2) Meau_FuZhuGongNeng_Fen_Doing(); } else { MeauNow = Meau_End; Meau_End_Show(); } } } 这段代码的基本逻辑就是在时钟设置界面中,由编码器按键来控制标志位,标志位控制当前要设置的是时或分,然后再判断编码器的正反转来控制相应的时或分大小的设置,这样即实现编码器设置时和分的设置。 最后,这次测评最大的感受是虽然官方采用这种更新图片素材的方式来显示各种UI界面,但相对于利用UI上位机来编辑界面,然后生成相应软件代码,MDK或其他工具可以直接编译下载至单片机使用这种方式还是显得麻烦一些,希望官方也将SWM166这款芯片也支持《SYNWIT UI》上位机来编辑界面,那样对于开发者使用起来就很方便了。 还有收到的这款圆屏开发板的旋钮旋转起来不太顺畅,扭起来比较紧,比较费力,应该旋转顺畅一些,阻力小一些,这样才有丝滑的感觉,相对会让用户体验更佳,最后感谢官方提供的这次测评机会,愿华芯微特产品越来越完善,为广大电子开发者提供更易开发使用便捷的产品。
|