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

【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 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<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 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;
		}
	}
}


http://www.kler.cn/news/233343.html

相关文章:

  • 法国实习面试——计算机相关专业词汇
  • ElasticSearch之倒排索引
  • 车载测试中:如何处理 bug
  • SparkJDBC读写数据库实战
  • c#表达式树(MemberInitExpression)成员初始化表达式
  • 工厂方法模式(Factory Method Pattern)
  • 【开源计算机视觉库OpencV详解——超详细】
  • 【Scala】 2. 函数
  • containerd中文翻译系列(十)镜像验证
  • 《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(11)
  • Python学习路线 - Python高阶技巧 - PySpark案例实战
  • Javaweb之SpringBootWeb案例之异常处理功能的详细解析
  • C#中的浅度和深度复制(C#如何复制一个对象)
  • 深度学习技巧应用36-深度学习模型训练中的超参数调优指南大全,总结相关问题与答案
  • UI自动化之Poco常用断言方式
  • RCE(命令执行)知识点总结最详细
  • [day0] 借着“ai春晚”开个场
  • 单片机学习笔记---LED点阵屏显示图形动画
  • 从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets
  • 计算机网络(第六版)复习提纲25
  • Windows 远程桌面提示没有远程桌面授权服务器可以提供许可证
  • Unity3D实现项目限制功能(使用次数限制和时间限制)
  • 【C++】引用与内联
  • 【Flink】SQL-CLIENT中出现 Could not find any factory for identifier ‘kafka‘
  • 5 scala的函数式编程简介
  • 【QT】Graphics View绘图架构
  • 【Redis】深入理解 Redis 常用数据类型源码及底层实现(3.详解String数据结构)
  • Vue源码系列讲解——虚拟DOM篇【二】(Vue中的DOM-Diff)
  • 【linux开发工具】vim详解
  • SpringBoot WebSocket客户端与服务端一对一收发信息