历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2019年12月19日 | 基于51单片机的指纹考勤机源程序

2019-12-19 来源:51hei

基于51单片机的指纹考勤机电路原理图如下:
 

Altium Designer画的原理图和PCB图如下:
 

元件清单
1)    9*15万用板
2)    指纹传感器
3)    40脚座
4)    单片机
5)    12864有字库液晶
6)    20p插针
7)    20p单排母座
8)    按键*17
9)    103电位器(蓝白)
10)    1k电阻*3
11)    10k电阻*1
12)    10uf电容
13)    30pf电容*2
14)    11.0592m晶振
15)    AMS1117
16)    100Uf*2
17)    自锁开关
18)    DC电源接口
19)    导线若干
20)    焊锡若干
21)    usb电源线

指纹模块、按键的调试
然后导入本设计的程序,测试指纹模块及按键是否工作,操作步骤为:
1)按下电源,电源指示灯点亮。
2)按“*”键后屏幕显示“请按指纹”,指纹模块亮,将手指放到指纹头处就可以识别指纹了。
3)若放入的指纹,指纹识别成功继电器动作,LED灯亮,门开锁,人员可以进入,按任意键返回初始界面,等待下一个人扫描指纹。若放入的指纹,指纹没有识别成功,继电器没有动作,LED灯不亮,将不能开锁,人员不能进入,按任意键返回初始界面,继续扫描指纹。
4)按下A按键,输入6位密码,按下B按键,可删除输入的数字,按下D按键确认,密码输入正确可进入管理员模式。
5)在管理员模式下,按数字键“1”进入录入指纹模式,指纹头亮起,这时就可以把手指放到指纹头上进行指纹的录入,录入指纹时需要录入2次指纹来完成这个指纹的录入存储,指纹录入成功后按任意键返回到管理员界面,如需再录入指纹重复上面操作即可。
6)按数字键“2”进入删除指纹模式,屏幕提示如下图所示信息,输入要删除指定的指纹号按“D”键确认,若指纹号输入错误可按“B”键删除,再重新输入要删除的指纹号即可。
7)在非正常情况下(指纹模块不好用或紧急情况)可按数字键“3”进行开锁。
8)按数字键“4”可进行管理员密码的修改。
如果以上步骤不符合要求则重新检查程序,直到实物可以正常工作。
如满足上述要求时,实物就算调试完成,达到设计要求。

小灯、继电器的调试
首先按下电源,看电源指示灯是否点亮,证明电源电路正常。然后测试单片机是否正常工作,在Keil上编写了一段红绿小灯以一秒间隔闪烁的程序,导入单片机,上电后发现小灯按照我所要求的方式工作,证明单片机及小灯工作正常。再加一条与继电器连接引脚电平高低变化的程序检测继电器是否正常工作。

液晶的调试
导入12864液晶的测试程序,上电后,通过调节液晶屏背面的电位器调节12864的对比度,在调试液晶时要注意:屏上显示小方格,产生原因:程序中对液晶初始化不正常,应是部分初始化指令没有正常接收,按照标准初始化步骤调整程序,或者调整指令之间的延时(加大一些试试)--补充:也有可能是对比度太大,需要调整对比度电阻。
在经调试后液晶的结果为:
 

单片机源程序如下:

#include"reg52.h"

#include"12864.h"

#include"eeprom.h"

#include"matrixkey.h"

#include"AT24CXX.h"

#include"finger.h"

uchar code table1[]="A:签到  B:添加  ";

uchar code table2[]="C:清空  D:上课  ";

uchar code table3[]=" *查询缺勤人员  ";

uchar code table4[]=" #查询迟到人员  ";

uchar code table5[]="请输入删去密码: ";


uchar code table6[]="    开始签到    ";

uchar code table7[]="  请按指纹签到  ";

uchar code table8[]="               ";

uchar code table9[]="按D:  开始上课  ";

uchar code table10[]="请输入密码:     ";

uchar code table11[]="    签到成功    ";

uchar code table12[]="请按任意按键继续";

uchar code table13[]="  编号为:      ";

uchar code table14[]="    请按手指    ";

uchar code table15[]="    请再按一次  ";

uchar code table16[]="  采集指纹成功  ";

uchar code table17[]="输入删去的指纹号";

uchar code table18[]="删去指纹库成功  ";

uchar code table19[]="删去指纹库失败  ";

uchar code table20[]="  请输入新密码  ";

uchar code table21[]="请再次输入新密码";

uchar code table22[]="  密码修改成功  ";

uchar code table23[]="  两次密码不一样";

uchar code table24[]="  输入密码错误  ";

uchar code table25[]="  还有  机会    ";

uchar code table26[]="  该指纹已存储  ";

uchar code table27[]="  采集指纹失败  ";

uchar code table28[]="确定删去指纹库?";

uchar code table29[]="按D:  本节课结束";

uchar code table30[]="当前缺勤      人";

uchar code table31[]="当前迟到      人";

uchar code digital[15]={0x90,0x92,0x94,0x96,0x88,0x8a,0x8c,0x8e,0x98,0x9a,0x9c,0x9e};

uchar  xdata table_qiandao[100];

uchar queqing=0;//缺勤人数

uchar zz;

uchar chidao=0;//迟到人数

uchar code     admin[6]={1,3,1,4,2,0};//管理员的固定密码

uchar code init_code[6]={0,0,0,0,0,0};//上电第一次一般的初始化密码


uchar   now_code[6]={0,0,0,0,0,0};//当前存储器中存储的密码

uchar        user[6]={0,0,0,0,0,0};//用户输入的密码

uchar       user2[6]={0,0,0,0,0,0};//输入第二次修改的密码

sbit relay=P3^7;//开锁继电器

sbit wake=P3^6;//检测手指按压,有手指按下就是高电平

uchar jishu=0;

uchar  err_user=3;//用户三次输入错误密码

uchar err_admin=3;//管理员三次输入错误密码

uchar num;//存储矩阵键盘转换的对应按键值

uchar number=0;//输入密码的个数默认0

uchar key_flag=0;//进入手动密码标志

uchar i;

uchar code_flag=0;//密码修改标志第一次输入密码时候是等于0再次输入是等于1

void init_dispay(void)//初始化界面

{

          PutStr(0,0,table1);

    PutStr(1,0,table2);

                PutStr(2,0,table3);

                PutStr(3,0,table4); 

}

void admin_dispay(void)//管理员界面

{

         PutStr(0,0,table6);        

   PutStr(1,0,table7);

   PutStr(2,0,table8);        

   PutStr(3,0,table9);                                

}

void init_shuju(void)

{

         uchar i;

         for(i=0;i<100;i++)

            {

                                 table_qiandao[i]=0x00;

                        }

}

void  que_renshu(void)

{  queqing=0;//缺勤人数

//          WriteCommand(0x80+2);        

//                         WriteData(jishu/10+0x30);

//                         WriteData(jishu%10+0x30);

         for(i=0;i            {

                                 if(table_qiandao[i]==0x00)

                                 { 

                                          queqing++;

                                          WriteCommand(digital[queqing-1]);

                                          WriteData((i+1)/10+0x30);

                              WriteData((i+1)%10+0x30); 

                                         

                                 }

                        }

}

void  chidao_renshu(void)

{  queqing=0;//缺勤人数

//         WriteCommand(0x80+2);        

//         WriteData(jishu/10+0x30);

//         WriteData(jishu%10+0x30);

         for(i=0;i            {

                                 if(table_qiandao[i]>=2)

                                 { 

                                          queqing++;

                                          WriteCommand(digital[queqing-1]);

                                          WriteData((i+1)/10+0x30);

                              WriteData((i+1)%10+0x30); 

                                         

                                 }

                        }

}

void key(void)

{    

           num=keynum();

           if((num==12)&&(key_flag==0))//查看缺勤人数

                 {

                         LcmClearTXT();//清屏

                         PutStr(0,0,table30);

                         que_renshu();

                         WriteCommand(0x80+6);        

                         WriteData(queqing/10+0x30);

                         WriteData(queqing%10+0x30); 

                         while((keynum()>=16));        

       init_dispay();                  

                 }

                 if((num==14)&&(key_flag==0))//查看迟到人数

                 {

                         LcmClearTXT();//清屏

推荐阅读

史海拾趣

Advanced Pressure Technology公司的发展小趣事

APT公司的成功引起了业界的广泛关注。2007年5月,日本上市公司SMC对APT公司进行了战略收购。这一收购不仅为APT公司提供了更强大的资金和技术支持,也为其未来的发展注入了新的活力。虽然被收购,但APT公司仍然保持其独立运作的特色,继续专注于气体输送技术的研发和生产。在SMC的支持下,APT公司得以进一步扩大生产规模、提升技术水平,并持续推出更多创新产品。

ELESTA GmbH公司的发展小趣事

2013年,ELESTA公司更名为ELESTA GmbH,这一品牌重塑标志着公司进入了新的发展阶段。同时,ELESTA也开始实施全球化战略,积极拓展国际市场,通过不断提升产品质量和服务水平,赢得了全球客户的信赖和认可。

Cadeka公司的发展小趣事

随着电子行业的快速发展,Cadeka公司意识到单一市场的局限性。为了拓展业务,公司开始实施全球化战略布局。首先,Cadeka在欧洲和亚洲设立了研发中心,与当地高校和研究机构合作,共同开发新技术。同时,公司还在全球范围内建立了生产基地和销售网络,以便更好地服务全球客户。

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

APLUS Products公司的发展小趣事

APLUS Products公司起源于XXXX年,当时电子行业正处于飞速发展的黄金时期。公司创始人凭借对电子技术的深厚理解和市场需求的敏锐洞察,决定专注于研发和生产高质量的电子产品。初期,公司面临着资金短缺、技术难题和市场竞争等多重挑战。然而,通过不断的技术创新和产品优化,APLUS逐渐在市场中崭露头角。

Heimann Optoelectronics Gmbh公司的发展小趣事

近年来,随着全球对环保和可持续发展的重视,Hei Inc Optoelectronic Division积极响应国家号召,将绿色可持续发展理念融入到企业的生产经营中。公司投入巨资研发环保型光电子器件,并不断优化生产工艺流程以降低能耗和排放。同时,公司还积极参与各类环保公益活动,提升公众对绿色光电子技术的认知度。这些举措不仅赢得了社会各界的广泛赞誉,还为公司树立了良好的企业形象和品牌形象。在绿色可持续发展的道路上,Hei Inc Optoelectronic Division正稳步前行,不断开创光电子领域的新篇章。

问答坊 | AI 解惑

使用VxWorks时出现了问题,请教各位,给点儿建议!cpu是MPC862

自己编了个小程序,在Tornador里结合VxWorks一起. 程序很简单,就是读存储器! xd0 = *(unsigned int *)(SDRAM_ADR); xd1 = *(unsigned int *)(BOOTFLASH_ADR); xd2 = *(unsigned short int *)(FLASH_ADR); 我的存储器有三种,一个是SDRAM,32位;一 ...…

查看全部问答>

提供bc++45下载,想下的同学抓紧了~

最近开始学习\"劭贝贝\"的,里面的例子需要bc45,费了好大劲终于找到了.现提供连接如下:           borland c++ v4.5 Part3 http://www.tomore.com/3/23811.html           borland ...…

查看全部问答>

热地和冷地,你听过吗?

热地:开关电源无需使用变压器,其开关电路的“地”和市电电网有关,既所谓的“热地”,它是带电的 冷地:由于开关电源的高频变压器将输入、输出端隔离;又由于其反馈电路常用光电耦合、既能传送反馈信号又将双方的“地”隔离;所以输出端的地称之 ...…

查看全部问答>

STM32101VCT6SRAM(62256)cpld7128lcd12232测试版电路

attach]20052[/attach]原理图 这个是62256的电路,贴出来 下载 (950.99 KB) 2010-3-26 10:05 电路描述:FSMC_NADV经非门后接573的锁存脚,FSMC_NE1接62256的片选/CS,FSMC_NOE接62256的/OE,FSMC_NOE接62256的/WE STM ...…

查看全部问答>

【晒经典】集成运算放大电路篇

本帖最后由 dontium 于 2015-1-23 11:43 编辑 本帖主要回顾集成运放在电路中的使用,即集成运算放大电路,前两贴作为此贴的基础,我采用循序渐进的阐述方法   1.F007放大电路   F007是通用型集成运放,它由正负15V两路电源供电。从+ ...…

查看全部问答>

飞思卡尔单片机与rf905的通信spi通信问题

我是一个新人,对飞思卡尔单片机使用的不是很熟,最近在使用飞思卡尔128单片机和nrf905之间做一个无线传输的小协议,选择飞思卡尔为主机模式,并且作为接收终端,用于接收我的发送数据。我的发送端是用51做到已经好使了,没有问题了(发送端暂且不 ...…

查看全部问答>

请求 继续团购 MSP430 LaunchPad MSP-EXP430G2 25元不用包邮啊

请求 继续团购 MSP430 LaunchPad MSP-EXP430G2  25元不用包邮啊 30元 也可以试试 [ 本帖最后由 ppiicc 于 2012-5-3 22:53 编辑 ]…

查看全部问答>

常用晶振封装尺寸

画430PCB的时候,发现以前没做过32768Hz的手表晶体的封装,然后再网上找到这样一个有很多晶振封装的网页,转成了PDF跟大家分享下。 …

查看全部问答>

protel99se软件

小弟想学习线路板设计,谁有protel99se 的软件,帮帮忙给上传一份…

查看全部问答>

晒设计方案+STM32F429i开发板之未完成部分

     这个算是个遗憾帖吧。     本来还准备了两个实验,但鉴于时间问题,不能在活动结束前完成了。不过等做完我会来让大家看看的。      其中一个是GPS的实验,模块已经买回来了,只 ...…

查看全部问答>