基于单片机的门锁控制电路【51单片机Keil+Proteus8.9】

门锁控制电路
二、设计思路

电路设计

1.电源部分:使用BATTERY为整个电路提供电源,可以在电路中加入一个电 源开关,以便控制电源的开启和关闭。

2.处理器部分:使用AT89C51芯片作为主处理器,通过编写程序实现门锁的 控制。AT89C51芯片具有丰富的I/O端口,可以方便地与外部器件进行通信。

3.按键输入部分:使用KEYPAD-SMALL实现按键输入。设计一个简单的矩阵 键盘,包括数字0-9、确认键、取消键和解锁键等。当用户按下相应的按键 时,处理器将接收按键输入并执行相应的操作。

4.显示部分:使用LM016L液晶显示屏显示当前门锁的状态和操作提示等信 息。处理器通过液晶驱动器与LM016L连接,控制显示的内容和方式。

5.电机驱动部分:使用L293D电机驱动芯片驱动MOTOR,实现门锁的开关操 作。处理器通过输出口连接L293D的输入引脚,控制电机的转动方向和速度。

#include
 
typedef unsigned char u8;
typedef unsigned int u16;
 
sbit RS = P3^0;
sbit EN = P3^1;
sbit IN1 = P3^2;
sbit IN2 = P3^3;
 
#define KEY P1
#define DIS P2
 
void delay_10us(u8 ten_us)
{
    while(ten_us--);
}
 
u8 get_key()
{
    u8 key_value = 16;
    KEY = 0xF7;
    if(KEY!=0xF7)
    {
        delay_10us(1000);
        switch(KEY)
        {
            case 0x77: key_value = '+';break;
            case 0xB7: key_value = '=';break;
            case 0xD7: key_value = '0';break;
            case 0xE7: key_value = 'c';break;
        }
    }
    while(KEY!=0xF7);
    
    KEY = 0xFB;
    if(KEY!=0xFB)
    {
        delay_10us(1000);
        switch(KEY)
        {
            case 0x7B: key_value = '-';break;
            case 0xBB: key_value = '3';break;
            case 0xDB: key_value = '2';break;
            case 0xEB: key_value = '1';break;
        }
    }
    while(KEY!=0xFB);
    
    KEY = 0xFD;
    if(KEY!=0xFD)
    {
        delay_10us(1000);
        switch(KEY)
        {
            case 0x7D: key_value = 'x';break;
            case 0xBD: key_value = '6';break;
            case 0xDD: key_value = '5';break;
            case 0xED: key_value = '4';break;
        }
    }
    while(KEY!=0xFD);
    
    KEY = 0xFE;
    if(KEY!=0xFE)
    {
        delay_10us(1000);
        switch(KEY)
        {
            case 0x7E: key_value = '/';break;
            case 0xBE: key_value = '9';break;
            case 0xDE: key_value = '8';break;
            case 0xEE: key_value = '7';break;
        }
    }
    while(KEY!=0xFE);
    
    return key_value;
}
 
void delay(int n)
{
    int i,j;
    for(i=0;i     for(j=0;j<255;j++);
}
void lcd_cmd(char a)
{
    DIS = a;
    RS = 0;
    EN = 1;
    delay(10);
    EN = 0;
}
 
void lcd_data(char a)
{
    DIS = a;
    RS = 1;
    EN = 1;
    delay(10);
    EN = 0;
}
 
void display(char *ptr)
{
    while(*ptr != '\0')
    {
        lcd_data(*ptr);
        ptr++;
    }
}
 
void main()
{
    u8 key_value;
    char password[4] = "7163";
    u8 res=0;
    u8 i=0;
    lcd_cmd(0x01); //clear screen
    lcd_cmd(0x0E); //Display On, Cursor Blinking
    lcd_cmd(0x38); //2 lines and 5*7 matrix
    lcd_cmd(0x80); //Force Cursor to beginning of first
    display("PASSWORD:");
    lcd_cmd(0xC0);
    display("----     ");
    lcd_cmd(0xC0);
    while(1)
    {
        key_value = get_key();
        if(key_value<='9'&&key_value>='0')
        {
            lcd_data(key_value);
            if(password[i]==key_value)res++;
            i++;
            if(i==4){
                lcd_cmd(0xC0);
                if(res==4){
                    display("CORRECT");
                    IN1=1;
                    IN2=0;
                }
                else{
                    display("INCORRECT");
                }
                i=0;
                res=0;
            }
        }else if(key_value=='c')
        {
            lcd_cmd(0xC0);
            display("----     ");
            lcd_cmd(0xC0);
            IN1=0;
            IN2=0;
        }
    }
}

你可能感兴趣的:(单片机,51单片机,嵌入式硬件)