当前位置: 首页 > 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;}}
}

相关文章:

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

门锁控制电路 二、设计思路 电路设计 1.电源部分&#xff1a;使用BATTERY为整个电路提供电源&#xff0c;可以在电路中加入一个电 源开关&#xff0c;以便控制电源的开启和关闭。 2.处理器部分&#xff1a;使用AT89C51芯片作为主处理器&#xff0c;通过编写程序实现门锁的 …...

比较Kamailio和OpenSIPS的重写contact函数

Kamailio&#xff1a;调用set_contact_alias()之后&#xff0c;在原有的contact的后面增加参数&#xff0c;具体地说&#xff0c;就是网络地址&#xff0c;网络端口和transport&#xff0c;好处是收到后续请求之时可以恢复原有contact的内容&#xff08;当然也有坏处&#xff0…...

【ETOJ P1046】斐波那契数列 题解(数学+动态规划)

题目描述 给定一个整数 T T T&#xff0c;表示样例数。 对于每个样例&#xff0c;给定一个整数 n n n&#xff0c;求斐波那契数列的第 n n n 项。 斐波那契数列定义为 f ( 1 ) f ( 2 ) 1 f(1) f(2) 1 f(1)f(2)1&#xff0c; f ( n ) f ( n − 1 ) f ( n − 2 ) f(…...

编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本

1. 背景 在新公司的脚手架中开发&#xff0c;需要用到redis&#xff0c;发现没有封装好一套能集成各种常用命令、包括Lua脚本的方便使用的RedisTemplateClient&#xff0c;于是自己来实现下&#xff1b; springboot整合redis之后&#xff0c;提供了操作redis的简便方式&#…...

Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi

文章目录 简介Asp .Net Core 集成 Panda.DynamicWebApi配置原理什么是POCO Controller&#xff1f;POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigurePar…...

【PTA浙大版《C语言程序设计(第4版)》|编程题】习题7-3 判断上三角矩阵(附测试点)

目录 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码呈现 测试点 上三角矩阵指主对角线以下的元素都为0的矩阵&#xff1b;主对角线为从矩阵的左上角至右下角的连线。 本题要求编写程序&#xff0c;判断一个给定的方阵是否…...

JVM 性能调优 - 参数调优(3)

查看 JVM 内存的占用情况 编写代码 package com.test;public class PrintMemoryDemo {public static void main(String[] args) {// 堆内存总量long totalMemory Runtime.getRuntime().totalMemory();// jvm 试图使用的最大堆内存long maxMemory Runtime.getRuntime().maxM…...

Django(十)

1. Ajax请求 浏览器向网站发送请求时&#xff1a;URL 和 表单的形式提交。 GETPOST 特点&#xff1a;页面刷新。 除此之外&#xff0c;也可以基于Ajax向后台发送请求&#xff08;偷偷的发送请求&#xff09;。 依赖jQuery编写ajax代码 $.ajax({url:"发送的地址"…...

OpenHarmony开源鸿蒙开发之旅

文章目录 一、op系统架构二、op系统构建1. op源代码目录2. op系统构建3. op开发环境搭建 三、op系统的子系统四、op系统芯片移植五、op系统启动流程六、op系统组件七、驱动框架 一、op系统架构 二、op系统构建 1. op源代码目录 2. op系统构建 3. op开发环境搭建 三、op系统…...

SpringBoot之整合PageHelper分页插件

SpringBoot之整合PageHelper分页插件 文章目录 SpringBoot之整合PageHelper分页插件1. 引入坐标2. application.yml配置3. 基本使用4. 对多个查询执行分页1. 默认第一个Select语句会执行分页2. 让Pagehelper也能执行多个分页的方法3. 完整案例 详细配置请查看官网或MyBatis分页…...

Android java基础_类的封装

一.面向对象编程的引入 写一个简单的程序输出张三&#xff0c;李四的名字 class Person {String name;String getName() {return "guangdong "name;} };public class Oop {public static void main(String args[]) {Person p1 new Person();p1.name "zhangs…...

Vue-57、Vue技术路由的参数如何传递

query参数传递 1、传递参数 <!-- 跳转路由并携带query参数&#xff0c;to的字符串写法--> <router-link :to"/home/message/detail?id${p.id}&title${p.title}"> {{p.title}} </router-link><!-- 跳转路由…...

《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)

文章目录 1.1 MySQL 概览&#xff1a;版本、特性和生态系统1.1.1 基础知识1.1.2 重点案例&#xff1a;使用 Python 实现 MySQL 数据的 CRUD 操作1.1.3 拓展案例 1&#xff1a;使用 Python 实现 MySQL 数据备份**1.1.4 拓展案例 2&#xff1a;使用 Python 分析 MySQL 数据 1.2 安…...

Linux 软件管理(YUM RPM)

1 YUM yum&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动处理依赖性关系&#xff0c;并且一次安装所有依赖的软件包&#xff0c;无须繁琐地一次次…...

【Makefile语法 05】动静态库编译链接

目录 一、多文件项目源代码 二、静态库编译链接 三、动态库编译链接 一、多文件项目源代码 // include/add.hpp#pragma once int add(int a, int b); // include/sub.hpp#pragma once int sub(int a, int b); // src/add.cpp#include "add.hpp"int add(int a, …...

JS - 处理元素滚动

业务功能中时常有元素滚动的功能&#xff0c;现在就总结一下一些常用的事件。 一、定位滚动元素 做一切滚动操作之前都应该先定位到滚动元素&#xff0c;再做其他操作&#xff0c;如滚动顶部&#xff0c;获取滚动距离、禁止滚动等。 把以下代码复制粘贴到浏览器 Console 面板…...

JavaScript滚动事件

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助…...

4.0 Zookeeper Java 客户端搭建

本教程使用的 IDE 为 IntelliJ IDEA&#xff0c;创建一个 maven 工程&#xff0c;命名为 zookeeper-demo&#xff0c;并且引入如下依赖&#xff0c;可以自行在maven中央仓库选择合适的版本&#xff0c;介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍&#xff1a;…...

C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?

目录 1.使用动态数组&#xff08;ArrayList&#xff09;&#xff1a; 2.使用 jagged array&#xff08;不规则数组&#xff09;&#xff1a; 3.使用 List &#xff1a; 4.使用数组复制&#xff1a; 在C#中&#xff0c;数组的长度是固定的&#xff0c;一旦声明和初始化&…...

3.1 Verilog 连续赋值

关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; 格式如下 assign LHS_target RHS_expression &#xff1b; LHS&#xff08;left hand side&#xff09; 指赋值操作…...

告别黑屏!手把手教你为NT35510屏幕适配TouchGFX显示驱动(基于STM32CubeIDE)

深度解析NT35510屏幕与TouchGFX的驱动适配实战 在嵌入式GUI开发领域&#xff0c;TouchGFX凭借其流畅的动画效果和高效的渲染引擎&#xff0c;已成为STM32平台上的首选框架之一。然而&#xff0c;当开发者尝试在非官方支持的屏幕上使用TouchGFX时&#xff0c;底层显示驱动的适配…...

YOLOv8模型训练避坑指南:GTX16系列显卡兼容性问题解决方案

GTX16系列显卡用户必读&#xff1a;YOLOv8模型训练全流程避坑手册 当你在GTX16系列显卡上运行YOLOv8训练脚本时&#xff0c;是否遇到过这样的场景&#xff1a;训练过程看似正常&#xff0c;但最终输出的P&#xff08;精确率&#xff09;、R&#xff08;召回率&#xff09;、mAP…...

AcousticSense AI避坑指南:常见问题解决,确保你的音乐识别流程顺畅运行

AcousticSense AI避坑指南&#xff1a;常见问题解决&#xff0c;确保你的音乐识别流程顺畅运行 关键词&#xff1a;AcousticSense AI、音乐流派识别、问题排查、音频处理、ViT模型、梅尔频谱图、故障解决、部署指南 摘要&#xff1a;部署AcousticSense AI进行音乐流派识别时&…...

Clawdbot汉化版实测:企业微信接入AI客服,响应速度提升92%

Clawdbot汉化版实测&#xff1a;企业微信接入AI客服&#xff0c;响应速度提升92% 1. 企业客服场景的痛点与解决方案 1.1 传统客服面临的挑战 在电商和客户服务领域&#xff0c;企业微信已成为重要的客户沟通渠道。然而传统客服模式存在三个核心问题&#xff1a; 响应延迟&a…...

状态方程离散化

基于二阶RC卡尔曼滤波EKF的锂电池SOC估计仿真 仿真数据&#xff1a;HPPC工况&#xff0c;模型中自带数据 附带卡尔曼滤波EKF算法说明文档 图1&#xff1a;真实值与估计值对比曲线 图2&#xff1a;误差率波形 图3&#xff1a;估算SOC锂电池的荷电状态&#xff08;SOC&#xff09…...

实战应用:基于快马构建多维智能限流系统,精细化管控API访问

在构建现代Web服务时&#xff0c;API限流是保障系统稳定性的重要防线。最近我在处理一个电商平台的流量管控需求时&#xff0c;深刻体会到"rate limit exceeded"不仅是简单的错误提示&#xff0c;更是系统自我保护的关键机制。下面分享如何用InsCode(快马)平台快速搭…...

VSCode安装与Qwen3开发环境配置一站式解决方案

VSCode安装与Qwen3开发环境配置一站式解决方案 为智能字幕开发量身打造的高效开发环境配置指南 1. 开篇&#xff1a;为什么需要专门的环境配置&#xff1f; 你是不是也遇到过这样的情况&#xff1a;好不容易下载了代码&#xff0c;却发现各种依赖报错&#xff0c;环境配置折腾…...

【C++ 面试突击 · 05】大厂高频面试题:从内联函数到内存管理全梳理

目录 一、什么是inline函数&#xff1f; 二、inline函数的优缺点&#xff1f; 三、inline和宏定义的比较&#xff1f; 四、虚函数&#xff08;virtual&#xff09;可以是内联函数&#xff08;inline&#xff09;吗&#xff1f; 五、C中struct和class的区别&#xff1f; 六…...

从期末试卷到实战指南:通信原理核心考点深度解析与应用

1. 从试卷到实战&#xff1a;HDB3码的工程应用解析 当年我第一次在实验室调试E1线路时&#xff0c;遇到时钟同步问题差点崩溃。示波器上那些诡异的波形让我突然想起期末考卷里那道HDB3码的考题——原来教授不是在为难我们&#xff0c;而是在为今天的实战埋下伏笔。 HDB3码作为通…...

OpenCV手眼标定避坑指南:inner和outer内参到底怎么选?

OpenCV手眼标定避坑指南&#xff1a;inner和outer内参到底怎么选&#xff1f; 在工业自动化领域&#xff0c;手眼标定&#xff08;Eye to Hand&#xff09;是连接视觉系统与机械臂的关键技术环节。许多工程师在使用OpenCV进行标定时&#xff0c;常常对getOptimalNewCameraMatri…...