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

📄 main.c

📁 KEIL C上的门禁控制器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	P0=0xff;
	KEY_CS=0;
	key_in=P0;
	if(key_in!=0xff)
	{
		if(KM==1)
		{
			if(KP!=1)
			{
				KP=1;
				P0=0xff;
				KEY_CS=1;
				KC2=1;
				KEY_CS=0;
				key_in=P0;
				if(key_in!=0xff)
				{
					key=~key_in;
					KC1=0;KC2=0;
					KEY_CS=1;
					
					if(maxtrans&&(key==0x40)&&(Menu_state==Menu_top))
					{
						esc_count++;
						if(esc_count>100)
							return;
					}

					if(maxtrans&&(key!=0x40))
					{
						key=0;
						return;
					}
					
					if(!maxtrans)
					{
						if((key==0x40)&&(Menu_state==Menu_top))
						{
							esc_count++;
							if(esc_count>100)
								return;
						}
						else
						{
							esc_count=0;
							return;
						}
					}
				}
				P0=0xff;
				KEY_CS=1;	
				KC1=1;KC2=0;
				KEY_CS=0;
				key_in=P0;
				if(key_in!=0xff)
				{
					key=~key_in+0x50;
					KC1=0;KC2=0;
					KEY_CS=1;

					if(maxtrans)
					{
						key=0;
					}
					return;
				}
				KP=0;
				KM=0;
				KC1=0;KC2=0;
				KEY_CS=1;
			}
		}
		else
		{
			KM=1;
		}
	}
	else
	{
		KM=0;
		KP=0;	
	}
	KC1=0;KC2=0;
	KEY_CS=1;
}

///////////////////////////////////////////////////////////////////////////////
// 键盘按键值判断
///////////////////////////////////////////////////////////////////////////////
void key_judge()
{
	pulse=1;

	if(esc_count>100)			// 如果长按ESC
	{
		esc_count=0;
		key='X';
		return;
	}
	else
	{
		if(Menu_state!=Menu_top)
			esc_count=0;
	}

	switch(key)
	{
	case 0x01:
		key='1';
		break;
	case 0x51:
		key='2';
		break;
	case 0x52:
		key='3';
		break;
	case 0x02:
		key='4';
		break;
	case 0x04:
		key='5';
		break;
	case 0x54:
		key='6';
		break;
	case 0x08:
		key='7';
		break;
	case 0x58:
		key='8';
		break;
	case 0x60:
		key='9';
		break;
	case 0x20:
		key='0';
		break;
	case 0x70:
		key='D';
		break;
	case 0x10:
		key='U';
		break;
	case 0x80:
		key='M';
		break;
	case 0x40:
		key='C';
		break;
	case 0xd0:
		key='F';
		break;	
	default:
		break;		
	}
}

///////////////////////////////////////////////////////////////////////////////
// 键盘处理
///////////////////////////////////////////////////////////////////////////////
void key_proc()
{
	COMDISABLE;

	switch(key)
	{
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
		switch(matchmode)
		{
		case 0:
			finger_work1to1();	// 1:1指纹正常操作
			break;
		case 1:
			finger_work1ton();	// 1:N指纹正常操作
			break;
		case 2:
			groupclass=key;
			finger_work1tog();	// 1:G指纹正常操作
			break;
		default:
			break;
		}
		break;
	case 'U':
		password_normal_work();	// 密码正常操作
		break;			    	
	case 'M':
		manager_work();			// 系统管理处理
		break;
	case 'D':
	case 'F':
		break;
	default:
		break;		
	}

	COMENABLE;
}

///////////////////////////////////////////////////////////////////////////////
// 指纹1:G比对用户操作处理
///////////////////////////////////////////////////////////////////////////////
void finger_work1tog()
{
	user_pass=FALSE;
	Wait10ms();
	Wait10ms();
	if(GroupIdentify())
	{
		second=100;
		sec_flag=0;			// 保证韦根通信有足够的延时
		Set_record();
		user_pass=TRUE;		// 用户通过比对
	}
}
///////////////////////////////////////////////////////////////////////////////
// 指纹1:N比对用户操作处理
///////////////////////////////////////////////////////////////////////////////
void finger_work1ton()
{
	user_pass=FALSE;
	Wait10ms();
	Wait10ms();
	if(Identify())
	{
		second=100;
		sec_flag=0;			// 保证韦根通信有足够的延时
		Set_record();
		user_pass=TRUE;		// 用户通过比对
	}
}

///////////////////////////////////////////////////////////////////////////////
// 指纹1:1比对用户操作处理
///////////////////////////////////////////////////////////////////////////////
void finger_work1to1()
{
	user_pass=FALSE;
	ManageClass='G';
	AppClass='F';

	GLCD_ClearScreen ();
	if(input_id_proc())			// 输入用户编号
	{
		Wait10ms();
		Wait10ms();
		if(Verify())
		{
			second=100;
			sec_flag=0;			// 保证韦根通信有足够的延时
			Set_record();
			user_pass=TRUE;		// 用户通过比对
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// 密码用户操作处理
///////////////////////////////////////////////////////////////////////////////
void password_normal_work()
{
	user_pass=FALSE;
	ManageClass='G';
	AppClass='P';

	if(pass_proc())
	{
		if(Verify())
		{
			sec_flag=0;			// 保证韦根通信有足够的延时
			Set_record();
			user_pass=TRUE;		// 用户通过比对
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// 系统管理处理过程
///////////////////////////////////////////////////////////////////////////////
void manager_work()
{	
	uchar  ucManagerNum;
 
	ManageClass='M';
	AppClass='F';

	ucManagerNum=0;

	ucManagerNum = Get_manager_num();	// 获取管理员用户数目
	Menu_state=0x10;

	if(ucManagerNum > 0)	// 管理用户已注册必须通过指纹
	{
		GLCD_ClearScreen ();
		if(input_id_proc())			// 输入用户编号
		{
			Wait10ms();
			Wait10ms();

			managemode=TRUE;		// 管理操作标志

			if(!Verify())
			{
				managemode=FALSE;	// 非管理操作标志
				return;			// 管理员指纹匹配失败返回
			}
		}
		else
		{
			managemode=TRUE;		// 管理操作标志
			return;
		}
	}

	key=0;				// 无键盘输入
	Menu_process();		// 菜单处理
	sec_flag=0;			// 保证韦根通信有足够的延时

	return;				// 进入具体菜单处理
}

///////////////////////////////////////////////////////////////////////////////
// 看门狗
///////////////////////////////////////////////////////////////////////////////
void Rstwdt()
{
	WDT_CONTR=0x34;
}

///////////////////////////////////////////////////////////////////////////////
// 显示公司信息
///////////////////////////////////////////////////////////////////////////////
void DispLogo()
{
	GLCD_ClearScreen ();
	reverse=0;
	GLCD_Locate(0,16);
	dprintf("  杭州浩普信息",14);
	GLCD_Locate(0,32);
	dprintf(" www.chinahope",14);
	GLCD_Locate(0,48);
	dprintf("    .com.cn",11);
}

///////////////////////////////////////////////////////////////////////////////
// 系统参数初始化
///////////////////////////////////////////////////////////////////////////////
void ParaInit()
{
	idata uchar temp;

	DISABLE;					// 禁止中断
	Read_Para();				// 读各种设置参数
	ENABLE;						// 开启中断

	wieformat=Para_ee.Actual_para->Wiegand_format;
	if(wieformat<0 || wieformat>3)
	{
		wieformat=0x00;			// 缺省为考勤模式00bit
	}

	decaddr=Para_ee.Actual_para->Machine_addr;
	if((decaddr==0)||(decaddr==0xff))
	{
		decaddr=1;		// 缺省设备地址为1
	}

	temp=decaddr&0xF0;
	temp=temp>>4;
	haddr=Hex_ascii(temp);	// ASC设备地址高位
	temp=decaddr&0x0F;
	laddr=Hex_ascii(temp);	// ASC设备地址低位

	areaaddr=Para_ee.Actual_para->Area_addr;
	if(areaaddr>=240)
	{
		areaaddr=1;		// 缺省分组地址为1
	}

	Security_level=Para_ee.Actual_para->Secu_class;
	if(Security_level>4 || Security_level<0)
	{
		Security_level=3;		// 缺省安全等级为3
	}

	matchmode=Para_ee.Actual_para->Match_mode;
	if(matchmode>2 || matchmode<0)
	{
		matchmode=0;	// 缺省比对模式为1:1
	}

	lockmode=Para_ee.Actual_para->Lock_para;
	if(lockmode>2 || lockmode<0)
	{
		lockmode=0;		// 缺省锁控为双锁双动
	}

	baudrate=Para_ee.Actual_para->Baudrate;
	if(baudrate>5 || baudrate<0)
	{
		baudrate=1;		// 缺省波特率9600
	}
}

⌨️ 快捷键说明

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