/* Copyright © 14/11/2023 David Norris. A gift for for Africa's finest ladies.... To deploy and keep us safe.
And can also go into production for sale. Code may be used with my permission. */
/* Droit d'auteur © 14/11/2023 David Norris. Un cadeau pour les plus belles dames d'Afrique.... Pour nous déployer et assurer notre sécurité.
Et peut également entrer en production pour la vente. Le code peut être utilisé avec ma permission. */
/* Ce projet est interessant tu peut faire un circuit d 'une
serrure*/
/dfdn/securitydemo/HomeSecurity.png
unsigned short kp,ks,kr,kt,ku,ky;
unsigned int i;
const char character[] = {0,17,14,4,14,17,0,0};
void CustomChar(char pos_row, char pos_char) {
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}
// clavier module connection
char keypadPort at PORTC;
// clavier module connection
// LCD module connections
sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB0_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB0_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
void main()
{
TRISD.F1=0;
TRISA.F0=1;
do
{
Keypad_Init(); // Initialize Keypad
Lcd_Init(); // Initialize Lcd
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "1");
Lcd_Out(1, 1, "code : "); // Write message text on Lcd
Sound_Init (& PORTD, 0);
kp = 0; // Reset key code variable
// Wait for key to be pressed and released
//kp = Keypad_Key_Press(); // Store key code in kp variable
do
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
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
}
CustomChar(1,7);
ks = 0;
do
ks = Keypad_Key_Click(); // Store key code in kp variable
while (!ks);
// Prepare value for output, transform key to it's ASCII value
switch (ks)
{
case 1: ks = 49; break; // 1
case 2: ks = 50; break; // 2
case 3: ks = 51; break; // 3
//case 4: kp = 65; break; // A
case 5: ks = 52; break; // 4
case 6: ks = 53; break; // 5
case 7: ks = 54; break; // 6
//case 8: kp = 66; break; // B
case 9: ks = 55; break; // 7
case 10: ks = 56; break; // 8
case 11: ks = 57; break; // 9
//case 12: kp = 67; break; // C
case 13: ks = 42; break; // *
case 14: ks = 48; break; // 0
case 15: ks = 35; break; // #
//case 16: kp = 68; break; // D
}
CustomChar(1,8);
kr = 0; // Reset key code variable
// Wait for key to be pressed and released
//kp = Keypad_Key_Press(); // Store key code in kp variable
do
kr = Keypad_Key_Click(); // Store key code in kp variable
while (!kr);
// Prepare value for output, transform key to it's ASCII value
switch (kr)
{
case 1: kr = 49; break; // 1
case 2: kr = 50; break; // 2
case 3: kr = 51; break; // 3
//case 4: kp = 65; break; // A
case 5: kr = 52; break; // 4
case 6: kr = 53; break; // 5
case 7: kr = 54; break; // 6
//case 8: kp = 66; break; // B
case 9: kr = 55; break; // 7
case 10: kr = 56; break; // 8
case 11: kr = 57; break; // 9
//case 12: kp = 67; break; // C
case 13: kr = 42; break; // *
case 14: kr = 48; break; // 0
case 15: kr = 35; break; // #
//case 16: kp = 68; break; // D
}
CustomChar(1,9);
kt = 0;
do
kt = Keypad_Key_Click(); // Store key code in kp variable
while (!kt);
// Prepare value for output, transform key to it's ASCII value
switch (kt)
{
case 1: kt = 49; break; // 1
case 2: kt = 50; break; // 2
case 3: kt = 51; break; // 3
//case 4: kp = 65; break; // A
case 5: kt = 52; break; // 4
case 6: kt = 53; break; // 5
case 7: kt = 54; break; // 6
//case 8: kp = 66; break; // B
case 9: kt = 55; break; // 7
case 10: kt = 56; break; // 8
case 11: kt = 57; break; // 9
//case 12: kp = 67; break; // C
case 13: kt = 42; break; // *
case 14: kt = 48; break; // 0
case 15: kt = 35; break; // #
//case 16: kp = 68; break; // D
}
CustomChar(1,10);
ku = 0;
do
ku = Keypad_Key_Click(); // Store key code in kp variable
while (!ku);
// Prepare value for output, transform key to it's ASCII value
switch (ku)
{
case 1: ku = 49; break; // 1
case 2: ku = 50; break; // 2
case 3: ku = 51; break; // 3
//case 4: kp = 65; break; // A
case 5: ku = 52; break; // 4
case 6: ku = 53; break; // 5
case 7: ku = 54; break; // 6
//case 8: kp = 66; break; // B
case 9: ku = 55; break; // 7
case 10: ku = 56; break; // 8
case 11: ku = 57; break; // 9
//case 12: kp = 67; break; // C
case 13: ku = 42; break; // *
case 14: ku = 48; break; // 0
case 15: ku = 35; break; // #
//case 16: kp = 68; break; // D
}
CustomChar(1,11);
ky = 0;
do
ky = Keypad_Key_Click(); // Store key code in kp variable
while (!ky);
// Prepare value for output, transform key to it's ASCII value
switch (ky)
{
case 1: ky = 49; break; // 1
case 2: ky = 50; break; // 2
case 3: ky = 51; break; // 3
//case 4: kp = 65; break; // A
case 5: ky = 52; break; // 4
case 6: ky = 53; break; // 5
case 7: ky = 54; break; // 6
//case 8: kp = 66; break; // B
case 9: ky = 55; break; // 7
case 10: ky = 56; break; // 8
case 11: ky = 57; break; // 9
//case 12: kp = 67; break; // C
case 13: ky = 42; break; // *
case 14: ky = 48; break; // 0
case 15: ky = 35; break; // #
//case 16: kp = 68; break; // D
}
CustomChar(1,12);
// For demonstration this is set to 270695 - Gloria's birth date. This would need to be
// changed in practice as a very poor choice. (Anyone knowing her well could enter!!!
// I am a former security professional - believe me, I KNOW. This must be converted from
// ASCII values, hence 50,55,48,54,57,53 for 270695.
// Pour démonstration, la valeur est 270695 - la date de naissance de Gloria. Cela devrait être
// a changé en pratique comme un très mauvais choix. (Tous ceux qui la connaissent bien peuvent participer !!!
// Je suis un ancien professionnel de la sécurité – croyez-moi, je SAIS. Celui-ci doit être converti de
// Valeurs ASCII, donc 50,55,48,54,57,53 pour 270695.
Delay_ms(300);
if(kp==50 && ks==55 && kr==48 && kt==54 && ku==57 && ky==53)
{
Lcd_Out(2, 1, "code vrai ");
for(i=0;i<15;i++){
portD.F1=1; //servo 90°degrée
Delay_us(2000);
portD.F1=0;}
}
else
{
Lcd_Out(2, 1, "code incorrect ");
Sound_Play (2000, 400); //générer du son
Sound_Play (1000, 260); //générer du son
Sound_Play (2000, 400); //générer du son
for(i=0;i<15;i++){
portD.F1=1; //servo 90°degrée
Delay_us(1500);
portD.F1=0;}
}
Delay_ms(3000);
} while (1);
}