基于C51单片机的电子密码锁的设计.docx

上传人:b****6 文档编号:5887599 上传时间:2023-01-01 格式:DOCX 页数:20 大小:361.65KB
下载 相关 举报
基于C51单片机的电子密码锁的设计.docx_第1页
第1页 / 共20页
基于C51单片机的电子密码锁的设计.docx_第2页
第2页 / 共20页
基于C51单片机的电子密码锁的设计.docx_第3页
第3页 / 共20页
基于C51单片机的电子密码锁的设计.docx_第4页
第4页 / 共20页
基于C51单片机的电子密码锁的设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于C51单片机的电子密码锁的设计.docx

《基于C51单片机的电子密码锁的设计.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的电子密码锁的设计.docx(20页珍藏版)》请在冰豆网上搜索。

基于C51单片机的电子密码锁的设计.docx

基于C51单片机的电子密码锁的设计

名称:

基于C51单片机的电子密码锁的设计

 

目录

第一章.引言1

第二章.系统概述2

2.1 系统说明:

2

2.2 功能简介:

2

第3章.所需芯片简介3

3.1 基于51内核系列单片机简介4

3.2 AT89C516

3.3 总体硬件设计7

第4章系统软件设计与调试15

第5章软件仿真技术在单片机系统设计中的运用16

5.1 基于Proteus的系统仿真18

结论19

致谢20

摘要:

单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等,无不含有CPU控制器,即单片机。

单片机实际上是一个硬件的芯片,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。

C51控制技术主要以MCS-51系列单片机为核心,以扩展输入、输出、显示、控制等外围电路组成的单片机应用系统为实训目的,以高级语言C语言作为编程语言,完成单片机应用系统的设计和开发。

MCS-51系列单片机编程语言目前常用的有两种,一种是汇编语言,另一种是C语言。

C语言是一种通用计算机程序设计语言,在国际上十分流行,它既可用来编写计算机的系统程序,也可以编写一般的应用程序。

C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也很强,许多以前只能采用汇编语言来解决的问题现在都可以改用C语言来解决。

随着科学技术的日新月异,对于便捷的加密防盗技术的要求也越来越高,原有的装置远远不能满足当前电子密码锁的需求。

单片机电子密码锁设计的系统具有集成度高,可靠性好,安装方便等优点。

单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

本篇设计内容是基于51内核单片机的电子密码锁设计,以51单片机为核心,扩展了1602液晶,4*4矩阵键盘,已经继电器驱动电路,构成了电子密码锁的系统设计。

程序采用汇编语言编写,具有结构明了,简单易懂编译方便等特点。

 

关键词:

单片机,电子锁,LM016L液晶

 

基于C51单片机的电子密码锁的设计

第一章.引言

单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。

MCS51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲睐。

 

第二章.系统概述

2.1 系统说明:

利用4*4键盘组成0-9个数字以及A-F个字母,以及利用了LCD显示来完成一些列的功能。

开始运行显示YouPassword….,C键可以用来设定你要的新密码,然后按D键保存。

而F键是用来清除密码的。

而B键是用来开锁的,如果正确会显示在第二行显示“UnlockOK!

”,否则就显示在第二行显示“ERROR!

”。

 

2.2 功能简介:

)本题使用16*2(LM016L)LCD显示器

2)开机时显示“[YouPassword…]”

3)键盘设计

键盘值:

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

c.0~9为数字键,及其所对应的 LCD显示码;

A.上锁键。

B开门键:

输入密码后,再按此键,经比较密码,正确则令电锁动作(P0.0)。

并在第二行显示“UnlockOK!

”。

如错误则在第二行显示“ERROR!

F;清除键:

按此键后,可以把输错的密码删掉;

C如果你要设定新密码,可以按此键

D当你新密码完成后。

可以按此键保存。

 

第3章.所需芯片简介

3.1 基于51内核系列单片机简介

MCS-51单片机是美国INTE公司于1980年推出的产品(如图1),与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍以MCS-51单片机作为代表进行理论基础学习。

我们也以这一代表性的机型进行系统的讲解。

MCS-51系列单片机主要包括8031、8051和8751等通用产品,其主要功能如下:

·4kbytes程序存储器(ROM)

·128bytes的数据存储器(RAM)

·32条I/O口线

·111条指令,大部分为单字节指令

·21个专用寄存器

·2个可编程定时/计数器

·5个中断源,2个优先级

·一个全双工串行通信口

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB

·逻辑操作位寻址功能

·双列直插40PinDIP封装

单一+5V电源供电

MCS-51以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”,为以后的其它单片机的发展奠定了基础。

正因为其优越的性能和完善的结构,导致后来的许多厂商多沿用或参考了其体系结构,有许多世界大的电气商丰富和发展了MCS-51单片机,象PHILIPS、Dallas、ATMEL等著名的半导体公司都推出了兼容MCS-51的单片机产品,就连我国的台湾WINBOND公司也发展了兼容C51(人们习惯将MCS-51简称C51,如果没有特别声明,二者同指MCS-51系列单片机)的单片机品种。

近年来C51获得了飞速的发展,C51的发源公司INTEL由于忙于开发PC及高端微处理器而无精力继续发展自己的单片机,而由其它厂商将其发展,最典型的是PHILIPS和ATML公司,PHILIPS公司主要是改善其性能,在原来的基础上发展了高速I/O口,A/D转换器,PWM(脉宽调制)、WDT等增强功能,并在低电压、微功耗、扩展串行总线(I2C)和控制网络总线(CAN)等功能加以完善。

3.2AT89C51

51单片机AT89C51中文资料

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性:

·与MCS-51兼容

·4K字节可编程闪烁存储器

寿命:

1000写/擦循环

数据保留时间:

10年

·全静态工作:

0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

2.管脚说明:

    VCC:

供电电压。

    GND:

接地。

    P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

    P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

    P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

    P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

    RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

   /PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

    /EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

    XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

    XTAL2:

来自反向振荡器的输出。

 

3.3 总体硬件设计

系统总体的设计主要分4个部分:

单片机以及最小系统,矩阵键盘,LM016L液晶显示模块如(图十)

(图十)

 

第4章系统软件设计与调试

一、C51源程序:

;*******************************************************

;

//名称:

用1602LCD与24C04设计的电子密码锁

//-------------------------------------------------------------------------------

//说明:

初始密码由24C04.BIN设定为“876543”。

//当输入0~9中的数字时可以输入密码,不超过6位,输入完成后按下B

//键开锁,密码正确时LED点亮,液晶屏显示开锁成功。

//其他键功能是:

A上锁C重新输入密码D保存新密码F清除

//重设密码时要求先输入正确的密码开锁成功。

//-------------------------------------------------------------------------------

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

//上次按键和当前按键序号,该矩阵中序号范围为0~15,16表示无按键

ucharPre_KeyNo=16,KeyNo=16;

ucharcodeTitle_Text[]="YourPassword...";//标题字符串

ucharDSY_BUFFER[10]="";//显示缓冲

ucharUserPassword[10]="";//用户输入密码

voidLCD_Init();

//voidDisplay_String(uchar*str,ucharLineNo);

voidDisplay_String(ucharx,uchary,uchar*str);

voidIIC_24C04_Init();

voidBeep();

ucharRecString(ucharSlave,ucharSubadder,uchar*Buffer,ucharN);//从IIC读取数据

ucharSendString(ucharSlave,ucharSubadder,uchar*Buffer,ucharN);//从IIC写入数据

ucharKeys_Scan();//键盘扫描,返回键盘号0~15

sbitLED_OPEN=P2^7;//开锁灯亮

sbitBEEP=P3^7;//蜂鸣器

//-------------------------------------------------------------------------------

//延时

//-------------------------------------------------------------------------------

voidDelayMS(uintx)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//-------------------------------------------------------------------------------

//蜂鸣器子程序

//-------------------------------------------------------------------------------

voidBeep()

{

uchari;

for(i=0;i<100;i++)

{

DelayMS

(1);BEEP=~BEEP;

}

}

//-------------------------------------------------------------------------------

//清除密码

//-------------------------------------------------------------------------------

voidClear_Password()

{

UserPassword[0]='\0';

DSY_BUFFER[0]='\0';

}

//-----------------------------------------------------------------

//主程序

//-----------------------------------------------------------------

voidmain()

{

uchari=0;

ucharIIC_Password[10];///={"876543"};

ucharIS_Valid_User=0;

P0=0xFF;

P1=0xFF;

P2=0xFF;

 

DelayMS(10);

LCD_Init();//初始化LCD

IIC_24C04_Init();//初始化24C04

Display_String(0,0,Title_Text);//在第1行显示标题

//24C04的内容已由初始化BIN文件导入

//将24C04中预先写入的密码读入pass

RecString(0xa0,0,IIC_Password,6);

IIC_Password[6]='\0';

while

(1)

{

P1=0xF0;

if(P1!

=0xF0)KeyNo=Keys_Scan();//扫描键盘获取键序号KeyNo

switch(KeyNo)

{

case0:

case1:

case2:

case3:

case4:

case5:

case6:

case7:

case8:

if(i<=5)//密码限制在6位以内

{

//如果i为0则执行一次清屏

if(i==0)Display_String(0,1,"");

UserPassword[i]=KeyNo+'0';

UserPassword[i+1]='\0';

DSY_BUFFER[i]='*';

DSY_BUFFER[i+1]='\0';

Display_String(0,1,DSY_BUFFER);

i++;

}

break;

case11:

//按B键开锁

if(strcmp(UserPassword,IIC_Password)==0)

{

LED_OPEN=0;//点亮LED

Clear_Password();

Display_String(0,1,"UnlockOK!

");

IS_Valid_User=1;

}

else

{

LED_OPEN=1;//关闭LED

Clear_Password();

Display_String(0,1,"ERROR!

");

IS_Valid_User=0;

}

i=0;

break;

case10:

//按A键上锁

LED_OPEN=1;

Clear_Password();

Display_String(0,0,Title_Text);

Display_String(0,1,"");

i=0;

IS_Valid_User=0;

break;

case12:

//按C键设置新密码

//如果是合法用户则提示输入新密码

if(!

IS_Valid_User)Display_String(0,1,"NoRights!

");

else

{

i=0;

Display_String(0,0,"NewPassword");

Display_String(0,1,"");

}

break;

case13:

//按13键保存新密码

if(!

IS_Valid_User)Display_String(0,1,"NoRights!

");

else

{

SendString(0xa0,0,UserPassword,6);

for(i=0;i<7;i++)IIC_Password[i]=UserPassword[i];

//重新读入刚写的密码

//RecString(0xa0,0,IIC_Password,6);

//IIC_Password[6]='\0';

i=0;

Display_String(0,0,Title_Text);

Display_String(0,1,"PasswordSaved");

}

break;

case15:

//按F键消除所有输入

i=0;

Clear_Password();

Display_String(0,1,"");

}

Beep();

DelayMS(100);

P1=0xF0;

while(P1!

=0xF0);//如果有键未释放则等待

while(P1==0xF0);//如果没有再次按下按键则等待

}

}

RET

FINI:

NOP

END

二、利用keilUv2进行程序编译与调试

1、如图7,keilUv2的启动界面。

图7

2、新建工程:

点击project\newproject,然后选择保存地址。

文件名LeyLook,然后选择单片机为AT89C51,生成工程文件。

如图8

图8

3、新建文件添加到工程:

点击

,生成

,在此文件下编写程序。

写完程序将文件保存为..c文件。

右击

选择

将.c文件添加到工程。

如图9

图9

4、编译并生成.C文件

右击

,单击

进入设置界面,在OUTPUT选项卡下选中

如图9,点击OK完成。

图9

 

第5章软件仿真技术在单片机系统设计中的运用

5.1 基于Proteus的系统仿真

一、ProteusProfessional界面介绍

  安装完Proteus后,运行ISIS6Professional,会出现下面这个窗口:

图12

为方便介绍,我分别对窗口内各部分进行了说明(图7)。

下面简单介绍各部分的功能:

1.原理图编辑窗口(TheEditingWindow)

顾名思义,它是用来绘制原理图的。

蓝色方框内为可编辑区,元件要放到它里面。

注意,这个窗口是没有滚动条的,你可以用预览窗口来改变原理图的可视范围。

2、预览窗口(TheOverviewWindow)

它可以显示两个内容。

一个是:

当你在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是:

当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色方框里面的内容就是当前原理图窗口中显示的内容,因此你可用鼠标在它上面点击来改变绿色方框的位置,从

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1