?? 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 + -