Trong bài viết này, chúng tôi sẽ thực hiện khóa kỹ thuật số điện tử bằng bàn phím 4 × 3 và vi điều khiển 8051, về cơ bản, khóa điện tử là khóa được bảo vệ bằng mật khẩu và nó là một ứng dụng của bàn phím.
Hệ thống khóa cửa là một ví dụ về khóa điện tử và được bảo vệ bằng mật khẩu, chỉ mở khóa bằng mật khẩu cụ thể và được vận hành bằng điện với sự trợ giúp của hệ thống kiểm soát (MCU).
style="display:block"
data-ad-client="ca-pub-7421653222181531"
data-ad-slot="6551443556"
data-ad-format="auto"
data-full-width-responsive="true">
mô tả dự án
Ở đây tôi đã tạo ra một khóa điện tử bằng cách sử dụng vi điều khiển 8051 và bàn phím 4 × 3.
Trong bàn phím dự án này, sử dụng làm thiết bị đầu vào và màn hình LCD chữ số 16 × 2 sử dụng làm thiết bị đầu ra. Khi người dùng nhấn các phím của bàn phím thì vi điều khiển sẽ đọc giá trị của phím được nhấn và hiển thị trên LCD.
Ở đây tôi đã lưu mật khẩu trong chương trình khi người dùng nhập giá trị từ bàn phím, sau đó chúng tôi chỉ cần lưu các giá trị đã nhập này vào bộ đệm và so sánh nó với mật khẩu được lưu trữ.
Nếu chúng khớp với nhau thì chúng ta sẽ hiển thị thông báo của WELCOME 'trên LCD và di chuyển mô-tơ để mở khóa khóa điện tử. Thay vì, nếu giá trị do người dùng nhập không khớp với mật khẩu được lưu trữ, thì sẽ hiển thị thông báo của CÂU SAU PASSWORD trên màn hình LCD.
ví dụ
Giả sử trong chương trình tôi đã lưu trữ giá trị mật khẩu. Vì vậy, khi người dùng muốn mở khóa khóa điện tử, sau đó anh ta phải nhập giá trị Cẩu 1234 từ bàn phím. Tuy nhiên, nếu người dùng không nhập giá trị ra 12345, thì anh ta sẽ không thể mở khóa khóa điện tử.
Các thành phần cần thiết cho khóa điện tử
SN | THÀNH PHẦN |
1. | Vi điều khiển (AT89s52) |
2. | LCD 16 × 2 |
3. | Bàn phím 4 × 3 |
4. | Dao động (12 MHz) |
5. | Tụ gốm (22 PF - 2) |
6. | Tế bào (cung cấp năng lượng) |
7. | ULN 2003A |
số 8. | Đèn LED |
9. | Động cơ bước |
10. | Dây kết nối |
11. | Điện trở (10,1,2 k-ohm) |
Kết nối mạch của khóa điện tử kỹ thuật số
Trong hình ảnh bên dưới, tôi đã mô tả kết nối đơn giản của bàn phím số, LCD và động cơ bước với bộ điều khiển vi mô 8051.
Nếu bạn muốn tìm hiểu thêm về ngôn ngữ c, tại đây 10 ngày miễn phí (tối đa 200 phút) khóa học video C cho bạn.
Bản dùng thử miễn phí của bạn đang chờ
Chương trình mẫu cho khóa điện tử sử dụng vi điều khiển 8051
style="display:block"
data-ad-client="ca-pub-7421653222181531"
data-ad-slot="1710180414"
data-ad-format="auto"
data-full-width-responsive="true">
/*Hardware
--------
At89c51 @ 12MHz external crystal.
LCD
VSS - GND
VDD - +5V
VEE - connect with ground
RS - P1.0
RW - P1.1
E - P1.2
LCD_D0 - P3.0
LCD_D1 - P3.1
LCD_D2 - P3.2
LCD_D3 - P3.3
LCD_D4 - P3.4
LCD_D5 - P3.5
LCD_D6 - P3.6
LCD_D7 - P3.7
LED+ - +5V
LED- - GND
KEYPAD
COL_1 - P2.0
COL_2 - P2.1
COL_3 - P2.2
ROW_1 - P2.4
ROW_2 - P2.5
ROW_3 - P2.6
ROW_4 - P2.7
STEPPER MOTOR
COIL1 -P1.4
COIL2 -P1.5
COIL3 -P1.6
COIL4 -P1.7
*/
//Program Start from here
#include<reg51.h>
#include<string.h>
// macro
#define COL1 0
#define COL2 1
#define COL3 2
#define MAX_ROW 3
//LCD
#define LCD P3 /*Attached Lcd on Port*/
sbit rs = P1^0; /*Configure RS Pin*/
sbit rw = P1^1; /*Configure R/W pin*/
sbit e = P1^2; /*Configure Enable pin*/
//KEYPAD
#define KEYPAD P2
sbit COL_1 = P2^0;
sbit COL_2 = P2^1;
sbit COL_3 = P2^2;
sbit ROW_1 = P2^4;
sbit ROW_2 = P2^5;
sbit ROW_3 = P2^6;
sbit ROW_4 = P2^7;
//Stepper Motor
#define STEPPER_MOTOR P1
/*Function to write command on Lcd*/
void LcdCommand(const char cCommand);
/*Function to write command on Lcd*/
void LcdData(const char cData);
/*Function to display message on Lcd*/
void DisplayMessage(const char *pszMessage);
/*Function To Initialize Lcd*/
void LcdInit(void);
/*Function to Provide delay*/
void Delay(unsigned int);
/*Reset The Row*/
void DoResetRow(short siRowNumber);
/*Check Columnn*/
char Check_Column(void);
/*Read Col Status*/
char ReadColStatus(void);
/*move stepper motor forword*/
void SteeperMotarForword(void);
/*move stepper motor backword*/
void SteeperMotarBackword(void);
//Main
int main()
{
char ucData=0;
unsigned char cLen =0;
int iLenPassword =0;
char acBuffer[8]= {0};
const char *pcPassword= "12345";// Password
KEYPAD = 0x0F; //Make Row O/p & Col I/p
LCD = 0x00; //Make Lcd O/p
rs = rw = e =0; //O/p
STEPPER_MOTOR =0x00; //make o/p
iLenPassword = strlen(pcPassword); //Calculate length of password
LcdInit(); //initialize the lcd
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Enter Password:");
LcdCommand(0xc0); /*Address of DDRAM*/
while(1)
{
if(cLen < iLenPassword)
{
ucData = ReadColStatus(); /*Read column Status*/
LcdData(ucData); /*Display Enter Character On Lcd*/
acBuffer[cLen] = ucData; /*Store Enter value in Buf*/
cLen++;
}
else
{
if(!strncmp(pcPassword,acBuffer,iLenPassword))
{
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Door is Opening..");
SteeperMotarForword();
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x85); /*Address of DDRAM*/
DisplayMessage("Welcome");
Delay(700);
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Door is Closing..");
SteeperMotarBackword();
cLen=0;
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Enter Password:");
LcdCommand(0xc0); /*Address of DDRAM*/
}
else
{
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Access Denied..");
Delay(100);
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Wrong Password");
Delay(300);
LcdCommand(0x01); /*Clear the lcd*/
LcdCommand(0x80); /*Address of DDRAM*/
DisplayMessage("Enter Password:");
LcdCommand(0xc0); /*Address of DDRAM*/
cLen=0;
}
}
}
return 0;
}
/*Function to write command on Lcd*/
void LcdCommand(const char cCommand)
{
rs = 0;
rw = 0;
e = 1;
LCD = cCommand;
Delay(1);
e=0;
}
/*Function to write command on Lcd*/
void LcdData(const char cData)
{
rs = 1;
rw = 0;
e = 1;
LCD = cData;
Delay(1);
e=0;
}
/*Function to Display message on Lcd*/
void DisplayMessage(const char *pszMessage)
{
while(*pszMessage!='\0') //Till Null character
{
LcdData(*pszMessage);
pszMessage++;
}
}
/*Function to Provide Delay*/
void Delay(unsigned int i)
{
int j,k;
for(j=0; j<i; j++)
for(k=0; k<1275; k++);
}
/*Initialise the LCD_DATA*/
void LcdInit(void)
{
LcdCommand(0x01);
Delay(2);
LcdCommand(0x38);
Delay(2);
LcdCommand(0x06);
Delay(2);
LcdCommand(0x0c);
Delay(2);
}
//Read the status of column
char ReadColStatus(void)
{
char ucData='p';
while('p' == ucData)
{
ucData = Check_Column();
}
return ucData;
}
//To check the status of coloumn
char Check_Column(void)
{
short siColNumber=0;
const unsigned char ucaKeyPad[4][3] = //Key Pad 4x3
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
for(siColNumber = 0; siColNumber <= MAX_ROW; siColNumber++)
{
DoResetRow(siColNumber); /*Reset the row*/
if(COL_1 == 0)
{
Delay(30);
return ucaKeyPad[siColNumber][COL1];
}
if(COL_2 == 0)
{
Delay(30);
return ucaKeyPad[siColNumber][COL2];
}
if(COL_3 == 0)
{
Delay(30);
return ucaKeyPad[siColNumber][COL3];
}
}
return 'p';
}
void DoResetRow(short siRowNumber)
{
ROW_1=ROW_2=ROW_3=ROW_4= 1; /*Make all row high*/
switch(siRowNumber)
{
case 0:
ROW_1 =0;
break;
case 1:
ROW_2 =0;
break;
case 2:
ROW_3 =0;
break;
case 3:
ROW_4 =0;
break;
}
}
/*Function to move the stepper forword*/
void SteeperMotarForword(void)
{
short int siLoop =0;
while (siLoop < 9)
{
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0xc0;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x60;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x30;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x90;
Delay(10);
siLoop++;
}
}
/*Function to move the stepper backword*/
void SteeperMotarBackword(void)
{
short int siLoop = 0;
while (siLoop < 9)
{
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x30;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x60;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0xc0;
Delay(10);
STEPPER_MOTOR &=0x0f;
STEPPER_MOTOR |=0x90;
Delay(10);
siLoop++;
}
}
Làm việc của khóa điện tử
Kiểm tra video dưới đây để hiểu hoạt động của khóa điện tử.
Ý kiến của bạn
Ở đây tôi đã cố gắng giải thích sự kết hợp giữa bàn phím và LCD và cố gắng tạo một dự án mẫu. Tôi muốn biết suy nghĩ của bạn về chủ đề thảo luận ở trên, vì vậy đừng quên viết bình luận trong một hộp bình luận.
style="display:block"
data-ad-format="autorelaxed"
data-ad-client="ca-pub-7421653222181531"
data-ad-slot="2803770231">
No comments:
Post a Comment