From 1cb3c9d6174943fd0c782ab9d2b35e16a46c250c Mon Sep 17 00:00:00 2001 From: Silent Sheep <2873330549@qq.com> Date: Sun, 25 Feb 2024 16:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86Digital=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=B8=AD=E7=9A=84=E4=B8=A4=E4=B8=AA=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E6=96=B9=E5=90=91=E5=8F=98=E9=87=8F=EF=BC=8C=E4=BD=BFlabel?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E5=AD=97=E5=8F=AF=E4=BB=A5=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E8=BF=90=E5=8A=A8=EF=BC=8C=E5=B9=B6=E5=9C=A8oled=5Fport.h?= =?UTF-8?q?=E4=B8=AD=E9=A2=84=E7=95=99=E4=BA=86=E7=94=A8=E4=BA=8Eoled?= =?UTF-8?q?=E4=BC=91=E7=9C=A0=E7=9A=84=E5=87=BD=E6=95=B0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?(=E6=B3=A8=E9=87=8A=E6=8E=89=E4=BA=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Csource/src/oled_port.h | 2 ++ Csource/src/oled_ui.c | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Csource/src/oled_port.h b/Csource/src/oled_port.h index 0ca8546..543a9a2 100644 --- a/Csource/src/oled_port.h +++ b/Csource/src/oled_port.h @@ -10,5 +10,7 @@ void OLED_Init(void); //初始化驱动 void OLED_SendBuff(uint8_t buff[8][128]); //将8*128字节的buff一次性全部发送的函数 +//void OLED_PowerCtrl(uint8_t on1_off0); + #endif diff --git a/Csource/src/oled_ui.c b/Csource/src/oled_ui.c index a3d2d7e..373f5ff 100644 --- a/Csource/src/oled_ui.c +++ b/Csource/src/oled_ui.c @@ -1068,6 +1068,7 @@ static void OLED_DigitalDrawLabel(DigitalPage * dp, int16_t y , String label) static uint8_t temp_num_pos = 0; //用于在show函数内暂时装载num_pos变量,实现同时运动动画和ripple动画的切换 static DigitalDirect temp_dir = Digital_Direct_None; //记录下运动方向 +static DigitalDirect temp_label_dir = Digital_Direct_None; //记录下label运动方向,防止数字和label同时需要运动的情况出现 static void OLED_DigitalShow(PageAddr page_addr) { @@ -1123,10 +1124,11 @@ static void OLED_DigitalShow(PageAddr page_addr) //数字上下移动 if(dp->dir != Digital_Direct_None) { - temp_dir = dp->dir; //记录传入的方向,并清零传入的消息(label移动,也将方向读出) if((dp->digital_num_pos & 0x3F) && !(dp->digital_num_pos & 0x40)) - //ripple模式和一起滚动模式的区别只对数字移动有效(对标签滚动无效) - //排除标签是为了防止在数字运动是标签运动重复进入 + { + temp_dir = dp->dir; //记录数字传入的方向, + //ripple模式和一起滚动模式的区别只对数字移动有效(对标签滚动无效) + //排除标签是为了防止在数字运动是标签运动重复进入 if(ui.upara->digital_ripple) //第一次接收到运动消息时, { OLED_DigitalDirChangey(dp,temp_dir); @@ -1141,12 +1143,16 @@ static void OLED_DigitalShow(PageAddr page_addr) //更新选中位的值 OLED_DigitalDirChangey(dp,temp_dir); } + } + else if(dp->digital_num_pos & 0x40) //如果是标签 + { + temp_label_dir = dp->dir; + } dp->dir = Digital_Direct_None; //保证只有接收到运动消息的第一次进来 } - if(temp_dir != Digital_Direct_None) //持续运动 - if(dp->digital_num_pos & 0x3F) //移动的是数字 + if(temp_dir != Digital_Direct_None && (dp->digital_num_pos & 0x3F)) //持续运动//移动的是数字 OLED_Animation(&(dp->num_y),&(dp->num_y_trg),ui.upara->ani_param[DIGI_ANI]); //从0-24 - else if(dp->digital_num_pos & 0x40) //移动的是标签 + if(temp_label_dir != Digital_Direct_None && (dp->digital_num_pos & 0x40)) //移动的是标签 OLED_Animation(&(dp->label_y),&(dp->label_y_trg),ui.upara->ani_param[DIGI_ANI]); for(uint8_t i = 0; i < DIGITAL_NUM_INDEX_MAX; i++) //绘制每个数字win的位置 { @@ -1191,12 +1197,12 @@ static void OLED_DigitalShow(PageAddr page_addr) } //标签上下移动 //绘制移动标签 - if((dp->digital_num_pos&0x40) && temp_dir == Digital_Direct_Increase) + if((dp->digital_num_pos&0x40) && temp_label_dir == Digital_Direct_Increase) { OLED_DigitalDrawLabel(dp, dp->label_y + DIGITAL_Label_SIZE, dp->label_array[dp->select_label_index]); OLED_DigitalDrawLabel(dp, dp->label_y, dp->label_array[last_or_next_label_index]); } - else if (((dp->digital_num_pos)&0x40) && temp_dir == Digital_Direct_Decrease) + else if (((dp->digital_num_pos)&0x40) && temp_label_dir == Digital_Direct_Decrease) { OLED_DigitalDrawLabel(dp, dp->label_y - DIGITAL_Label_SIZE, dp->label_array[dp->select_label_index]); OLED_DigitalDrawLabel(dp, dp->label_y, dp->label_array[last_or_next_label_index]); @@ -1205,7 +1211,7 @@ static void OLED_DigitalShow(PageAddr page_addr) OLED_DigitalDrawLabel(dp, 0, dp->label_array[dp->select_label_index]); //运动完成 if(dp->label_y == dp->label_y_trg && ((dp->digital_num_pos)&0x40)) - { temp_dir = Digital_Direct_None; dp->digital_num_pos &= 0x3F;} + { temp_label_dir = Digital_Direct_None; dp->digital_num_pos &= 0x3F;} } } @@ -1383,9 +1389,9 @@ void OLED_DigitalPage_UpdateLabelAnimation(DigitalPage * dp, uint8_t label_index dp->digital_num_pos |= 0x40; // 设置数字位置标志位 if(dir == Digital_Direct_Increase)dp->label_y_trg = - DIGITAL_Label_SIZE; // 如果方向为增加,则设置运动目标值为负数 else dp->label_y_trg = DIGITAL_Label_SIZE; // 如果方向为减少,则设置运动目标值为正数 + last_or_next_label_index = dp->select_label_index; // 存储上一次的值 } dp->select_label_index = label_index; // 更新选中项 - last_or_next_label_index = dp->select_label_index; // 存储上一次的值 }