在线情况
楼主
  • 头像
  • 级别
  • 门派
  • 职务总版主
  • 声望+9
  • 财富5
  • 积分3065
  • 经验390701
  • 文章6744
  • 注册2006-03-07
基于MSP430单片机指纹保险柜软件的实现
作者: 赵晓玲 (辽宁机电职业技术学院,辽宁 丹东118002)
出处: 国外电子元器件
 
1 引 言
近几年来单片机技术飞速发展,各种新型号的单片机层出不穷,在家电、控制、仪表等领域起到了举足轻重的作用。MSP430是一款具有超低功耗、丰富的片内外围模块、软件对硬件灵活控制等特点的单片机,特别适用于由电池供电的应用。本文介绍了一种以MPS430单片机为控制核心的指纹保险柜的工作原理,重点讨论实现指纹保险柜功能的软件设计。

2 指纹保险柜的工作原理

指纹保险柜不用钥匙或密码,仅凭指纹实现保险柜的安全控制。指纹保险柜的原理图如图1所示。

图l中的"控制电路"部分为指纹门锁的控制中心。它从"指纹比对模块"部分取得指纹比对的结果数据,如指纹比对成功,"控制电路"向机械锁芯中的"动作部分"发出开锁的信号。同时监测动作的执行情况与锁的开/关状态。
                      [imga]../../upload/2007/04/22/130542.gif[/imga]

除此以外,"控制电路"还可控制"指纹比对模块"部分进行指纹录入/删除,并对整个电路的工作状态进行管理控制,对错误进行报警等。

本指纹保险柜具有机械自动触发、锁定功能。一旦门被打开,就关断控制电路,其余工作交予机械部分管理。

3 系统软件设计
3.1 系统分析
系统分析是整个程序设计工作的基点,应根据系统功能进行结构化设计,即将整个程序分为若干个模块,通过主程序将各个模块有机地组织起来。指纹保险柜的系统程序主要由主程序、按键模块、控制模块、显示模块、计时模块和串口通讯模块组成。

下面以按键模块为例,分析该模块详细设计过程。
本指纹保险柜控制电路可存储30个指纹数据,其中包含1个管理者和29个普通用户的指纹数据。它们之间的管理关系为0号管理者管理普通用户群。0号管理者的指纹数据存储于固定的位置00,其他位置为普通用户位置。按键模块分为按键查询和按键管理两部分。

1)按键查询。保险柜具有4个按键,其中,上电键用于为系统加电;录入键用于控制电路执行录入指纹的功能,即将指纹以数据形式存入保险柜中:删除键用于控制电路执行删除数据指纹的功能:而全清键用于使控制电路执行删除全部数据指纹的功能。本模块应判断是否有按键按下,并判断出是哪一个按键按下。

2)按键管理。根据按键查询程序获得的按键值进行相应的动作处理。按下上电键时,蜂鸣器发出一声短促的鸣叫,表示系统已经加电的绿色电源指示灯亮。按下录入键时,窗口内的绿灯亮,表示处于录入数据指纹状态。正常情况下,一个指纹录入时应该划过取指器3次,每次划过后,绿色灯闪动一次,蜂鸣器鸣响一声。成功划过取指器3次后,绿色发光管闪亮,蜂鸣器长鸣一声,表示该指纹已经录入到指纹锁内。当用户手指划过取指器的速度过快、过慢或手指对窗口的压力不够时,蜂鸣器发出2声短鸣,表示此次手指划动不合格,不予记录,应该重新划动。超时无操作,指纹保险柜会自动断电。按下删除键时,窗口内的绿色与红色灯同时亮,表示进入删除数据指纹状态。然后输入要删除的指纹,比对通过后,红色灯熄灭,蜂鸣器鸣响一声,表示此时该指纹已经从指纹锁内删除。按下全清键不动,3秒钟后蜂鸣器发出一声长鸣,继续按全清键,直到发出3声长鸣,表示锁内存储的指纹已被全部清空。

3.2 软件流程
对于复杂系统的程序设计,应在系统分析基础上用直观、易懂的流程图表示程序结构的设计。按键管理模块的流程图如图2所示,其中指纹录入子模块的流程图如图3所示。
                    [imga]../../upload/2007/04/22/130600.gif[/imga]

                    [imga]../../upload/2007/04/22/130613.gif[/imga]

3.3 源程序
本系统的开发软件采用IRA公司的IAR Em-bedded Workbench集成开发环境,它可以编辑、汇编和编译汇编语言和C语言源文件,并且其汇编语言和C语言具有相同格式的头文件.给开发带来了很大的灵活性。C语言具有编程简单、可移植等优点。下面为按键管理模块中的部分代码。
函数名:managen_key(unsigned char key_flag)
功 能:按键管理
说 明:
调 用:baojing_beii(),send_comm_Uasrt0()
入口参数:uart_buf[],key_flag,template_number,key
返回值:无

void managen_key(unsigned char key_flag)
{
 unsigned int j;
 unsigned char i;
 uart_r_num=0x0;
 uart_r_flag=0x0;
 j = 60000;        //延时
 do(j--);
 while(j !=0);
 switch(key_flag)  //根据按键返回值进行不同的处理
  {
   ...            //其它按键的处理过程
   case 0x5:        //按键为全清键
     {
      LIGHT_OUT |= RED_LIGHT;
      if(send_comm_Uasrt0(0x24,key-1)==0x1)//如果存储的指纹被清空
        {
          key=0x0;      //设置数码管显示值"00"
          init_led();      //调用初始化LED程序
          led_num(key); //调用LED显示转换程序
          tmeer_flash = 0x01; //调用启动定时程序使LED闪烁"00"
          Timeer();
          baojing_beii(0x1,0x10);//调用报警程序启动蜂响器
         }
     LIGHT_OUT &= ~RED_LIGHT;
     break;
     }
  }
}
[COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
Powered by LeadBBS 9.2 .
Page created in 0.1719 seconds with 5 queries.