⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 KEIL C上的门禁控制器源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
///////////////////////////////////////////////////////////////////////////////
//
// 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 + -