📄 main.c
字号:
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 + -