📄 main.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 + -