【毕业设计】58-基于51单片机的智能语音密码锁设计(原理工程+PCB工程+仿真工程+源代码+答辩论文+实物图)


typora-root-url: ./

【毕业设计】58-基于51单片机的智能语音密码锁设计(原理工程+PCB工程+仿真工程+源代码+答辩论文+实物图)

任务书

主要研究内容:

掌握电子密码锁的原理、构造、以及运用51单片机设计出一款简易密码锁,实现相应的一些要求;掌握并且实际运用所学知识,将书中知识转化为实际能力;对密码锁的应用和未来的发展进行分析。

研究方法:

通过相关的书籍和网上资料,查阅相关资料,收集有用的信息。研究已有的设计,逐步完善自己的设计,同时咨询指导老师,以达到专业标准,顺利完成合格的设计。

要求:

设计一个具有设置数字密码任设、存储、画面显示、语言播报以及具有报警功能的密码锁。密码锁具有语言播报和状态显示功能。一次性只允许三次密码输入操作,支持密码修改。具有报警功能。

原理图工程文件
原理图截图
PCB工程文件
仿真模型工程文件
源代码工程
仿真截图
实物图片
答辩论文低重复率文档,26009字
英文文献及翻译
任务书

设计说明书

摘要

本次设计基于51单片机的智能语音密码锁设计,电子密码锁需要实现密码锁的开锁、解锁、以及更改密码等功能,再通过LED灯和蜂鸣器辅助表示其状态等功能。需要使用51单片机及其外围电路组成控制系统。单片机最小系统、LCD1602显示器、键盘、AT2402储存器、蜂鸣器、LED、语音模块、喇叭组合而成。

通过对当前关于锁的发展背景分析,确定系统功能实现。然后对系统的硬件与软件进行设计。整个系统是以模块化的形式设计电路的各个子电路为一个功能模块,最后汇总到一起组成的控制系统应用电路。软件设计同样是以模块化的形式编写程序,按照功能对软件驱动划分最后调用到主函数中。最后制作实物,通过对系统电路连接,并将程序导入到单片中,运行调试。

最后测试系统功能与系统稳定性,总结完成设计的相应功能,完成了本次的设计。

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 电子密码锁的研究背景… 2

第二节 电子密码锁的研究现状及趋势… 3

一、研究现状… 3

二、研究趋势… 3

第三节 电子密码锁的研究意义… 4

第四节 论文主要研究内容… 5

第五节 本章小节… 6

第二章 电子密码锁的设计方案… 7

第一节 系统的设计功能分析… 7

第二节 元器件使用方案选择… 7

一、主控制器选择… 7

二、显示器件的选择… 8

第二节 电子密码锁的系统结构… 9

第三节 本章小结… 9

第三章 电子密码锁的硬件设计… 11

第一节 单片机最小系统… 11

第二节 矩阵按键电路… 12

第三节 AT24C02电路… 13

第四节 LCD1602显示器电路… 14

第五节 蜂鸣器及LED电路… 14

第六节 语音播报电路… 15

第六节 电源电路… 16

第七节 系统的总电路… 17

第八节 本章小结… 18

第四章 系统的软件设计… 19

第一节 编程软件的介绍… 19

第二节 主程序设计… 20

第三节 AT24C02程序设计… 21

第四节 矩阵键盘程序设计… 21

第五节 蜂鸣器报警及LED程序设计… 22

第六节 LCD1602显示程序设计… 23

第七节 语音播报程序设计… 24

第八节 本章小结… 25

第五章 实物制作与调试… 26

第一节 实物制作与调试… 26

第三节 功能测试… 28

第四节 本章小节… 34

结 论… 35

致 谢… 37

参考文献… 38

附 录… 40

一、英文原文… 40

二、英文翻译… 43

三、源代码… 46

设计说明书及设计文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开发项目需要使用的软件,百度云共享
AD16
链接:https://pan.baidu.com/s/1FIhJkE0Pv2mRxJIooRzKNA
提取码:uqvd
Keil4
链接:https://pan.baidu.com/s/1_0qtwROJ6hDeioyG0XL-xg
提取码:t82c
Visio
链接:https://pan.baidu.com/s/1aS8FCZat7lAdHjclNa8owA
提取码:l9o1
Proteus
链接:https://pan.baidu.com/s/1GinRzP3QHtfVOIBxJ5yD3w
提取码:u0vb

其他资料

matlab2018b
链接:https://pan.baidu.com/s/1xVTUiPleysWvhy-Xl_JqNg
提取码:4tpn

NI Multisim 14.0
链接:https://pan.baidu.com/s/15K4Lms3Jx0ba3DPXTxVCeQ
提取码:vwpy

本文资料提取:资料

源码展示

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

uchar  i;		//变量
 
sbit relay = P2^2;  //继电器定义
sbit beep  = P3^3;  //蜂鸣器定义

sbit beiguan = P2^3;  //背光

uint flag_time;

uint flag_guan;

uchar dis_smg[7]={0};

uchar password[7]={0};	    //密码保存
uchar password_bj[7]={0};	//密码比较
uchar code password_r[6]  = {1,2,3,1,2,3} ;
uchar code password_gl[6] = {5,2,0,0,2,5} ;
uchar password_xg[6];	//密码修改
uchar flag_password;      //密码正确否
uchar flag_password_cichu1;//密码错误次数

uchar flag_200ms=1;     //200毫秒的变量
  
uchar menu_1,menu_i;

/***********************语音模块控制IO口的定义************************/
sbit  VBUSY = P3^4;	    //忙脚
sbit  VDATA = P3^5; 	//数据输入脚
sbit  VCS   = P3^6;     //片选脚
sbit  VCLK  = P3^7;	    //时钟脚  

sbit scl = P2^1;	//24c02信号引脚 
sbit sda = P2^0;    //24c02数据引脚 
 
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

/***********************语音模块子程序************************/
void Send_threelines(unsigned char addr) 
{
   unsigned char i;
 	VCS=0;		  //片选脚 低电平
     for(i=0;i<8;i++)   //8位的数据 要循环8次1位1位的写入
	{
		VCLK=0;		 //时钟脚 低电平
		if(addr&0x01 == 0x01)
		{
			VDATA=1;		 //数据输入脚 写数据1
		}
		else 
			VDATA=0;		 //数据输入脚 写数据0
		addr<<=1;	  //数据左移一位
		VCLK=1;		   //时钟脚   高电平
	}
	VCS=1;	    //片选脚 高电平
	while(VBUSY == 0);	  //忙等待
}
 
sbit rs=P2^5;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit rw=P2^6;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit e =P2^7;	 //片选信号   下降沿触发

/********************************************************************
* 名称 : delay_uint()
* 功能 : 小延时。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_uint(uint q)
{
	while(q--);
}

/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602指令函数
* 输入 : 输入的指令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
 	rs=0;	     //写指令
	rw=0;	     //对1602写操作
	P0=com;	     //P0口对1602写指令数据 
	delay_uint(25);
	e=1;		 //e=1使能信号 
	delay_uint(100);   //延时一下等1602完成操作
	e=0;
}

/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
 	rs=1;	     //写数据
	rw=0;	     //对1602写操作
	P0=dat;	 	 //P0口对1602写数据 
	delay_uint(25);
	e=1;		 //e=1使能信号 
	delay_uint(100);   //延时一下等1602完成操作
	e=0;	
}
 
/*********************光标控制***********************/
void lcd1602_guanbiao(uchar open_off,uchar add)
{
	if(open_off == 1)   //开光标
	{
		write_com(0x80+add);              //将光标移动到秒个位
		write_com(0x0f);                //显示光标并且闪烁
	}
	else 
	{
		write_com(0x0c);   //关光标
	}		
}

/***********************lcd1602上显示两位十进制数************************/
void write_lcd2(uchar hang,uchar add,uchar date)
{
 	if(hang==1)   
		write_com(0x80+add);		//1602写第一行的地址 
	else
		write_com(0x80+0x40+add);	//1602写第二行的地址 
 	write_data(0x30+date/10%10);	//显示十位数
	write_data(0x30+date%10);	    //显示个位数
}

/***********************lcd1602上显示这字符函数************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);	   //1602写第一行的地址 
	else
		write_com(0x80+0x40+add);   //1602写第二行的地址 
	while(1)														 
	{
		if(*p == '\0')  break;	//\0字符串的结尾标志  break结束while循环 结束写字符
		write_data(*p);	    //写数据 
		p++;	            //指针地址加1  
	}	
}

/***********************lcd1602初始化设置************************/
void init_1602()
{
	write_com(0x38);  //显示模式设置:16×2显示,5×7点阵,8位数据接口 不检测忙信号
	write_com(0x0c);  //开显示 不显示光标
	write_com(0x06);  //当写一个字符是,地址指针加 1
	write_string(1,0," Password Lock  ");	
	write_string(2,0," Input:         ");
	lcd1602_guanbiao(1,7+0x40);  //开光标 第2行第7位显示光标
}


/***************启始信号 ***************************/
void start()
{
	sda = 1;
	scl = 1;
	sda = 0;
	scl = 0;
}

/****************结束信号 **************************/
void stop()
{
	sda = 0;
	scl = 1;
	sda = 1;
	scl = 0; 
}

/*****************检测应答*************************/
void ack()
{
	uchar i;
	sda = 1;   
	scl = 1;	
	while((i < 100) & (sda == 1))	i++;
	scl =0;
}

/*****************非应答*************************/
void no_ack()
{
	sda = 1;
	scl = 1;
	scl = 0;
}

/*****************写一个字节*************************/
void write_iic(uchar dat)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		scl = 0;
		dat <<= 1 ;
		sda = CY;
		scl = 1;
	}
	scl = 0;
}



  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单片机6位数电子密码锁源码设计是基于单片机控制的密码输入和判断功能,可以实现锁的开关与密码的设置与改变。以下是一个简单的实现过程: 1. 硬件设计:基于该密码锁的电路设计需要包括单片机、键盘接口、显示屏、驱动电路和电源等部分。通过合适的布局设计和连接设计,保证各个模块能够正常工作。 2. 软件设计:基于C语言的单片机编程,通过读取键盘输入、判断输入密码是否正确等操作来实现密码锁的功能。具体步骤如下: a. 初始化:初始化单片机及外设,设置初始密码。 b. 输入密码:通过键盘输入6位数的密码,存储在单片机中。 c. 验证密码:将输入的密码与单片机存储的密码进行比较。如果密码匹配,显示屏显示"密码正确"并打开锁;如果不匹配,显示屏显示"密码错误"并保持锁的关闭状态。 d. 改变密码:在验证密码成功后,可以进入密码修改模式,通过输入新的6位数密码并存储到单片机中来改变密码。 3. PCB设计:基于软件设计和电路要求,通过软件工具进行PCB设计,包括布局、走线、添加电源和连接电路、引脚复用等。确保PCB电路板能够正常工作。 4. 仿真原理设计:在PCB设计完成后,可以通过仿真软件进行仿真原理设计。该步骤可以验证原理图的正确性,并通过仿真结果来检查电路是否符合设计需求。 因为字数有限,这里只给出了基本的实现步骤,实际的实现可能还涉及到更多的细节和优化的设计。希望这个回答对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值