#include<reg52.h> //头文件
#include<LCD12864.h>
#include<AT24C02.h>
#include<KEY.h>
#include<AS608.h>
#include<DS1302.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
#define ulong unsigned long
#define AT24Cxx_MAX 255//AT24Cxx最大地址
#define MAX 34 //指纹最大数量
#define ID_MAX 3 //输入ID最大位数
uchar mode=0; //0正常打卡,1管理界面,2注册模式,3删除模式,4查询模式,5修改密码,6校准时钟,7工作时间
uchar mode_num=0;
uint ID=0; //存储输入编号ID
uchar n=0; //输入的位数
bit zhiwen_f=0; //1=标记进入指纹采集
uchar chaxun_num=0;//查询编号
uchar shu;
uchar a; //存储按键值
uchar num; //记录输入的密码位数
bit in_f; //输入密码的标志
bit reset_f; //重设密码的标志
bit input_f; //六位密码按完的标志
uchar reset_num; //标记修改密码阶段,=1输入旧密码,=2输入新密码,=3再次输入新密码
ulong low_mima=0;//系统密码
ulong in_mima=0; //暂存输入的密码
ulong new_mima=0;//暂存输入新密码
uchar set_f=0;
uchar temp[5]=" \0";
uint fen[5]={0};
uchar date=0; //0今天,1昨天,2前天
uchar day[2];
/********************************************************
函数名称:jisuanshijain()
函数作用:计算打卡时间和当前时间,
参数说明:
********************************************************/
void jisuanshijain()
{
fen[0]=time[6]*60+time[7];
fen[1]=time[8]*60+time[9];
fen[2]=time[10]*60+time[11];
fen[3]=time[12]*60+time[13];
fen[4]=time[3]*60+time[4];
}
/********************************************************
函数名称:void diaplay_mode0()
函数作用:显示打卡主界面
参数说明:
********************************************************/
void diaplay_mode0()
{
LCD12864_display_string(0,1,"指纹考勤系统");
LCD12864_display_string(0,2,"编号: ");
LCD12864_display_string(0,3,"状态: ");
}
/********************************************************
函数名称:void display_chaxun()
函数作用:显示查询结果
参数说明:
********************************************************/
void display_chaxun()
{
uchar num=chaxun_num;
uchar i,j;
for(i=0;i<3;i++)
{
temp[0]=(num+1)%1000/100+0x30;
temp[1]=(num+1)%100/10+0x30;
temp[2]=(num+1)%10+0x30;
temp[3]=':';
LCD12864_display_string(0,i+2,temp);
if(AT24C02_read_date((num+1)*7)==1)
{
for(j=0;j<2;j++)
{
if(AT24C02_read_date((num+1)*7+1+date*2+j)==0)
LCD12864_display_string(j*3+2,i+2," 缺勤");
else
{
if(AT24C02_read_date((num+1)*7+1+date*2+j)==250)
LCD12864_display_string(j*3+2,i+2," 签到");
else
{
temp[0]=AT24C02_read_date((num+1)*7+1+date*2+j)/100+0x30;
temp[1]=AT24C02_read_date((num+1)*7+1+date*2+j)%100/10+0x30;
temp[2]=AT24C02_read_date((num+1)*7+1+date*2+j)%10+0x30;
temp[3]='M';
LCD12864_display_string(j*3+3,i+2,temp);
LCD12864_display_string(j*3+2,i+2,"迟");
}
}
}
}
else
{
LCD12864_display_string(2,i+2," 无效");
LCD12864_display_string(5,i+2," 无效");
}
num++;
if(num>=MAX)
num=0;
}
}
/********************************************************
函数名称:void xunka()
函数作用:查找指纹
参数说明:
********************************************************/
void xunka()
{
uint i;
searchnum=search();
if((searchnum>=1&&searchnum<=MAX)||searchnum==255)//最多是N个指纹
{
if(searchnum>=1&&searchnum<=MAX)//指纹识别成功
{
temp[0]=searchnum%1000/100+0x30;
temp[1]=searchnum%100/10+0x30;
temp[2]=searchnum%10+0x30;
temp[3]=' ';
LCD12864_display_string(3,2,temp);
jisuanshijain();
if(day[0]!=time[1]||day[1]!=time[2])
{
day[0]=time[1];
day[1]=time[2];
//LCD12864_display_string(3,3,"更新数据");
for(i=0;i<=MAX;i++)
{
AT24C02_write_date(i*7+6,AT24C02_read_date(i*7+4));
AT24C02_write_date(i*7+5,AT24C02_read_date(i*7+3));
AT24C02_write_date(i*7+4,AT24C02_read_date(i*7+2));
AT24C02_write_date(i*7+3,AT24C02_read_date(i*7+1));
if(i!=0)
{
AT24C02_write_date(i*7+2,0);
AT24C02_write_date(i*7+1,0);
}
else
{
AT24C02_write_date(2,day[1]);
AT24C02_write_date(1,day[0]);
}
}
}
for(i=0;i<2;i++)
{
if(fen[4]+20<fen[i*2])
LCD12864_display_string(3,3,"未到时间");
else
{
if(fen[4]<fen[i*2+1])
{
if(AT24C02_read_date(searchnum*7+i+1)==0)
{
if(fen[4]<fen[i*2])
{
LCD12864_display_string(3,3,"签到成功");
AT24C02_write_date(searchnum*7+i+1,250);
}
else
{
if(fen[4]-fen[i*2]>120)
LCD12864_display_string(3,3,"缺勤签到");
else
{
LCD12864_display_string(3,3,"迟到");
temp[0]=(fen[4]-fen[i*2]+1)%1000/100+0x30;
temp[1]=(fen[4]-fen[i*2]+1)%100/10+0x30;
temp[2]=(fen[4]-fen[i*2]+1)%10+0x30;
temp[3]='M';
LCD12864_display_string(5,3,temp);
AT24C02_write_date(searchnum*7+i+1,fen[4]-fen[i*2]+1);
}
}
}
else
LCD12864_display_string(3,3,"重复打卡");
i=2;
}
else
LCD12864_display_string(3,3,"时间未到");
}
}
}
else//不正确的指纹
LCD12864_display_string(3,3,"无效指纹");
delay1ms(500);
LCD12864_display_string(3,2," ");
LCD12864_display_string(3,3," ");
}
}
/********************************************************
函数名称:void cunchu()
函数作用:存储指纹
参数说明:
********************************************************/
void cunchu()
{
uchar i;
LCD12864_display_string(0,3,"状态: ");
if(ID>0&&ID<=MAX)
{
if(enroll()==1)//采集两次,生成1个指纹模板成功
{
if(savefingure(ID)==1)//保存也成功
{
LCD12864_display_string(3,3,"录入成功");
AT24C02_write_date(ID*7,1);
for(i=1;i<7;i++)
AT24C02_write_date(ID*7+i,0);
}
else
LCD12864_display_string(3,3,"存储失败");
}
else
LCD12864_display_string(3,3,"采集失败");
}
else
LCD12864_display_string(3,3,"编号错误");
n=0;
ID=0;
zhiwen_f=0;
}
/********************************************************
函数名称:void shanchu()
函数作用:删除指纹
参数说明:
********************************************************/
void shanchu()
{
uint i;
LCD12864_display_string(0,3,"状态: ");
if(ID>0&&ID<=MAX)
{
if(dellfingure(ID)==1)
{
for(i=0;i<7;i++)
AT24C02_write_date(ID*7+i,0);
LCD12864_display_string(3,3,"OK");
}
else
LCD12864_display_string(3,3,"FA");
}
else
{
if(ID==999)
{
if(Clear_All()==1)
{
for(i=0;i<7*MAX;i++)
AT24C02_write_date(7+i,0);
LCD12864_display_string(3,3,"清空指纹");
}
else
LCD12864_display_string(3,3,"清空失败");
}
else
LCD12864_display_string(3,3,"编号错误");
}
n=0;
ID=0;
zhiwen_f=0;
}
/********************************************************
函数名称:void display_guanli()
函数作用:显示管理界面
参数说明:
********************************************************/
void display_guanli()
{
LCD12864_display_string(0,1,"指纹考勤系统");
LCD12864_display_string(0,2," 注册 修改密码");
LCD12864_display_string(0,3," 注销 校准时钟");
LCD12864_display_string(0,4," 查询 工作时间");
switch(mode_num)
{
case 0: LCD12864_display_string(0,2,">>"); break;
case 1: LCD12864_display_string(0,3,">>"); break;
case 2: LCD12864_display_string(0,4,">>"); break;
case 3: LCD12864_display_string(3,2,">>"); break;
case 4: LCD12864_display_string(3,3,">>"); break;
case 5: LCD12864_display_string(3,4,">>"); break;
default: break;
}
}
/********************************************************
函数名称:void display_time()
函数作用:显示时间
参数说明:
********************************************************/
void display_time()
{
temp[0]='2';
temp[1]='0';
temp[2]=time[0]/10+0x30;
temp[3]=time[0]%10+0x30;
LCD1286
lantiandianzi
- 粉丝: 310
- 资源: 229
最新资源
- 白色简洁的汽车零件制造商企业网站模板下载.zip
- 白色简洁的旅行运动装备企业网站模板下载.zip
- 白色简洁的商务信息企业网页模板下载.zip
- 白色简洁的设计整站网站模板下载.zip
- 白色简洁的设计院网页整站网站模板下载.zip
- 白色简洁的文化传媒网页企业模板下载.zip
- 白色简洁的数码相机商城整站网站模板下载.zip
- 白色简洁的摄影杂志网站模板下载.zip
- 白色简洁风的IT科技企业网站模板下载.zip
- 白色简洁的作品展媒体整站网站模板下载.zip
- 白色简洁的艺术展示网页模板下载.zip
- 白色简洁风的个性网站模板下载.rar
- 白色简洁风的博客网站模板下载.zip
- 白色简洁风的个性企业网站模板下载.zip
- 白色简洁风的家居企业网站模板下载.rar
- 白色简洁风的商务网站模板下载.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈