📄 phonebook_interface.c
字号:
//======================================================
// 文件名称: PhoneBook_Interface.c
// 功能描述: 通讯录操作界面,包括添加、删除、显示、查询通讯录条目的程序
// 维护记录: 2006-09-20 v1.0
//======================================================
#include "..\include\splc501user.h"
#include "..\include\LCD_Chinese.h"
#include "..\include\CommonFunc.h"
#include "..\include\PY.h"
#include "..\include\PhoneBook.h"
#include "..\include\VoiceDial.h"
#include "..\include\Flash.h"
//========================================================================
// 语法格式: void PB_Add(void)
// 实现功能: 新增一个通讯录条目
// 参数: 无
// 返回值: 无
//========================================================================
void PB_Add(void)
{
PHONEBOOK PB_Item={0xffff,"","","","","",0,0,0,0}, *p_PB_Item;
LCD501_ClrScreen(0);
p_PB_Item = &PB_Item;
LCD501_ClrScreen(0);
if(p_PB_Idx->ItemNum==PB_MAX_ITEM) // 如果条目已经达到最大数量
{
LCD501_SetPos(16, 48);
LCD501_Print("存储区已满!");
DelayMS(600);
return;
}
/// 提示输入条目信息
p_PB_Item->Flag_Del = 0;
LCD501_SetPos(0,0);
LCD501_Print("姓名: ");
PY_GetString(p_PB_Item->Name, sizeof(p_PB_Item->Name)-1);
if(p_PB_Item->Name[0] == '\0')
return;
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("电话1: ");
PY_GetString(p_PB_Item->Tel_1, sizeof(p_PB_Item->Tel_1)-1);
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("电话2: ");
PY_GetString(p_PB_Item->Tel_2, sizeof(p_PB_Item->Tel_2)-1);
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("Email: ");
PY_GetString(p_PB_Item->Email, sizeof(p_PB_Item->Email)-1);
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("备注: ");
PY_GetString(p_PB_Item->Other, sizeof(p_PB_Item->Other)-1);
/// 如果仍有语音拨号空间则提示是否创建语音拨号
if(p_PB_Idx->Voice_Num<PB_MAX_VOICE)
p_PB_Item->VoiceIdx = Voice_Train(p_PB_Item);
else
p_PB_Item->VoiceIdx = 0xffff;
p_PB_Item = PB_Item_Insert(p_PB_Item);
LCD501_ClrScreen(0);
LCD501_SetPos(24, 48);
LCD501_Print("添加成功!");
DelayMS(600);
}
//========================================================================
// 语法格式: void PB_Del(PHONEBOOK *p_PB_Item)
// 实现功能: 删除当前通讯录条目
// 参数: p_PB_Item 待删除条目的指针
// 返回值: 无
//========================================================================
void PB_Del(PHONEBOOK *p_PB_Item)
{
unsigned int KeyCode;
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("◆ ");
LCD501_PrintPacked(p_PB_Item->Name);
LCD501_SetPos(16, 32);
LCD501_Print("确定删除?");
LCD501_SetPos(16, 48);
LCD501_Print("1-是 2-否");
while(1)
{
KeyCode = Key_GetCh();
switch(KeyCode)
{
case '1':
PB_Item_Del(p_PB_Item);
LCD501_ClrScreen(0);
LCD501_SetPos(16, 32);
LCD501_Print("条目已删除");
DelayMS(600);
return;
case '2': case 'n':
return;
default:
break;
}
}
}
//========================================================================
// 语法格式: void PB_Detail(PHONEBOOK *p_PB_Item)
// 实现功能: 查看当前条目的详细内容
// 参数: p_PB_Item 条目指针
// 返回值: 无
//========================================================================
void PB_Detail(PHONEBOOK *p_PB_Item)
{
unsigned int KeyCode;
unsigned int Flag_Page;
LCD501_ClrScreen(0);
Flag_Page = 1;
while(1)
{
if(Flag_Page==1) // 第一页
{
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("◆ ");
LCD501_PrintPacked(p_PB_Item->Name);
LCD501_SetPos(0,16);
LCD501_Print("T1:");
LCD501_PrintPacked(p_PB_Item->Tel_1);
LCD501_SetPos(0,32);
LCD501_Print("T2:");
LCD501_PrintPacked(p_PB_Item->Tel_2);
LCD501_SetPos(0,48);
LCD501_Print("@:");
LCD501_PrintPacked(p_PB_Item->Email);
}
else // 第二页
{
LCD501_ClrScreen(0);
LCD501_SetPos(0,0);
LCD501_Print("◆ ");
LCD501_PrintPacked(p_PB_Item->Name);
LCD501_SetPos(0,16);
LCD501_Print("@:");
if(p_PB_Item->Email[13]!='\0')
LCD501_PrintPacked(p_PB_Item->Email+13);
LCD501_SetPos(0,32);
LCD501_Print("备注:");
LCD501_PrintPacked(p_PB_Item->Other);
}
while((KeyCode=Key_GetCh())=='\0');
switch(KeyCode)
{
case 'u': case 'd': case 'y':
Flag_Page = (Flag_Page==1)?2:1;
break;
case 'n': case '*': case '#':
return;
default:
break;
}
}
}
//========================================================================
// 语法格式: void PB_ItemMenu(PHONEBOOK *p_PB_Item)
// 实现功能: 显示当前条目的可操作选项
// 参数: p_PB_Item 条目指针
// 返回值: 无
//========================================================================
const unsigned char *PB_MenuString[]={
"查看信息","编辑条目","删除条目","设定语音拨号","取消语音拨号"
};
void PB_ItemMenu(PHONEBOOK *p_PB_Item)
{
unsigned int CurItem, ItemCount;
const unsigned char *PB_MenuItem[4];
PB_MenuItem[0] = PB_MenuString[0];
PB_MenuItem[1] = PB_MenuString[1];
PB_MenuItem[2] = PB_MenuString[2];
ItemCount = 4;
if(p_PB_Item->VoiceIdx!=0xffff)
PB_MenuItem[3] = PB_MenuString[4];
else if(p_PB_Idx->Voice_Num < PB_MAX_VOICE)
PB_MenuItem[3] = PB_MenuString[3];
else
ItemCount = 3;
while(1)
{
CurItem = ShowMenu(PB_MenuItem, ItemCount);
switch(CurItem)
{
case 0: // 查看
PB_Detail(p_PB_Item);
return;
case 1: // 编辑(保留功能)
//PB_Edit(p_PB_Item);
break;
case 2: // 删除
PB_Del(p_PB_Item);
return;
case 3: // 更改语音拨号状态
if(ItemCount==4)
PB_SwitchVoice(p_PB_Item);
return;
case 4:
return;
default:
break;
}
}
}
//========================================================================
// 语法格式: void PB_List(void)
// 实现功能: 显示通讯录条目列表
// 参数: 无
// 返回值: 无
//========================================================================
void PB_List(void)
{
PHONEBOOK *p_PB_Temp, *p_PB_Page, *p_PB_Cur;
unsigned int i, TempFlag,KeyCode;
LCD501_ClrScreen(0);
p_PB_Cur = p_PB_Idx->FirstItem;
while(1)
{
/// 如果没有记录则返回
if(p_PB_Idx->ItemNum==0)
{
LCD501_SetPos(8,48);
LCD501_Print("没有任何记录!");
DelayMS(600);
return;
}
/// 跳过当前页之前的条目
p_PB_Page = p_PB_Idx->FirstItem;
while(1)
{
p_PB_Temp = p_PB_Page;
for(i=0; i<4; i++)
{
if(p_PB_Temp == p_PB_Cur)break;
p_PB_Temp = p_PB_Temp->NextItem;
}
if(i<4)break;
p_PB_Page = p_PB_Page->NextItem;
}
/// 显示一页内容
LCD501_ClrScreen(0);
p_PB_Temp = p_PB_Page;
for(i=0; i<4; i++)
{
LCD501_SetPos(0, i<<4);
if(p_PB_Temp->Flag_Del==0xffff)
break;
else if(p_PB_Temp == p_PB_Cur)
LCD501_Print("◆ ");
else
LCD501_Print(" ");
LCD501_PrintPacked(p_PB_Temp->Name);
if(p_PB_Temp->VoiceIdx!=0xffff)
{
LCD501_SetPos(120, i<<4);
LCD501_Print("*");
}
p_PB_Temp = p_PB_Temp->NextItem;
}
/// 等待按键操作
TempFlag = 1;
while(TempFlag)
{
KeyCode = Key_GetCh();
switch(KeyCode)
{
case 'u':
p_PB_Cur = p_PB_Cur->PreItem;
if(p_PB_Cur->Flag_Del==0xffff)
p_PB_Cur = p_PB_Idx->LastItem;
TempFlag = 0;
break;
case 'd':
p_PB_Cur = p_PB_Cur->NextItem;
if(p_PB_Cur->Flag_Del==0xffff)
p_PB_Cur = p_PB_Idx->FirstItem;
TempFlag = 0;
break;
case 'y': case '#':
PB_ItemMenu(p_PB_Cur);
if(p_PB_Cur->Flag_Del==0xffff) //如果条目被删除
{
p_PB_Cur = p_PB_Cur->NextItem;
if(p_PB_Cur->Flag_Del==0xffff)
p_PB_Cur = p_PB_Idx->FirstItem;
}
TempFlag = 0;
break;
case 'n': case '*':
return;
default:
break;
}
}
}
}
//========================================================================
// 语法格式: void PB_Search(void)
// 实现功能: 搜索通讯录条目
// 参数: 无
// 返回值: 无
//========================================================================
void PB_Search(void)
{
PHONEBOOK *p_PB_Temp, *p_PB_Cur, *p_PB_Page;
unsigned char Name[sizeof(p_PB_Temp->Name)], i, Flag_Temp, KeyCode;
LCD501_ClrScreen(0);
/// 提示输入搜索关键字
LCD501_SetPos(0, 0);
LCD501_Print("搜索姓名: ");
PY_GetString(Name, sizeof(p_PB_Temp->Name)-1);
p_PB_Cur = PB_Item_Search(Name, p_PB_Idx->FirstItem, 1);
while(1)
{
// 跳过指针所在页之前的部分
if(p_PB_Cur==NULL) // 如果没有找到条目则返回
{
LCD501_ClrScreen(0);
LCD501_SetPos(0,48);
LCD501_Print("没找到任何记录!");
DelayMS(600);
return;
}
p_PB_Page = PB_Item_Search(Name, p_PB_Idx->FirstItem, 1);
while(1)
{
p_PB_Temp = p_PB_Page;
for(i=0; i<4; i++)
{
if(p_PB_Temp == p_PB_Cur)break;
p_PB_Temp = PB_Item_Search(Name, p_PB_Temp->NextItem, 1);
}
if(i<4)break;
p_PB_Page = p_PB_Temp;
}
LCD501_ClrScreen(0);
/// 显示一页内容
p_PB_Temp = p_PB_Page;
for(i=0; i<4; i++)
{
LCD501_SetPos(0, i<<4);
if(p_PB_Temp==NULL)
break;
else if(p_PB_Temp == p_PB_Cur)
LCD501_Print("◆ ");
else
LCD501_Print(" ");
LCD501_PrintPacked(p_PB_Temp->Name);
if(p_PB_Temp->VoiceIdx!=0xffff)
{
LCD501_SetPos(120, i<<4);
LCD501_Print("*");
}
p_PB_Temp = PB_Item_Search(Name, p_PB_Temp->NextItem, 1);
}
/// 等待按键输入
Flag_Temp = 1;
while(Flag_Temp)
{
KeyCode = Key_GetCh();
switch(KeyCode)
{
case 'u': // 上一条
p_PB_Cur = PB_Item_Search(Name, p_PB_Cur->PreItem, 0);
if(p_PB_Cur==NULL)
p_PB_Cur = PB_Item_Search(Name, p_PB_Idx->LastItem, 0);
Flag_Temp = 0;
break;
case 'd': // 下一条
p_PB_Cur = PB_Item_Search(Name, p_PB_Cur->NextItem, 1);
if(p_PB_Cur==NULL)
p_PB_Cur = PB_Item_Search(Name, p_PB_Idx->FirstItem, 1);
Flag_Temp = 0;
break;
case 'y': case '#': // 确定
PB_ItemMenu(p_PB_Cur);
if(p_PB_Cur->Flag_Del==0xffff) //如果该条目被删除
p_PB_Cur = PB_Item_Search(Name, p_PB_Idx->FirstItem, 1);
Flag_Temp = 0;
break;
case 'n': case '*': // 取消
return;
default:
break;
}
}
}
}
//========================================================================
// 语法格式: unsigned int PB_SwitchVoice(PHONEBOOK *p_PB_Item)
// 实现功能: 切换某条目的语音拨号属性,设定/取消语音拨号
// 参数: 待处理的条目指针
// 返回值: 切换后该条目对应的语音序号,若被取消则返回0xffff
//========================================================================
unsigned int PB_SwitchVoice(PHONEBOOK *p_PB_Item)
{
PHONEBOOK_IDX PB_Idx;
unsigned int VoiceIdx, KeyCode, Flag_Temp, i;
LCD501_ClrScreen(0);
if(p_PB_Item->VoiceIdx==0xffff)
{
VoiceIdx = Voice_Train(p_PB_Item);
}
else
{
LCD501_SetPos(16, 32);
LCD501_Print("取消语音拨号? 1-是 2-否");
Flag_Temp = 1;
while(Flag_Temp != 0)
{
KeyCode = Key_GetCh();
switch(KeyCode)
{
case '1':
VoiceIdx = 0xffff;
Flag_Temp = 0;
break;
case '2': case 'n': case '*':
VoiceIdx = p_PB_Item->VoiceIdx;
Flag_Temp = 0;
break;
default:
break;
}
}
}
if(VoiceIdx==p_PB_Item->VoiceIdx) // 没有更改
return VoiceIdx;
/// 更新PB_IDX
PB_Idx.ItemNum = p_PB_Idx->ItemNum;
PB_Idx.FirstItem = p_PB_Idx->FirstItem;
PB_Idx.LastItem = p_PB_Idx->LastItem;
for(i=0; i<PB_MAX_VOICE; i++)
{
PB_Idx.Voice_PBAddr[i] = p_PB_Idx->Voice_PBAddr[i];
}
if(VoiceIdx==0xffff) // 语音拨号被取消
{
PB_Idx.Voice_Num = p_PB_Idx->Voice_Num - 1;
PB_Idx.Voice_PBAddr[p_PB_Item->VoiceIdx] = NULL;
}
else // 语音拨号被设定
{
PB_Idx.Voice_Num = p_PB_Idx->Voice_Num + 1;
PB_Idx.Voice_PBAddr[VoiceIdx] = p_PB_Item;
}
Flash_Modify((unsigned int)p_PB_Idx, (unsigned int*)&PB_Idx, sizeof(PHONEBOOK_IDX));
Flash_Modify((unsigned int)&p_PB_Item->VoiceIdx, &VoiceIdx, sizeof(unsigned int));
return VoiceIdx;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -