当前位置: 首页 > news >正文

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

门锁控制电路

二、设计思路

电路设计

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

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

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

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

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

#include<reg51.h>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 P2void 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<n;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 screenlcd_cmd(0x0E); //Display On, Cursor Blinkinglcd_cmd(0x38); //2 lines and 5*7 matrixlcd_cmd(0x80); //Force Cursor to beginning of firstdisplay("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;}}
}

http://www.lryc.cn/news/297086.html

相关文章:

  • 比较Kamailio和OpenSIPS的重写contact函数
  • 【ETOJ P1046】斐波那契数列 题解(数学+动态规划)
  • 编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本
  • Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
  • 【PTA浙大版《C语言程序设计(第4版)》|编程题】习题7-3 判断上三角矩阵(附测试点)
  • JVM 性能调优 - 参数调优(3)
  • Django(十)
  • OpenHarmony开源鸿蒙开发之旅
  • SpringBoot之整合PageHelper分页插件
  • Android java基础_类的封装
  • Vue-57、Vue技术路由的参数如何传递
  • 《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
  • Linux 软件管理(YUM RPM)
  • 【Makefile语法 05】动静态库编译链接
  • JS - 处理元素滚动
  • JavaScript滚动事件
  • 4.0 Zookeeper Java 客户端搭建
  • C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?
  • 3.1 Verilog 连续赋值
  • 【http】2、http request header Origin 属性、跨域 CORS、同源、nginx 反向代理、预检请求
  • LangChain pdf的读取以及向量数据库的使用
  • VUE学习——事件修饰符
  • 开放平台技术架构设计与实现的实战总结
  • 飞桨自然语言处理框架 paddlenlp的 trainer
  • SQL世界之命令语句Ⅲ
  • Snoop Version 2 Packet Capture File Format
  • 扩展说明: 指令微调 Llama 2
  • VUE 全局设置防重复点击
  • 备战蓝桥杯---动态规划(基础1)
  • CVE-2018-19518 漏洞复现