【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.电源部分:使用BATTERY为整个电路提供电源,可以在电路中加入一个电 源开关,以便控制电源的开启和关闭。 2.处理器部分:使用AT89C51芯片作为主处理器,通过编写程序实现门锁的 …...
比较Kamailio和OpenSIPS的重写contact函数
Kamailio:调用set_contact_alias()之后,在原有的contact的后面增加参数,具体地说,就是网络地址,网络端口和transport,好处是收到后续请求之时可以恢复原有contact的内容(当然也有坏处࿰…...
【ETOJ P1046】斐波那契数列 题解(数学+动态规划)
题目描述 给定一个整数 T T T,表示样例数。 对于每个样例,给定一个整数 n n n,求斐波那契数列的第 n n n 项。 斐波那契数列定义为 f ( 1 ) f ( 2 ) 1 f(1) f(2) 1 f(1)f(2)1, f ( n ) f ( n − 1 ) f ( n − 2 ) f(…...
编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本
1. 背景 在新公司的脚手架中开发,需要用到redis,发现没有封装好一套能集成各种常用命令、包括Lua脚本的方便使用的RedisTemplateClient,于是自己来实现下; springboot整合redis之后,提供了操作redis的简便方式&#…...
Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
文章目录 简介Asp .Net Core 集成 Panda.DynamicWebApi配置原理什么是POCO Controller?POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigurePar…...
【PTA浙大版《C语言程序设计(第4版)》|编程题】习题7-3 判断上三角矩阵(附测试点)
目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。 本题要求编写程序,判断一个给定的方阵是否…...
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请求 浏览器向网站发送请求时:URL 和 表单的形式提交。 GETPOST 特点:页面刷新。 除此之外,也可以基于Ajax向后台发送请求(偷偷的发送请求)。 依赖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基础_类的封装
一.面向对象编程的引入 写一个简单的程序输出张三,李四的名字 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参数,to的字符串写法--> <router-link :to"/home/message/detail?id${p.id}&title${p.title}"> {{p.title}} </router-link><!-- 跳转路由…...
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
文章目录 1.1 MySQL 概览:版本、特性和生态系统1.1.1 基础知识1.1.2 重点案例:使用 Python 实现 MySQL 数据的 CRUD 操作1.1.3 拓展案例 1:使用 Python 实现 MySQL 数据备份**1.1.4 拓展案例 2:使用 Python 分析 MySQL 数据 1.2 安…...
Linux 软件管理(YUM RPM)
1 YUM yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次…...
【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 - 处理元素滚动
业务功能中时常有元素滚动的功能,现在就总结一下一些常用的事件。 一、定位滚动元素 做一切滚动操作之前都应该先定位到滚动元素,再做其他操作,如滚动顶部,获取滚动距离、禁止滚动等。 把以下代码复制粘贴到浏览器 Console 面板…...
JavaScript滚动事件
🧑🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ✨ 前言 滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助…...
4.0 Zookeeper Java 客户端搭建
本教程使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在maven中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍:…...
C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?
目录 1.使用动态数组(ArrayList): 2.使用 jagged array(不规则数组): 3.使用 List : 4.使用数组复制: 在C#中,数组的长度是固定的,一旦声明和初始化&…...
3.1 Verilog 连续赋值
关键词:assign, 全加器 连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。: 格式如下 assign LHS_target RHS_expression ; LHS(left hand side) 指赋值操作…...
基于Playwright的Instagram自动化技能包:原理、实现与智能体集成
1. 项目概述与核心价值最近在折腾个人智能助理,想让它能帮我处理一些社交媒体上的琐事,比如自动查看Instagram上的新动态、给特定帖子点赞或者保存一些有趣的图片。在网上搜了一圈,发现了一个叫adamanz/instagram-skill的开源项目,…...
Cadence Allegro自定义快捷键全攻略:从env文件到Skill脚本
1. 项目概述:为什么我们需要自定义快捷键?如果你是一名电子工程师,或者经常使用Cadence Allegro进行PCB设计,那么对软件自带的默认快捷键一定又爱又恨。爱的是,它确实提供了一些基础的操作加速;恨的是&…...
终极B站视频下载指南:BilibiliDown一键解锁高清视频下载
终极B站视频下载指南:BilibiliDown一键解锁高清视频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors…...
从MobileNetV1到RetinaFace:轻量化主干网络在人脸检测中的架构演进与实践
1. 轻量化主干网络的演进背景与需求 在移动端和嵌入式设备上实现实时人脸检测一直是计算机视觉领域的重要挑战。传统的人脸检测算法如Viola-Jones虽然计算量小,但在复杂场景下的检测精度有限。随着深度学习技术的发展,基于卷积神经网络的人脸检测方法逐渐…...
OpenMC多群截面计算的3个颠覆性优化策略:从理论到工程实践
OpenMC多群截面计算的3个颠覆性优化策略:从理论到工程实践 【免费下载链接】openmc OpenMC Monte Carlo Code 项目地址: https://gitcode.com/gh_mirrors/op/openmc 核反应堆物理计算中,多群截面精度直接决定了整个模拟系统的可靠性。传统方法在处…...
PowerVR Series2NX NNA架构解析:终端AI加速器的能效与工程实践
1. 项目概述:从“看得见”到“看得懂”的芯片革命在移动设备、智能摄像头乃至汽车座舱里,我们早已习惯了人脸解锁、实时美颜、物体识别这些功能。这些功能背后,都离不开一个核心引擎:神经网络加速器。今天要聊的,就是I…...
如何用BilibiliDown轻松下载B站视频:3分钟掌握完整操作指南
如何用BilibiliDown轻松下载B站视频:3分钟掌握完整操作指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirr…...
如何5分钟掌握Ketcher:化学绘图从零到精通的完整指南
如何5分钟掌握Ketcher:化学绘图从零到精通的完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 你是否经常为绘制复杂的化学结构而烦恼?面对论文投稿、实验报告或教学演示时&a…...
Termius中文版:安卓SSH客户端的完整汉化解决方案
Termius中文版:安卓SSH客户端的完整汉化解决方案 【免费下载链接】Termius-zh_CN 汉化版的Termius安卓客户端 项目地址: https://gitcode.com/alongw/Termius-zh_CN 对于需要频繁管理远程服务器的中文用户来说,英文界面的SSH客户端常常成为技术操…...
如何快速掌握AMD处理器调试工具:从新手到专家的完整指南
如何快速掌握AMD处理器调试工具:从新手到专家的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…...
