📄 key_prc.c
字号:
Get_mes_content(4,1);
break;
case 0x02:
In_third_menu();
Get_mes_content(4,2);
break;
case 0x03:
In_third_menu();
Get_mes_content(4,3);
break;
case 0x04:
if(list_num>=5) //上页按键确认
{
Prev_page_affirm(4);
}
else //"返回"按键确认
disp_mode = FIRST_MENU_DISP;
break;
case 0x05: //"返回"按键确认
disp_mode = FIRST_MENU_DISP;
break;
default:
break;
}
select_position = 0;
break;
case 5: /* 五条信息时处理*/
switch(select_position)
{
case 0x00:
In_third_menu();
Get_mes_content(5,0);
break;
case 0x01:
In_third_menu();
Get_mes_content(5,1);
break;
case 0x02:
In_third_menu();
Get_mes_content(5,2);
break;
case 0x03:
In_third_menu();
Get_mes_content(5,3);
break;
case 0x04:
In_third_menu();
Get_mes_content(5,4);
break;
case 0x05:
if(list_num>5) //上页按键确认
{
Prev_page_affirm(5) ;
}
else
{
scr_mes_num = Judge_mes_num(); //下页按键确认
mes_list_F = 1;
}
break;
case 0x06: //"下页"按键确认
if(list_num > 5)
{
scr_mes_num = Judge_mes_num();
mes_list_F = 1;
}
else //返回按键确认
disp_mode = FIRST_MENU_DISP;
break;
case 0x07: //"返回"按键确认
disp_mode = FIRST_MENU_DISP;
break;
default:
break;
}
select_position = 0;
break;
}
}
/*第三级菜单显示时按右键处理情况*/
else if(disp_mode == THIRD_MENU_DISP)
{
if(disp_no_u == 0) //第一屏时
{
if(content_disp_end_F == 1) //一屏就显示完内容情况下
{
switch(select_position)
{
case 0x00: //按删除键确认
Del_mes_prc(); //要删除信息
mes_list_F =1;
break;
case 0x01: //返回键确认
Return_second_menu(scr_mes_num);
mes_list_F = 1;
break;
default:
break;
}
}
else //第一屏,但信息内容一屏没显示完
{
switch(select_position)
{
case 0x00: //下页按键处理
disp_no_u++;
content_disp_F = P_DISP ;
clear_scr_F = 1;
break;
case 0x01: //返回键处理
Return_second_menu(scr_mes_num);
mes_list_F = 1;
break;
default:
break;
}
}
}
else //不是第一屏
{
if(content_disp_end_F == 1) //显示内容已结束
{
switch(select_position)
{
case 0x00: //上页按键确认
disp_no_u--;
clear_scr_F = 1;
content_disp_F = N_DISP ;
break;
case 0x01: //删除按键确认
//删除处理
Del_mes_prc();
mes_list_F = 1;
break;
case 0x02: //返回键确认
Return_second_menu(scr_mes_num);
mes_list_F = 1;
break;
default:
break;
}
}
else //显示内容还没结束
{
switch(select_position)
{
case 0x00: //上页按键确认
if(disp_no_u >= 1)
disp_no_u--;
clear_scr_F = 1;
content_disp_F = N_DISP ;
//上页处理
break;
case 0x01: //下页按键确认
disp_no_u++;
if(disp_no_u>4)
{
disp_no_u = 4; //一条信息最多暂定五屏显示完
break;
}
content_disp_F = P_DISP ;
clear_scr_F = 1;
break;
case 0x02: //返回键确认
Return_second_menu(scr_mes_num);
mes_list_F = 1;
break;
default:
break;
}
}
}
}
}
/***********************************************************/
/***********************************************************/
/***********************************************************/
/* 按"上页"按键时的处理 */
/* mes_num:是当前这一页有多少条信息 */
/***********************************************************/
void Prev_page_affirm(unsigned char mes_num)
{
list_num-=mes_num;
if(mes_num != 0)
{
// if(mes_list == (struct MES_CON_BLOCK code *)END)
if(mes_list == &MES_NULL)
{
mes_list=last_mes_list ;
mes_num--;
}
/*先把指针回到这一页的第一条信息处*/
while(mes_num)
{
mes_list = mes_list->prev;
mes_num--;
}
}
/*再判上一屏有多少条信息*/
scr_mes_num = R_judge_mes_num();
list_num -= scr_mes_num ;
mes_list_F = 1;
}
/***********************************************************/
/*这是在查看信息内容时按返回键时处理情形
/* mes_num:当前这一屏有多少条信息
/***********************************************************/
void Return_second_menu(unsigned char mes_num)
{
list_num -= mes_num ;
// if(mes_list == (struct MES_CON_BLOCK code *)END)
if(mes_list == &MES_NULL)
{
mes_list = last_mes_list;
if(mes_num != 0)
mes_num--;
}
while(mes_num)
{
// if(mes_list->prev != (struct MES_CON_BLOCK code *)END)
if(mes_list->prev != &MES_NULL)
{ mes_list = mes_list->prev;
mes_num--;
}
else
break;
}
scr_mes_num = Judge_mes_num();
disp_mode = SECOND_MENU_DISP ;
select_position = select_position_old ;
disp_no_u_old = 6 ;
disp_no_u = 0;
}
/**********************************************************/
/* mes_list指针指向的是在二级界面菜单显示时,待显示的链表**/
/*中的某一处,首次进入二级菜单时 mes_list -> disp_tcb_list*/
/**********************************************************/
unsigned char Judge_mes_num(void)
{
unsigned char i ;
if(mes_list == &MES_NULL) //无信息就返回0
return 0;
mes_list_old = mes_list ; //为了显示*形所用
/*经过以下处理,mes_list指向该屏的信息内存块的末端*/
for(i=0;i<5;i++) //最多只判5条
{
if(mes_list ->next != &MES_NULL)
{
mes_list = mes_list -> next ;
}
else
{
last_mes_list = mes_list;
mes_list = &MES_NULL;
i++;
break;
}
}
return i;
}
/*******************************************************/
/*******************************************************/
unsigned char R_judge_mes_num(void)
{
unsigned char i=0 ;
struct MES_CON_BLOCK *p = mes_list;
if((mes_list == &MES_NULL)&&(last_mes_list != &MES_NULL))
{
p = last_mes_list;
}
if(p->next == &MES_NULL)
i=1;
for(;i<5;i++)
{
// if(p->prev != (struct MES_CON_BLOCK xdata *)END)
if(p->prev != &MES_NULL)
p = p -> prev ;
else
{
i++;
break;
}
}
mes_list_old = p ;
return i;
}
/*******************************************************/
/*******************************************************/
void In_third_menu(void)
{
disp_mode = THIRD_MENU_DISP;
content_disp_F = P_DISP ;
select_position_old = select_position; //阅读信息后返回时正常情况下仍选中该条信息
disp_no_u_old= 6; //disp_no_u不可能达到6
disp_no_u=0;
}
/*******************************************************/
/*******************************************************/
void Get_mes_content(unsigned char scr_disp_num,unsigned char select)
{
struct MES_CON_BLOCK xdata *p;
if(mes_list == &MES_NULL)
{
p = last_mes_list;
scr_disp_num --;
}
else
p=mes_list ;
while(scr_disp_num-- > select)
p=p->prev;
mes_content = (unsigned char xdata*)p->mes_addr.address.address;
read_mes_page_adr =(unsigned char)(p->mes_addr.address.page_addr) ;
p->new_old_F = OLD; //进入该信息阅读,表示信息是旧的
/*以下为编删除信息时增加*/
del_mes_p = p ; //将现在这条信息的控制块存入,以备删除信息时用
}
/*******************************************************/
/* 该函数为删除信息时需处理的动作 */
/*******************************************************/
void Del_mes_prc(void)
{
if(del_mes_p == last_mes_list ) //如果删除的信息是列表中的最后一条
{
if(last_mes_list->prev !=&MES_NULL) //不是第一条
{
last_mes_list = last_mes_list->prev;
select_position_old -= 1; //防止将选择框移到"返回" 处
}
else //删除的是最后一条信息
{
last_mes_list = &MES_NULL ;
}
}
Del_disp_tcb_block(del_mes_p); // 从显示链表中脱开,然后放回到空链表中
list_num--; //总的信息数减1
scr_mes_num--; //当前这一屏的信息数量减1
if(scr_mes_num != 0)
Return_second_menu(scr_mes_num); //直接返回二级菜单
else //这一屏已没有信息列表了,那么返回上一屏列表
{
if(list_num >= 5) //之前有超过5条信息
Return_second_menu(5);
else //之前不超过5条
Return_second_menu(list_num);
select_position = 0; //新屏的选项位置重新从第一行信息位置开始
}
}
/************************************************/
/************************************************/
void Get_num_code(unsigned char num)
{
unsigned char i;
if(num>=100)
{
i= num/100;
(unsigned int)num_code[0]= num_to_code[i];
num = num%100;
i=num/10;
(unsigned int)num_code[2]= num_to_code[i];
i = num%10;
(unsigned int)num_code[4]= num_to_code[i];
num_code[6]='\0';
}
else if(num>=10)
{
i=num/10;
(unsigned int)num_code[0]= num_to_code[i];
i = num%10;
(unsigned int)num_code[2]= num_to_code[i];
num_code[4]='\0';
}
else
{
i = num;
(unsigned int)num_code[0]= num_to_code[i];
num_code[2]='\0';
}
}
/************************************************/
/************************************************/
void Get_list_str(unsigned char num)
{
// memset(list_str,0x00,11); //clear list_str
register char i=0 ;
while(i < 11)
*(list_str + i++)= 0x00;
Get_num_code(num);
strcat(list_str,"第");
strcat(list_str,num_code);
strcat(list_str,"条");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -