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

📄 testzhi.c

📁 本段源码是将上海一维的指纹识别模块移植到ATmega128芯片后的测试程序
💻 C
字号:
#include <iom128.h>
#include "includes.h"
#include "myiom128.h"
#define u8 unsigned char
#define u16 unsigned int
#define CharBufferA 0x01
#define CharBufferB 0x02
#define model_buffer 0x03
#define CABLEENABLE()    PORTE|=0x08//0b00001000
#define UARTRFDISENABLE() PORTE|=0x04//0b00000100
extern void led_flash() ;
extern u8 scan_final_key() ;
extern void lcd_1() ;
extern void display_line_5() ;
extern void display_line_6() ;
extern void lcd_upside_initialization() ;
extern void data_clear() ;
u8 acknowledge = 0x08 ;
u8 i , key , ack[35] ;
u8 templet_num_high , templet_num_low ;
/************************************* InitUART *************************************/
void InitUART( unsigned char baudrate )
{
  CABLEENABLE() ;
  UARTRFDISENABLE() ;
  UBRR0L = baudrate; /* set the baud rate */
  DDRB |= 0x01 ;
  PORTB &= ~0x01;
  UBRR0H = 0x00;
  UCSR0B&= ~0x04 ; //SET BIT UCSZ02 = 0
  UCSR0C = 0x06;   //  SET BITS UCSZ01,UCSZ00 = 1 , indicate  transmit 8 bits data )
  UCSR0B&= ~0x18; //disable RXEN0 , TXEN0
  UCSR0A|= 0x02;  //ENABLE U2X0
}

/************************************* TransmitByte *************************************/
void TransmitByte( unsigned char data )
{
  UCSR0B|= 0x08;  //enable TXEN0
  UCSR0B&=~0x10;  //disable RXEN0
  while ( !(UCSR0A & (1<<UDRE0)) ); /* wait for empty transmit buffer */
  UDR0 = data; /* start transmittion */
}

/************************************* receiveByte *************************************/
unsigned char receiveByte()
{
  UCSR0B&=~0x08;  //disable TXEN0
  UCSR0B|= 0x10;  //enable RXEN0
  while ( !(UCSR0A & (1<<RXC0)));
  return UDR0 ;
}
/*********************************** ack_bag_length_1 ***********************************/
u8 ack_bag_length_1()
{
   do
   {
     acknowledge = receiveByte() ;
   }
   while(acknowledge != 0xFE) ; //HEAD
   for(i=0;i<4;i++)
   {
      receiveByte() ;
   }
   ack[0] = receiveByte() ; //确认码
   receiveByte() ; //CHK
   receiveByte() ; //END
   return ack[0] ;
}
/******************************************** ok *******************************************/
void ok()
{
   u8 ack = 0 ;
   ack = ack ;
   lcd_upside_initialization() ;
   data_clear() ;
   display_line_5() ; //display Right!
}
/******************************************* error******************************************/
void error()
{
   u8 ack = 0 ;
   ack = ack ;
   lcd_upside_initialization() ;
   data_clear() ;
   display_line_6() ; //display Wrong!
}

/************************************* command_compare *************************************/
void command_compare(u8 ID_H , u8 ID_L)
{
    u8 CHK ;
    TransmitByte(0xFE) ;
    TransmitByte(0x00) ; //2
    TransmitByte(0x01) ;
    TransmitByte(ID_H) ;
    TransmitByte(ID_L) ;
    TransmitByte(0x00) ; //6

    CHK = 0x00 ;
    CHK ^= 0x00 ; //2
    CHK ^= 0x01 ;
    CHK ^= ID_H ;
    CHK ^= ID_L ;
    CHK ^= 0x00 ; //6

    TransmitByte(CHK) ;
    TransmitByte(0xFD) ;
}
/**************************************** command_test_finger ***************************************/
void command_test_finger()
{
    TransmitByte(0xFE) ;
    TransmitByte(0x00) ; //2
    TransmitByte(0x06) ;
    TransmitByte(0x00) ;
    TransmitByte(0x00) ;
    TransmitByte(0x00) ; //6
    TransmitByte(0x06) ;
    TransmitByte(0xFD) ;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


/*********************************** zhiwen_compare ***************************************
将手指放在指纹识别器上,本段代码将生成指纹特征文件,并将生成的指纹特征文件与flash数据库中
templet_id号的指纹模版比对.假如一致,则运行ok(),否则运行error() .
*********************************** zhiwen_compare ***************************************/
void zhiwen_compare(u16 templet_id)
{
    u8 ack , templet_id_h , templet_id_l ;
    templet_id_h = templet_id>>8 ;
    templet_id_l = templet_id ;
    do
    {
        command_test_finger() ;  //cmd_test_finger
        ack = ack_bag_length_1() ;
    }
    while(ack!=0x00) ;

    command_compare(templet_id_h , templet_id_l) ;  //match_two_templet
    ack = ack_bag_length_1() ;

    if(ack == 0x00)
    {
       ok() ;
    }
    else error() ;
}

⌨️ 快捷键说明

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