📄 util.c
字号:
///////////////////////////////////////////////////////////////////////////////
//
// Hopinfo Copyright.
//
// www.chinahopeinfo.com.cn
//
// 2005.04.26
//
// 审阅:黄平生
//
// 菜单处理过程
//
///////////////////////////////////////////////////////////////////////////////
#include "Global.h"
///////////////////////////////////////////////////////////////////////////////
// 内部存储区变量 0~256
// 全局变量定义
extern struct Para
{
uchar Wiegand_format; // 1、韦根通信1 个字节,3 种选择,1~4
uchar Machine_addr; // 2、终端编号1 个字节,1~254
uchar Area_addr; // 3、终端区域编号1 个字节,1~240
uchar Secu_class; // 4、安全等级1 个字节,1~10
uchar Match_mode; // 5、匹配模式1 个字节,1~2
uchar Lock_para; // 6、锁控参数1 个字节,1~3
uchar Baudrate; // 7、串口速率1 个字节,1~6
};
extern union Para_u
{
uchar para_dat[7];
struct Para Actual_para;
}Para_ee; // 控制器参数
extern data uchar Menu_state; // 菜单当前状态
extern data uchar key; // 键盘值
extern data uchar cur_time[15]; // 系统当前时间显示存储区 XXXX年XX月XX日XX时XX分XX秒星期X
extern data uchar pulse; // 蜂鸣次数
extern data char User_id[6]; // 用户编号0~65534
extern bdata bit reverse; // LCD底色显示控制
extern bdata bit tele_alarm_on; // 布控/撤控标志
extern data uchar disp_buf[12]; // 显示临时变量
extern idata uchar areaaddr; // 分组地址
extern idata uchar laddr; // 地址低字节ASC码
extern idata uchar haddr; // 地址高字节ASC码
extern idata uchar decaddr; // 设备地址
extern idata uchar baudrate; // 波特率
extern idata char matchmode; // 匹配模式
extern idata char lockmode; // 锁控方式
extern idata char wieformat; // 韦根格式
extern idata char Security_level; // 安全等级0~4
extern idata char ManageClass; // 管理分类'M'管理用户'G'普通用户
extern idata char AppClass; // 应用分类'F'指纹用户'P'密码用户
extern idata char Password[7]; // 密码
extern idata char Start_user_id[6]; // 开始用户编号
extern idata char End_user_id[6]; // 终止用户编号
extern idata char Start_time[5]; // 开始时间
extern idata char End_time[5]; // 终止时间
extern xdata char tele_code[12]; // 报警电话号码
///////////////////////////////////////////////////////////////////////////////
// 程序存储区变量 0~32K
code char
week[7][2]= // 星期显示
{"日","一","二","三","四","五","六"};
// 局部功能函数
void Set_cur_time_proc(); // 设置系统时间
void set_wie_proc(); // 设置韦根
void set_addr_proc(); // 设置地址
void set_level_proc(); // 设置安全等级
void set_match_proc(); // 设置比对模式
void set_lock_proc(); // 设置锁控模式
void erase_proc(); // 清数据库
void sysstate_proc(); // 显示系统状态
void manage_reg_proc(); // 注册管理员
void fp_reg_proc(); // 注册用户
void code_reg_proc(); // 密码注册
void delete_proc(); // 删除用户
void enter_proc(); // 设置用户进入条件
void tele_reg(); // 注册报警电话
void tele_del(); // 清除报警电话
bit input_party_proc(); // 输入分组编号
bit set_enter_time_proc(); // 出入时间
bit code_proc(); // 密码用户注册输入处理
bit id_proc(char *id); // 用户编号合法性检查
bit id_cmp(char *str1, char *str2); // 比较字符串
void id_add(char *id); // 按数据增加字符串
///////////////////////////////////////////////////////////////////////////////
// 菜单处理程序
///////////////////////////////////////////////////////////////////////////////
void Menu_process()
{
idata uchar i;
do
{
switch(Menu_state)
{
//1、系统管理
case Menu_system:
switch(key)
{
case 'U':
Menu_state=Menu_para; // 参数管理
break;
case 'D':
Menu_state=Menu_user; // 用户管理
break;
case 'F':
Menu_state=set_cur_time; // 进入系统管理
break;
case 'C':
Menu_state=Menu_top;
break;
default:break;
}
break;
//2、用户管理
case Menu_user:
switch(key)
{
case 'U':
Menu_state=Menu_system; // 系统管理
break;
case 'D':
Menu_state=Menu_para; // 参数管理
break;
case 'F':
Menu_state=user_enroll; // 用户管理
break;
case 'C':
Menu_state=Menu_top;
break;
default:break;
}
break;
//3、参数管理
case Menu_para:
switch(key)
{
case 'U':
Menu_state=Menu_user; // 用户管理
break;
case 'D':
Menu_state=Menu_system; // 系统管理
break;
case 'F':
Menu_state=set_wie; // 参数管理
break;
case 'C':
Menu_state=Menu_top;
break;
default:break;
}
break;
//系统管理
//1、设置系统时间
case set_cur_time:
switch(key)
{
case 'U':
Menu_state=erase_data; // 清空数据库
break;
case 'D':
Menu_state=set_match; // 比对模式
break;
case 'F':
Set_cur_time_proc(); // 设置系统时间
break;
case 'C':
Menu_state=Menu_system; // 返回系统管理菜单
break;
default:break;
}
break;
//2、设置匹配方式
case set_match:
switch(key)
{
case 'U':
Menu_state=set_cur_time; // 设置系统时间
break;
case 'D':
Menu_state=set_level; // 设置安全等级
break;
case 'F':
set_match_proc(); // 匹配模式处理
break;
case 'C':
Menu_state=Menu_system; // 返回系统管理菜单
break;
default:break;
}
break;
//3、设置安全等级
case set_level:
switch(key)
{
case 'U':
Menu_state=set_match; // 设置匹配方式
break;
case 'D':
Menu_state=erase_data; // 清空数据库
break;
case 'F':
set_level_proc(); // 设置安全等级
break;
case 'C':
Menu_state=Menu_system; // 返回系统管理菜单
break;
default:break;
}
break;
//4、清空数据库
case erase_data:
switch(key)
{
case 'U':
Menu_state=set_level; // 设置安全等级
break;
case 'D':
Menu_state=set_cur_time; // 设置系统时间
break;
case 'F':
erase_proc(); // 清空数据库
break;
case 'C':
Menu_state=Menu_system; // 返回系统管理菜单
break;
default:break;
}
break;
//用户管理
//1、注册用户
case user_enroll:
switch(key)
{
case 'U':
Menu_state=enter_control; // 出入控制
break;
case 'D':
Menu_state=user_delete; // 删除用户
break;
case 'F':
Menu_state=user_reg; // 普通用户注册
break;
case 'C':
Menu_state=Menu_user; // 返回用户管理菜单
break;
default:break;
}
break;
//2、删除用户
case user_delete:
switch(key)
{
case 'U':
Menu_state=user_enroll; // 用户注册
break;
case 'D':
Menu_state=enter_control; // 出入控制
break;
case 'F':
delete_proc(); // 删除单个用户
break;
case 'C':
Menu_state=Menu_user; // 返回用户管理菜单
break;
default:break;
}
break;
//3、出入控制
case enter_control:
switch(key)
{
case 'U':
Menu_state=user_delete; // 删除用户
break;
case 'D':
Menu_state=user_enroll; // 用户注册
break;
case 'F':
enter_proc(); // 设置单个用户
break;
case 'C':
Menu_state=Menu_user; // 返回用户管理菜单
break;
default:break;
}
break;
//用户注册
//1、1管理员注册
case manager_reg:
switch(key)
{
case 'U':
Menu_state=code_reg; // 密码用户注册
break;
case 'D':
Menu_state=user_reg; // 指纹用户注册
break;
case 'F':
manage_reg_proc(); // 管理员注册
break;
case 'C':
Menu_state=user_enroll; // 返回注册用户菜单
break;
default:break;
}
break;
//1、2指纹用户注册
case user_reg:
switch(key)
{
case 'U':
Menu_state=manager_reg; // 管理员注册
break;
case 'D':
Menu_state=code_reg; // 密码用户注册
break;
case 'F':
fp_reg_proc(); // 指纹用户注册
break;
case 'C':
Menu_state=user_enroll; // 返回注册用户菜单
break;
default:break;
}
break;
//1、3密码用户注册
case code_reg:
switch(key)
{
case 'U':
Menu_state=user_reg; // 指纹用户注册
break;
case 'D':
Menu_state=manager_reg; // 管理员注册
break;
case 'F':
code_reg_proc(); // 密码注册
break;
case 'C':
Menu_state=user_enroll; // 返回注册用户菜单
break;
default:break;
}
break;
//参数管理
//1、设置韦根通信格式
case set_wie:
switch(key)
{
case 'U':
Menu_state=set_alarm; // 设置报警参数
break;
case 'D':
Menu_state=set_addr; // 设置终端地址
break;
case 'F':
set_wie_proc(); // 设置韦根通信格式
break;
case 'C':
Menu_state=Menu_para; // 返回参数管理菜单
break;
default:break;
}
break;
//2、设置终端地址
case set_addr:
switch(key)
{
case 'U':
Menu_state=set_wie; // 设置韦根通信格式
break;
case 'D':
Menu_state=set_lock; // 设置锁控参数
break;
case 'F':
set_addr_proc(); // 设置终端地址
break;
case 'C':
Menu_state=Menu_para; // 返回参数管理菜单
break;
default:break;
}
break;
//3、设置锁控参数
case set_lock:
switch(key)
{
case 'U':
Menu_state=set_addr; // 设置终端地址
break;
case 'D':
Menu_state=set_alarm; // 设置报警参数
break;
case 'F':
if(wieformat==1) // 自定义门禁方式
set_lock_proc(); // 设置锁控参数
break;
case 'C':
Menu_state=Menu_para; // 返回参数管理菜单
break;
default:break;
}
break;
//4、设置报警参数
case set_alarm:
switch(key)
{
case 'U':
Menu_state=set_lock; // 设置锁控参数
break;
case 'D':
Menu_state=set_wie; // 设置韦根通信格式
break;
case 'F':
if(wieformat==1) // 自定义门禁方式
Menu_state=enroll_tele; // 电话号码管理
break;
case 'C':
Menu_state=Menu_para; // 返回参数管理菜单
break;
default:break;
}
break;
//4、设置报警参数
//4、1注册报警电话号码
case enroll_tele:
switch(key)
{
case 'U':
Menu_state=tele_on_off; // 布控/撤控
break;
case 'D':
Menu_state=delete_tele; // 删除电话号码
break;
case 'F':
tele_reg(); // 电话号码注册管理
break;
case 'C':
Menu_state=set_alarm; // 返回报警参数菜单
break;
default:break;
}
break;
//4、2清除报警电话号码
case delete_tele:
switch(key)
{
case 'U':
Menu_state=enroll_tele; // 注册电话号码
break;
case 'D':
Menu_state=tele_on_off; // 布控/撤控
break;
case 'F':
tele_del(); // 删除电话号码
break;
case 'C':
Menu_state=set_alarm; // 返回报警参数菜单
break;
default:break;
}
break;
//4、3报警电话布控/撤控
case tele_on_off:
switch(key)
{
case 'U':
Menu_state=delete_tele; // 删除电话号码
break;
case 'D':
Menu_state=enroll_tele; // 注册电话号码
break;
case 'F':
if(tele_alarm_on)
{
tele_alarm_on=FALSE; // 撤控
for(i=0;i<10;i++)
Wait10ms();
tele_alarm_off();
for(i=0;i<10;i++)
Wait10ms();
tele_alarm_off();
}
else
{
tele_alarm_on=TRUE; // 布控
for(i=0;i<10;i++)
Wait10ms();
tele_alarm();
for(i=0;i<10;i++)
Wait10ms();
tele_alarm();
}
break;
case 'C':
Menu_state=set_alarm; // 返回报警参数菜单
break;
default:break;
}
break;
//系统顶层菜单
case Menu_top:
return;
default:break;
}
// 菜单管理
switch(Menu_state) // 显示菜单信息
{
case Menu_top:
disptime(); // 待机画面显示时间
break;
case Menu_system:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("主菜单",6);
GLCD_Locate(16,16);
reverse=1; // 背景停留
dprintf("·系统管理 ",10);
GLCD_Locate(16,32);
reverse=0;
dprintf("·用户管理 ",10);
GLCD_Locate(16,48);
dprintf("·参数管理 ",10);
reverse=0;
break;
case Menu_user:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("主菜单",6);
GLCD_Locate(16,16);
dprintf("·系统管理 ",10);
GLCD_Locate(16,32);
reverse=1; // 背景停留
dprintf("·用户管理 ",10);
GLCD_Locate(16,48);
reverse=0;
dprintf("·参数管理 ",10);
reverse=0;
break;
case Menu_para:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("主菜单",6);
GLCD_Locate(16,16);
dprintf("·系统管理 ",10);
GLCD_Locate(16,32);
dprintf("·用户管理 ",10);
GLCD_Locate(16,48);
reverse=1; // 背景停留
dprintf("·参数管理 ",10);
reverse=0;
break;
// 系统管理子项选择
case set_cur_time:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("系统管理",8);
GLCD_Locate(16,16);
reverse=1;
dprintf("·时间设置 ",10);
GLCD_Locate(16,32);
reverse=0;
dprintf("·比对模式 ",10);
GLCD_Locate(16,48);
dprintf("·安全等级 ",10);
reverse=0;
break;
case set_match:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("系统管理",8);
GLCD_Locate(16,16);
dprintf("·时间设置 ",10);
reverse=1;
GLCD_Locate(16,32);
dprintf("·比对模式 ",10);
GLCD_Locate(16,48);
reverse=0;
dprintf("·安全等级 ",10);
reverse=0;
break;
case set_level:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("系统管理",8);
GLCD_Locate(16,16);
dprintf("·时间设置 ",10);
GLCD_Locate(16,32);
dprintf("·比对模式 ",10);
GLCD_Locate(16,48);
reverse=1;
dprintf("·安全等级 ",10);
reverse=0;
break;
case erase_data:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("系统管理",8);
GLCD_Locate(16,16);
dprintf("·比对模式 ",10);
GLCD_Locate(16,32);
dprintf("·安全等级 ",10);
GLCD_Locate(16,48);
reverse=1;
dprintf("·清数据库 ",10);
reverse=0;
break;
// 用户管理选择子项
case user_enroll:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("用户管理",8);
GLCD_Locate(16,16);
reverse=1;
dprintf("·注册用户 ",10);
GLCD_Locate(16,32);
reverse=0;
dprintf("·删除用户 ",10);
GLCD_Locate(16,48);
dprintf("·出入管理 ",10);
reverse=0;
break;
case user_delete:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("用户管理",8);
GLCD_Locate(16,16);
dprintf("·注册用户 ",10);
GLCD_Locate(16,32);
reverse=1;
dprintf("·删除用户 ",10);
GLCD_Locate(16,48);
reverse=0;
dprintf("·出入管理 ",10);
reverse=0;
break;
case enter_control:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("用户管理",8);
GLCD_Locate(16,16);
dprintf("·注册用户 ",10);
GLCD_Locate(16,32);
dprintf("·删除用户 ",10);
GLCD_Locate(16,48);
reverse=1;
dprintf("·出入管理 ",10);
reverse=0;
break;
// 注册用户子项
case user_reg:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("注册用户",8);
GLCD_Locate(16,16);
reverse=1;
dprintf("·指纹用户 ",10);
reverse=0;
GLCD_Locate(16,32);
dprintf("·密码用户 ",10);
GLCD_Locate(16,48);
dprintf("·管理用户 ",10);
reverse=0;
break;
case code_reg:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("注册用户",8);
GLCD_Locate(16,16);
dprintf("·指纹用户 ",10);
reverse=1;
GLCD_Locate(16,32);
dprintf("·密码用户 ",10);
GLCD_Locate(16,48);
reverse=0;
dprintf("·管理用户 ",10);
reverse=0;
break;
case manager_reg:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("注册用户",8);
GLCD_Locate(16,16);
dprintf("·指纹用户 ",10);
GLCD_Locate(16,32);
dprintf("·密码用户 ",10);
reverse=1;
GLCD_Locate(16,48);
dprintf("·管理用户 ",10);
reverse=0;
break;
// 参数管理
case set_wie:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("参数管理",8);
GLCD_Locate(16,16);
reverse=1;
dprintf("·韦根参数 ",10);
GLCD_Locate(16,32);
reverse=0;
dprintf("·通信参数 ",10);
GLCD_Locate(16,48);
dprintf("·锁控模式 ",10);
reverse=0;
break;
case set_addr:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("参数管理",8);
GLCD_Locate(16,16);
dprintf("·韦根参数 ",10);
GLCD_Locate(16,32);
reverse=1;
dprintf("·通信参数 ",10);
reverse=0;
GLCD_Locate(16,48);
dprintf("·锁控模式 ",10);
reverse=0;
break;
case set_lock:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("参数管理",8);
GLCD_Locate(16,16);
dprintf("·韦根参数 ",10);
GLCD_Locate(16,32);
dprintf("·通信参数 ",10);
GLCD_Locate(16,48);
reverse=1;
dprintf("·锁控模式 ",10);
reverse=0;
break;
case set_alarm:
GLCD_ClearScreen ();
GLCD_Locate(0,0);
reverse=0;
dprintf("参数管理",8);
GLCD_Locate(16,16);
dprintf("·通信参数 ",10);
GLCD_Locate(16,32);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -