السلام عليكم ورحمة الله وبركاته مشكور اخ F. Abdelaziz عالاكواد والشرح <<<طبقت نفس الاكواد لكن يظهر ان في خطاء في بعض الاكواد بداية من هنا
كود:
}
code_read();
Lcd_Cmd(_LCD_CLEAR); //Clear Display
Lcd_Cmd(_LCD_CURSOR_OFF); //Cursor Off
Lcd_Out(1, 1, msg1);
Delay_ms(2000);
//Lcd_Cmd(_LCD_CLEAR); //Clear Display
do
{
الاخطاء اللي ظهرت عندي في هذه السطور واسماء الاخطاء هي
specifier needed
syntax error:')' expected, but '1' found
invalid declarator expected'(' or identifier
identifier redefined
'msg1' identifier redfined
internal error
طبعا البرنامج اللي استخدمه هو ميكروسي لبرمجة البيك
حاولت بتغيير الاكواد وفحصها لكن لا اعلم مالخطاء
كود:
unsigned kp;
unsigned i=0;
char code1 [10];
char user1[4];
char msg1[16] = "welcome...";
char msg2[16] = "Enter Code";
char msg3[16] = "Access Granted";
char msg4[16] = "Access Denied";
char msg5[16] = "Enter New code";
//keypad module conections
char keypadPort at PORTD;
// End keypad module conections
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
sbit LED_G at PORTB.B0;
sbit LED_R at PORTB.B1;
sbit buzzer at PORTC.B0;
void code_enter()
{
kp = 0; // Reset key code variable
// Wait for key to be pressed and released
do
// kp = keypad_key_press(); //Store key code in kp variable
kp = keypad_key_click(); // Store key code in kp variable
while (!kp);
// Prepare value for output, transform key to it's ASCII value
switch (kp) {
case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D
}
code1[i] = kp;
//Lcd_Chr(2, i+1, code1[i]);
Lcd_Chr(2, i+1, '*');
i++;
}
void delay_20ms()
{
Delay_ms(20);
}
void code_read() //Read data from EEBROM
{
delay_20ms();
user1[0] = EEPROM_Read(0x00); // Read data from address 0
delay_20ms();
user1[1] = EEPROM_Read(0x01); // Read data from address 1
delay_20ms();
user1[2] = EEPROM_Read(0x02); // Read data from address 4
delay_20ms();
user1[3] = EEPROM_Read(0x03); // Read data from address 8
delay_20ms();
}
void code_write() // Write data from EEBROM
{
delay_20ms();
EEPROM_Write(0x00,code1[0]); //Write some data at address00
delay_20ms();
EEPROM_Write(0x01,code1[1]); //Write some data at address02
delay_20ms();
EEPROM_Write(0x02,code1[2]); //Write some data at address04
delay_20ms();
EEPROM_Write(0x03,code1[3]); //Write some data at address08
}
void change_code()
{
Lcd_Cmd(_LCD_CLEAR); //Clear Display
Lcd_Out(1, 1, "Enter New Code");
i=0;
code_enter();
code_enter();
code_enter();
code_enter();
code_write();
code_read();
}
void main()
{
//ADCON1 |=0X07; //Configure AN pins as digital
//TRISA =0X00; //Set diriction to be output
TRISB=0;
PORTB=0;
TRISC=0;
PORTC=0;
keypad_Init(); //Initialize keypad
Lcd_Init(); //Initialize Lcd
code_read();
//if no code is stored then default is 2345
if(user1[0] == 0xff && user1[1] == 0xff && user1[2] == 0xff && user1[3] == 0xff)
EEPROM_Write(0x00,'2'); //Write some data at address00
delay_20ms();
EEPROM_Write(0x01,'3'); //Write some data at address02
delay_20ms();
EEPROM_Write(0x02,'4'); //Write some data at address04
delay_20ms();
EEPROM_Write(0x03,'5'); //Write some data at address08
delay_20ms();
}
code_read();
Lcd_Cmd(_LCD_CLEAR); //Clear Display
Lcd_Cmd(_LCD_CURSOR_OFF); //Cursor Off
Lcd_Out(1, 1, msg1);
Delay_ms(2000);
//Lcd_Cmd(_LCD_CLEAR); //Clear Display
do
{
i=0;
code_enter();
if(code1[0]==42)
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, msg2);
//delay_ms(500);
i=0;
code_enter();
code_enter();
code_enter();
code_enter();
code_enter();
if(code1[0] == '2' && code1[1] == '3' && code1[2] == '4' && code1[3] == '5' && code1[4] == '5') // check master code
{
code_enter();
if (code1[5] == 35)
{
change_code();
}
}
if(code1[0] == user1[0] && code1[1] == user1[1] && code1[2] == user1[2] && code1[3] == user1[3] && code1[4] == 35)
{
{
Lcd_Cmd(_LCD_CLEAR); //Clear Display
Lcd_Out(1, 1, msg3);
PORTB.B0 = 1;
PORTC.B0 = 1; //BUZZER
Delay_ms(5000);
PORTB.B0 = 0;
PORTC.B0 = 0;
Lcd_Out(1, 1, msg1);
}
else
{
Lcd_Cmd(_LCD_CLEAR); //Clear Display
Lcd_Out(1, 1, msg4);
PORTB.B1 =1;
PORTC.B0 =1;
delay_ms(2000);
PORTB.B1 = 0;
PORTC.B0 = 0;
Lcd_Out(1, 1, msg1);
}
}
}while(1);
}