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

📄 main.c

📁 本段源码是将上海一维的指纹识别模块移植到ATmega128芯片后的测试程序
💻 C
字号:
#include <iom128.h>
//#include "zimo.h"
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long int
u16 crucial_key = 0xFF ;
u8 pre_key = 0 ;
u8 templet_key = 0 ;
u8 scan = 1 ;
u8 column1 = 0x13 ;
u8 column2 = 0x07 ;
u16 templet_num = 0 ;
u8 templet_num_1 = 0 ;
u8 templet_num_2 = 0 ;
u8 templet_num_3 = 0 ;
u8 valid_templet ;
u8 j ;
u8 control = 0 ;
u8 test = 0 ;
u8 flag_m = 0 ;
u8 p_on , pd3_test[2] ;
u32 pp ;
extern void data_clear() ;
extern void InitUART(u8 baudrate) ;
extern void interface_1() ;
extern void display_line_2() ;
extern void display_line_3() ;
extern void display_line_4() ;
extern u8 scan_final_key() ;
extern void zhiwen_compare(u16 templet_id) ;
extern void lcd_upside_initialization() ;
extern void lcd_downside_initialization() ;
extern void display_number_letter( u8 number, u8 page , u8 column1 , u8 column2 ) ;
/****************************************** xian_shi *********************************************/
void xian_shi()
{
     lcd_upside_initialization() ;
     //data_clear() ;
     if(crucial_key==1|crucial_key==2|crucial_key==3|crucial_key==4|crucial_key==5|crucial_key==6|crucial_key==7|crucial_key==8|crucial_key==9|crucial_key==0)
     {
         if(column2==0x0F)
         {
             display_number_letter( crucial_key , 0xB0  , column1 , column2 ) ;
             column1 = column1 + 1 ;
             column2 = 0x07 ;
         }
         else
         {
             display_number_letter( crucial_key , 0xB0  , column1 , column2 ) ;
             column2 = column2 + 0x08 ;
         }
     }
}
/******************************* power_on_initialization *****************************/
void power_on_initialization()
{
   EICRA |= (1<<ISC31) ;
   EICRA &= ~(1<<ISC30) ;
   EIMSK |= (1<<INT3) ;
   SREG |= (1<<7) ;
}
/************************************ power_off ****************************************/
void power_off()
{
   ADCSR &=~(1<<ADEN);
   lcd_downside_initialization() ;
   data_clear() ;
   lcd_upside_initialization() ;       //clear the lcd
   data_clear() ;
   DDRB |= ( 1<<PB6 ) ;
   PORTB &= ~( 1<<PB6 ) ;
   DDRB &= ~( 1<<PB6 ) ;

   MCUCR |= ( 1<<SE ) ;
   MCUCR &= ~( (1<<SM0)|(1<<SM1)|(1<<SM2) ) ;
   asm ("SLEEP") ;

   //asm("nop") ;
}
/*********************************** power_interrupt ************************************/
#pragma vector=INT3_vect
__interrupt void power_interrupt()
{
   flag_m ^= 1 ;
   if( flag_m == 0 )
   {
       MCUCSR = ( 1<<WDRF ) ;
       WDTCR = 0x08 ; //WATCH DOG ENABLE
       power_off() ;
   }
}
/********************************** power_on_pre_action **********************************/
void power_on_pre_action()
{
     lcd_downside_initialization() ;
     data_clear() ;
     lcd_upside_initialization() ;       //clear the lcd
     data_clear() ;

     while( p_on != 1 )
     {
           p_on = 1 ;
           for( pp=0;(pp<50000)&&(p_on == 1);pp++ )
           {
                 power_on_initialization() ;
                 DDRD &= ~(1<<PD3) ;  //PD3 IN
                 pd3_test[0] = ( PIND&(1<<PD3) ) ;
                 if( pd3_test[0] != 0 )
                 {
                     p_on = 0 ;
                 }
                 else p_on = 1 ;
           }
           asm("nop") ;
     }
     p_on = 0 ;
     //////
     asm("nop") ;
}
/****************************************** main *********************************************/
void main()
{
         power_on_pre_action() ;

         while(1)
         {
flag1:         interface_1() ;  //Please select templet number
               j = 0 ;
               scan = 1 ;
               column1 = 0x13 ;
               column2 = 0x07 ;
               while(scan==1)
               {
                   pre_key = scan_final_key() ;
                   switch(pre_key)
                   {
                         case 7 : //press F1
                         {
                              lcd_upside_initialization() ;
                              data_clear() ;
                         }break;
                         case 11: {crucial_key = 1 ; xian_shi();} break;
                         case 12: {crucial_key = 2 ; xian_shi();} break;
                         case 13: {crucial_key = 3 ; xian_shi();} break;
                         case 15: {crucial_key = 4 ; xian_shi();} break;
                         case 16: {crucial_key = 5 ; xian_shi();} break;
                         case 17: {crucial_key = 6 ; xian_shi();} break;
                         case 19: {crucial_key = 7 ; xian_shi();} break;
                         case 20: {crucial_key = 8 ; xian_shi();} break;
                         case 21: {crucial_key = 9 ; xian_shi();} break;
                         case 14: {crucial_key = 0 ; xian_shi();} break;
                   }
                   j++ ;
                   switch(j&0x0F)
                   {
                       case 2: templet_num_1 = crucial_key ; break ;
                       case 3: templet_num_2 = crucial_key ; break ;
                       case 4: templet_num_3 = crucial_key ; break ;
                   }
                   asm("nop");
                   switch(pre_key)
                   {
                         case 5: //press OK
                         {

                               scan = 0 ;

                               templet_num = (templet_num_1*100)+templet_num_2*10+templet_num_3;
                         }break ;
                   }

               }//end of while(scan==1)

               InitUART(47) ; // baudrate 9600
               lcd_upside_initialization() ;
               data_clear() ;
               display_line_3() ;  //display "Please press your thumb"
               InitUART(47) ;
               zhiwen_compare(templet_num) ;

               while(templet_key != 1) //press R
               {
                   templet_key = scan_final_key() ;
               }
               templet_key = 0 ;
               goto flag1 ;
         }//end of while(1)
}//end of main

⌨️ 快捷键说明

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