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

📄 main.cp

📁 An applicaion that utilize a fingerprint scanner to turn off the PC
💻 CP
字号:
#line 1 "C:/Documents and Settings/Rhae Anne Sophia/Desktop/PC- ONOFF using finger print scanner/Program/main.c"
char data_frame[8];
unsigned short user_number,response,count,event;
char lcd_message[16],buffer;
unsigned int frequency;










void Show_Splash_message()
 {
 LCD_Out(1,1,"  FINGER PRINT  ");
 LCD_Out(2,1,"   ENROLLMENT   ");
 }

void Show_Welcome_String()
 {
 LCD_Out(1,1,"    WELCOME!    ");
 }

void Show_EEPROM_Stored_Messages(short row, unsigned short location)
 {
 unsigned column;
 column = 1;
 while (column < 17)
 {
 buffer = EEprom_Read(location);
 LCD_Chr(row,column,buffer);
 location++;
 column++;
 }
 }

void Clear_Buffer_Registers()
 {
 data_frame[0] = 0;
 data_frame[1] = 0;
 data_frame[2] = 0;
 data_frame[3] = 0;
 data_frame[4] = 0;
 data_frame[5] = 0;
 data_frame[6] = 0;
 data_frame[7] = 0;
 }

void Seconds_Delay(unsigned short length)
 {
 while (length > 0)
 {
 Delay_ms(1000);
 length--;
 }
 }

void Transmit_Command_to_Scanner()
 {
 count = 0;
 while (count < 8)
 {
 Usart_Write(data_frame[count]);
 count++;
 }
 }

void Receive_Response_from_Scanner()
 {
 Clear_Buffer_Registers();
 count = 0;
 while (data_frame[count] != 0xf5)
 {
 if (PIR1.RCIF)
 {
 data_frame[count] = Usart_Read();
 }
 }
 count++;
 while (count < 8)
 {
 if (PIR1.RCIF)
 {
 data_frame[count] = Usart_Read();
 count++;
 }
 }
 }

void Boot_Computer()
 {
  PORTC.F3  =  1 ;
 while (! PORTA.F0 )
 {
 asm nop;
 }
 LCD_Cmd(LCD_CLEAR);
  PORTC.F3  =  0 ;
 PWM_Stop();
 while ( PORTA.F0 )
 {
 asm nop;
 }
 clear_buffer_registers();
 PWM_Start();
 }



void Determine_Checksum_of_Data_frame()
 {
 data_frame[6] = data_frame[1]
 ^ data_frame[2]
 ^ data_frame[3]
 ^ data_frame[4]
 ^ data_frame[5];
 }

void Construct_Scanner_Command()
 {
 data_frame[0] =  0xF5 ;
 data_frame[5] = 0;
 data_frame[7] =  0xF5 ;
 Determine_Checksum_of_Data_frame();
 }

void Delete_Specific_User(unsigned short number)
 {
 data_frame[1] = 0x04;
 data_frame[2] = 0;
 data_frame[3] = number;
 data_frame[4] = 0;
 Construct_Scanner_Command();
retry1:Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 goto retry1
 }
 }

void Disable_Scanners_Timeout()
 {
 data_frame[1] = 0x2e;
 data_frame[2] = 0;
 data_frame[3] = 0;
 data_frame[4] = 0;
 Construct_Scanner_Command();
retry2:Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 goto retry2
 }
 }

void Set_Enroll_Sampling_Counts()
 {
 data_frame[1] = 0x2d;
 data_frame[2] = 0;
 data_frame[3] = 0;
 data_frame[4] = 0;
 Construct_Scanner_Command();
retry3:Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 goto retry3
 }
 }

unsigned short Enroll_Users_Fingerprint(unsigned short number)
 {
 unsigned short error;
 error = 0;
 Clear_Buffer_Registers();
 if (number <= 3)
 {
 Show_EEPROM_Stored_Messages(1,0x40);
 Show_EEPROM_Stored_Messages(2,0x50);
 }
 if (number >= 4)
 {
 Show_EEPROM_Stored_Messages(1,0x60);
 Show_EEPROM_Stored_Messages(2,0x70);
 }
 data_frame[1] = 0x01;
 data_frame[2] = 0;
 data_frame[3] = number;
 data_frame[4] = 1;
 Construct_Scanner_Command();
 Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 error = 1;
 return error;
 }
 LCD_Cmd(LCD_CLEAR);
 Clear_Buffer_Registers();
 seconds_delay(1);
 Show_EEPROM_Stored_Messages(1,0x80);
 Show_EEPROM_Stored_Messages(2,0x90);
 data_frame[1] = 0x02;
 data_frame[2] = 0;
 data_frame[3] = number;
 data_frame[4] = 1;
 Construct_Scanner_Command();
 Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 error = 1;
 return error;
 }
 LCD_Cmd(LCD_CLEAR);
 seconds_delay(1);
 Clear_Buffer_Registers();
 Show_EEPROM_Stored_Messages(1,0x80);
 Show_EEPROM_Stored_Messages(2,0xa0);
 data_frame[1] = 0x03;
 data_frame[2] = 0;
 data_frame[3] = number;
 data_frame[4] = 1;
 Construct_Scanner_Command();
 Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 error = 1;
 }
 return error;
 LCD_Cmd(LCD_CLEAR);
 seconds_delay(2);
 }

void Adjust_Acceptance_level()
 {
 data_frame[1] = 0x28;
 data_frame[2] = 0;
 data_frame[3] = 9;
 data_frame[4] = 0;
 Construct_Scanner_Command();
retry4:Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 if (data_frame[4])
 {
 goto retry4
 }
 }

void Send_Scan_Fingerprint_Command()
 {
 unsigned short error;
 error = 0;
 data_frame[1] = 0x0c;
 data_frame[2] = 0;
 data_frame[3] = 0;
 data_frame[4] = 0;
 Construct_Scanner_Command();
 Transmit_Command_to_Scanner();
 Receive_Response_from_Scanner();
 }



void main ()
 {
 ADCON1 = 0x06;
 TRISA = 0x01;
 TRISB = 0;
 TRISC = 0x30;
 TRISD = 0x04;
 TRISE = 0;
 PORTA = 0;
 PORTB = 0;
 PORTC = 0;
 PORTD = 0;
 PORTE = 0;
 Seconds_Delay(2);
 user_number = 0;
 Usart_Init(19200);
 PIE1.RCIE = 1;
 LCD_Init (&PORTB);
 LCD_Cmd(LCD_CURSOR_OFF);
 LCD_Cmd(LCD_CLEAR);
 LCD_Out(1,1,"  INITIALIZING  ");
 LCD_Out(2,1,"  PLEASE  WAIT  ");
 PWM_Init (1000);
 Pwm_Change_Duty(50);
 PWM_Start();
 Seconds_Delay(4);
 Delete_Specific_User(0);
 Set_Enroll_Sampling_Counts();
 Disable_Scanners_Timeout();
 Adjust_Acceptance_level();
 LCD_Cmd(LCD_CLEAR);
 while (1)
 {
 event = 0;
  PORTC.F3  =  0 ;
 while (!event)
 {
 if (PORTD.F3)
 {
 LCD_Cmd(LCD_CLEAR);
 Show_Splash_message();
 seconds_delay(1);
 Delete_Specific_User(1);
 Delete_Specific_User(4);
 user_number = 1;
 Enroll_Users_Fingerprint(user_number);
 user_number = 4;
 Enroll_Users_Fingerprint(user_number);
 LCD_Cmd(LCD_CLEAR);
 Show_EEPROM_Stored_Messages(1,0xb0);
 seconds_delay(5);
 LCD_Cmd(LCD_CLEAR);
 event = 1;
 }
 if ((PORTC & 0x30) == 0x10)
 {
 LCD_Cmd(LCD_CLEAR);
 Show_Splash_message();
 seconds_delay(1);
 Delete_Specific_User(2);
 Delete_Specific_User(5);
 user_number = 2;
 Enroll_Users_Fingerprint(user_number);
 user_number = 5;
 Enroll_Users_Fingerprint(user_number);
 LCD_Cmd(LCD_CLEAR);
 Show_EEPROM_Stored_Messages(1,0xb0);
 seconds_delay(5);
 LCD_Cmd(LCD_CLEAR);
 event = 1;
 }
 if ((PORTC & 0x30) == 0x20)
 {
 LCD_Cmd(LCD_CLEAR);
 Show_Splash_message();
 seconds_delay(1);
 Delete_Specific_User(3);
 Delete_Specific_User(6);
 user_number = 3;
 Enroll_Users_Fingerprint(user_number);
 user_number = 6;
 Enroll_Users_Fingerprint(user_number);
 LCD_Cmd(LCD_CLEAR);
 Show_EEPROM_Stored_Messages(1,0xb0);
 seconds_delay(5);
 LCD_Cmd(LCD_CLEAR);
 event = 1;
 }
 if ((PORTC & 0x30) == 0x30)
 {
 LCD_Out(1,1,"  PLACE FINGER  ");
 LCD_Out(2,1," ON THE SCANNER ");
 Send_Scan_Fingerprint_Command();
 LCD_Cmd(LCD_CLEAR);
 if (data_frame[3] == 1 ||data_frame[3] == 4)
 {
 Show_Welcome_String();
 Show_EEPROM_Stored_Messages(2,0);
 Boot_Computer();
 goto exit
 }
 if (data_frame[3] == 2 || data_frame[3] == 5)
 {
 Show_Welcome_String();
 Show_EEPROM_Stored_Messages(2,0x10);
 Boot_Computer();
 goto exit
 }
 if (data_frame[3] == 3 ||data_frame[3] == 6)
 {
 Show_Welcome_String();
 Show_EEPROM_Stored_Messages(2,0x20);
 Boot_Computer();
 goto exit
 }
 Show_EEPROM_Stored_Messages(1,0x30);
 exit: Seconds_Delay (3);
 LCD_Cmd(LCD_CLEAR);
 Clear_Buffer_Registers();
 event = 1;
 }
 }
 }
 }

⌨️ 快捷键说明

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