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

📄 util.c

📁 KEIL C上的门禁控制器源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
				return ERROR;
			}
		}
	
		for(i=0; i<6; i++)
		{
			disp_buf[i]='0';
		}
		disp_buf[5]=0;
	
		while(1)
		{
			reverse=1;
			GLCD_Locate(80,48);
			dprintf(disp_buf,5);
	
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();
	
			if((key>=0x30) && (key<=0x39))
			{
				disp_buf[0]=disp_buf[1];
				disp_buf[1]=disp_buf[2];
				disp_buf[2]=disp_buf[3];
				disp_buf[3]=disp_buf[4];
				disp_buf[4]=key;
				disp_buf[5]=0x00;
			}
	
			if(key=='F')
			{
				if(id_proc(disp_buf))
				{
					for(i=0; i<5; i++)	End_user_id[i]=disp_buf[i];
					reverse=0;
					GLCD_Locate(80,48);
					dprintf(disp_buf,5);
					break;
				}
				else
					pulse=3;
			}
	
			if(key=='C')
			{
				reverse=0;
				return ERROR;
			}
		}
	
		if(strcmp(Start_user_id, End_user_id)>0)
		{
			flag=TRUE;
			reverse=0;
			pulse=3;
		}
	}while(flag);

	reverse=0;
	return OK;
}	

///////////////////////////////////////////////////////////////////////////////
// 设置出入条件时间信息
///////////////////////////////////////////////////////////////////////////////
bit set_enter_time_proc()
{
	idata uint temp, temps, tempe;
	bdata bit  flag;

	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("出入时间设置",12);

	GLCD_Locate(0,32);
	dprintf("开始时间:  :  ",15);
	GLCD_Locate(0,48);
	dprintf("终止时间:  :  ",15);

	reverse=1;
	GLCD_Locate(80,32);
	dprintf("00",2);
	reverse=0;
	GLCD_Locate(104,32);
	dprintf("00",2);

	GLCD_Locate(80,48);
	dprintf("23",2);
	GLCD_Locate(104,48);
	dprintf("59",2);

	disp_buf[0]='0';
	disp_buf[1]='0';
	disp_buf[2]=0x00;

	do
	{
		flag=0;
		while(1)
		{
			reverse=1;
			GLCD_Locate(80,32);
			dprintf(disp_buf,2);
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();
	
			if((key>=0x30) && (key<=0x39))
			{
				disp_buf[0]=disp_buf[1];
				disp_buf[1]=key;
				disp_buf[2]=0x00;
			}
	
			if(key=='F')
			{
				temp=(disp_buf[0]-0x30)*10+(disp_buf[1]-0x30);
	
				if(temp<=23)
				{
					Start_time[0]=disp_buf[0];
					Start_time[1]=disp_buf[1];
					reverse=0;
					GLCD_Locate(80,32);
					dprintf(disp_buf,2);
					break;
				}
				else
					pulse=3;
			}
	
			if(key=='C')
			{
				reverse=0;
				return ERROR;
			}
		}
	
		disp_buf[0]='0';
		disp_buf[1]='0';
		disp_buf[2]=0x00;
	
		while(1)
		{
			reverse=1;
			GLCD_Locate(104,32);
			dprintf(disp_buf,2);
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();
	
			if((key>=0x30) && (key<=0x39))
			{
				disp_buf[0]=disp_buf[1];
				disp_buf[1]=key;
				disp_buf[2]=0x00;
			}
	
			if(key=='F')
			{
				temp=(disp_buf[0]-0x30)*10+(disp_buf[1]-0x30);
	
				if(temp<=59)
				{
					Start_time[2]=disp_buf[0];
					Start_time[3]=disp_buf[1];
					reverse=0;
					GLCD_Locate(104,32);
					dprintf(disp_buf,2);
					break;
				}
				else
					pulse=3;
			}
	
			if(key=='C')
			{
				reverse=0;
				return ERROR;
			}
		}
	
		disp_buf[0]='2';
		disp_buf[1]='3';
		disp_buf[2]=0x00;
	
		while(1)
		{
			reverse=1;
			GLCD_Locate(80,48);
			dprintf(disp_buf,2);
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();
	
			if((key>=0x30) && (key<=0x39))
			{
				disp_buf[0]=disp_buf[1];
				disp_buf[1]=key;
				disp_buf[2]=0x00;
			}
	
			if(key=='F')
			{
				temp=(disp_buf[0]-0x30)*10+(disp_buf[1]-0x30);
	
				if(temp<=23)
				{
					End_time[0]=disp_buf[0];
					End_time[1]=disp_buf[1];
					reverse=0;
					GLCD_Locate(80,48);
					dprintf(disp_buf,2);
					break;
				}
				else
				{
					pulse=3;
				}
			}
	
			if(key=='C')
			{
				reverse=0;
				return ERROR;
			}
		}
	
		disp_buf[0]='5';
		disp_buf[1]='9';
		disp_buf[2]=0x00;
	
		while(1)
		{
			reverse=1;
			GLCD_Locate(104,48);
			dprintf(disp_buf,2);
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();
	
			if((key>=0x30) && (key<=0x39))
			{
				disp_buf[0]=disp_buf[1];
				disp_buf[1]=key;
				disp_buf[2]=0x00;
			}
	
			if(key=='F')
			{
				temp=(disp_buf[0]-0x30)*10+(disp_buf[1]-0x30);
	
				if(temp<=59)
				{
					End_time[2]=disp_buf[0];
					End_time[3]=disp_buf[1];
					reverse=0;
					GLCD_Locate(104,48);
					dprintf(disp_buf,2);
					break;
				}
				else
				{
					pulse=3;
				}
				break;
			}
	
			if(key=='C')
			{
				reverse=0;
				return ERROR;
			}
		}
	
		temp=(Start_time[0]-0x30)*10 + (Start_time[1]-0x30);
		temps=temp*60;
		temp=(Start_time[2]-0x30)*10 + (Start_time[3]-0x30);
		temps+=temp;
	
		temp=(End_time[0]-0x30)*10 + (End_time[1]-0x30);
		tempe=temp*60;
		temp=(End_time[2]-0x30)*10 + (End_time[3]-0x30);
		tempe+=temp;
	
		if(tempe <= temps)
		{
			reverse=0;
			flag=1;
		}
	}while(flag);

	reverse=0;
	return OK;
}		

///////////////////////////////////////////////////////////////////////////////
// 显示待机时间
///////////////////////////////////////////////////////////////////////////////
void disptime()
{
	read_time();		// 读取系统时间

	GLCD_ClearScreen ();	
	GLCD_Locate(24,16);
	reverse=0;
	LcdPutDigit(cur_time[8]);		// 时
	GLCD_Locate(40,16);
	LcdPutDigit(cur_time[9]);		// 分
	GLCD_Locate(56,16);

	LcdPutDigit(10+0x30);

	GLCD_Locate(72,16);
	LcdPutDigit(cur_time[10]);
	GLCD_Locate(88,16);
	LcdPutDigit(cur_time[11]);

	disp_buf[0]=cur_time[0];
	disp_buf[1]=cur_time[1];
	disp_buf[2]=cur_time[2];
	disp_buf[3]=cur_time[3];

	disp_buf[4]='/';
	disp_buf[5]=cur_time[4];
	disp_buf[6]=cur_time[5];
	disp_buf[7]='/';
	disp_buf[8]=cur_time[6];
	disp_buf[9]=cur_time[7];
	disp_buf[10]=0x00;
	GLCD_Locate(16,48);
	dprintf(disp_buf,10);

	GLCD_Locate(96,48);
	dprintf(week[cur_time[14]-0x30],2);
	GLCD_Locate(112,48);
	dprintf(" ",1);
}

///////////////////////////////////////////////////////////////////////////////
// 检查USER_ID的合法性
///////////////////////////////////////////////////////////////////////////////
bit id_proc(char *id)
{
	if(id[0]>'6')return ERROR;		// 非法
	if(id[0]<'6')return OK;		// 合法

	if(id[0]=='6')
	{
		if(id[1]>'5')return ERROR;	// 非法
		if(id[1]<'5')return OK;

		if(id[1]=='5')
		{
			if(id[2]>'5')return ERROR;
			if(id[2]<'5')return OK;

			if(id[2]=='5')
			{
				if(id[3]>'3')return ERROR;
				if(id[3]<'3')return OK;

				if(id[3]=='3')
				{
					if(id[4]>'4')return ERROR;
					else return OK;
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// 增加字符串,按照数据增加方式进行
///////////////////////////////////////////////////////////////////////////////
void id_add(char *id)
{
	id[4]=id[4]+1;
	if(id[4]>'9')
	{
		id[4]='0';
		id[3]=id[3]+1;
	}
	if(id[3]>'9')
	{
		id[3]='0';
		id[2]=id[2]+1;
	}
	if(id[2]>'9')
	{
		id[2]='0';
		id[1]=id[1]+1;
	}
	if(id[1]>'9')
	{
		id[1]='0';
		id[0]=id[0]+1;
	}
}

///////////////////////////////////////////////////////////////////////////////
// 将字符串转换为整数
///////////////////////////////////////////////////////////////////////////////
uint asctoint(char *str)
{
	idata uchar i;
	idata uchar j;
	idata uchar k;
	idata uint  temp;
	idata uint  temp1;

	temp=str[4]-0x30;			// 个
	
	temp1=(str[3]-0x30)*10;		// 十
	temp=temp+temp1;

	temp1=(str[2]-0x30)*100;	// 千
	temp=temp+temp1;

	temp1=0;
	for(i='0';i<str[1]; i++)	// 千
	{
		for(j=0;j<=9;j++)
			temp1=temp1+100;
	}
	temp=temp+temp1;

	temp1=0;
	for(i='0';i<str[0]; i++)	// 万
	{
		for(j=0;j<=9;j++)
		{
			for(k=0;k<=9;k++)
				temp1=temp1+100;
		}
	}
	temp=temp+temp1;

	return temp;
}

///////////////////////////////////////////////////////////////////////////////
// 注册管理员,指纹注册
///////////////////////////////////////////////////////////////////////////////
void manage_reg_proc()
{
	ManageClass='M';			// 管理员
	AppClass='F';				// 指纹用户 
	
	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("注册管理用户",12);
	reverse=0;

	if(input_id_proc())
	{
		GLCD_ClearScreen ();
		GLCD_Locate(0,0);
		reverse=0;
		dprintf("注册管理用户",12);
		reverse=0;

		Enroll();
	}
}

///////////////////////////////////////////////////////////////////////////////
// 注册指纹用户
///////////////////////////////////////////////////////////////////////////////
void fp_reg_proc()
{
	ManageClass='G';			// 普通用户
	AppClass='F';				// 指纹用户 
	
	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("注册指纹用户",12);

	if(input_id_proc())
	{
		GLCD_ClearScreen ();
		GLCD_Locate(0,0);
		reverse=0;
		dprintf("注册指纹用户",12);

		Enroll();
	}
}

///////////////////////////////////////////////////////////////////////////////
// 密码用户注册
///////////////////////////////////////////////////////////////////////////////
void code_reg_proc()
{
	ManageClass='G';			// 管理员
	AppClass='P';				// 密码用户 

	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("注册密码用户",12);

	if(code_proc())
	{
		GLCD_ClearScreen ();
		GLCD_Locate(0,0);
		reverse=0;
		dprintf("注册密码用户",12);

		Enroll();
	}
}

///////////////////////////////////////////////////////////////////////////////
// 删除单个用户
///////////////////////////////////////////////////////////////////////////////
void delete_proc()
{
	idata uchar i;

	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("删除用户",8);

	if(input_party_proc())
	{
		GLCD_ClearScreen ();
		GLCD_Locate(0,0);
		reverse=0;
		dprintf("删除用户",8);
		GLCD_Locate(32,32);
		dprintf("确定吗?",8);

		while(1)
		{
			key=0;
			do{}while(!key);		// 读键盘
			key_judge();

			if(key=='F') break;		// 确定
			if(key=='C') return;	// 退出
		}

		GLCD_Locate(32,32);
		dprintf("稍等....",8);

		for(i=0;i<5;i++)
			User_id[i]=Start_user_id[i];

		i=0;
		GLCD_Locate(32,48);
		dprintf(User_id,5);

		while(strcmp(User_id, End_user_id)<=0)
		{
			if(i>100)
			{
				i=0;

				GLCD_ClearScreen ();
				GLCD_Locate(0,0);
				dprintf("删除用户",8);
				GLCD_Locate(32,32);
				dprintf("稍等....",8);
				GLCD_Locate(32,48);
				dprintf(User_id,5);
			}

			i++;

			Delete_one();		// 合法用户分组编号
			id_add(User_id);
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// 逐个设置用户出入条件
///////////////////////////////////////////////////////////////////////////////
void enter_proc()
{
	idata uchar i;

	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("出入时间设置",12);

	if(input_party_proc())
	{
		if(set_enter_time_proc())
		{
			GLCD_ClearScreen ();
			GLCD_Locate(0,0);
			reverse=0;
			dprintf("出入时间设置",12);

			GLCD_Locate(32,32);
			dprintf("稍等....",8);

			for(i=0;i<5;i++)
			{
				User_id[i]=Start_user_id[i];
			}

			i=0;
			GLCD_Locate(32,48);
			dprintf(User_id,5);

			while(strcmp(User_id, End_user_id)<=0)
			{
				if(i>100)
				{
					i=0;

					GLCD_ClearScreen ();
					GLCD_Locate(0,0);
					dprintf("出入时间设置",12);
					GLCD_Locate(32,32);
					dprintf("稍等....",8);
					GLCD_Locate(32,48);
					dprintf(User_id,5);
				}

				i++;

				One_enter();		// 合法分组输入,合法进入条件
				Wait10ms();
				Wait10ms();
				id_add(User_id);
			}
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// 清空数据库
///////////////////////////////////////////////////////////////////////////////
void erase_proc()
{
	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("清数据库",8);

	GLCD_Locate(32,32);
	dprintf("确定吗?",8);

	while(1)
	{
		key=0;
		do{}while(!key);		// 读键盘
		key_judge();

		if(key=='F') break;		// 确定
		if(key=='C') return;	// 退出
	}

	GLCD_Locate(32,32);
	dprintf("稍等....",8);

	Erase_user();
}

///////////////////////////////////////////////////////////////////////////////
// 清报警电话
///////////////////////////////////////////////////////////////////////////////
void tele_reg()
{
	idata uchar i, j;

	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("注册报警话号",12);
	GLCD_Locate(0,32);
	dprintf("话号:",6);
	reverse=1;
	GLCD_Locate(16,48);
	dprintf("           ",11);

	for(i=0;i<12;i++)
		tele_code[i]='F';		// 原始电话号码
	for(i=0;i<12;i++)
		disp_buf[i]=' ';

	while(1)
	{
		reverse=1;
		GLCD_Locate(16,48);
		dprintf(disp_buf,11);

		key=0;
		do{}while(!key);		// 读键盘
		key_judge();

		if((key>=0x30) && (key<=0x39))
		{
			disp_buf[0]=disp_buf[1];
			disp_buf[1]=disp_buf[2];
			disp_buf[2]=disp_buf[3];
			disp_buf[3]=disp_buf[4];
			disp_buf[4]=disp_buf[5];
			disp_buf[5]=disp_buf[6];
			disp_buf[6]=disp_buf[7];
			disp_buf[7]=disp_buf[8];
			disp_buf[8]=disp_buf[9];
			disp_buf[9]=disp_buf[10];
			disp_buf[10]=key;
			disp_buf[11]=0x00;
		}

		if(key=='F')
		{
			if((disp_buf[3]==' ')&&(disp_buf[4]==' '))
			{
				pulse=3;			// 电话号码不足7位
			}
			else
			{
				j=0;
				for(i=0;i<11;i++)
				{
					if(disp_buf[i]!=' ')
					{
						tele_code[j++]=disp_buf[i];		// 获取电话号码
					}
				}

				break;
			}
		}

		if(key=='C')
		{
			reverse=0;
			return;
		}
	}

	if(wieformat==1)	// 自定义门禁方式
		reg_tele();		// 注册报警话号
}

///////////////////////////////////////////////////////////////////////////////
// 清报警电话
///////////////////////////////////////////////////////////////////////////////
void tele_del()
{
	GLCD_ClearScreen ();
	GLCD_Locate(0,0);
	reverse=0;
	dprintf("清报警话号",10);

	GLCD_Locate(32,32);
	dprintf("确定吗?",8);

	while(1)
	{
		key=0;
		do{}while(!key);		// 读键盘
		key_judge();

		if(key=='F') break;		// 确定
		if(key=='C') return;	// 退出
	}

	if(wieformat==1)	// 自定义门禁方式
		erase_tele();	// 清空所有报警话号
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -