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

上传人:b****6 文档编号:18875763 上传时间: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

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

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

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

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

”。

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

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

3)键盘设计

键盘值:

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<

reg51.h>

string.h>

#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()

for(i=0;

100;

i++)

{

DelayMS

(1);

BEEP=~BEEP;

}

//清除密码

voidClear_Password()

UserPassword[0]='

\0'

DSY_BUFFER[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]='

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]='

DSY_BUFFER[i]='

*'

DSY_BUFFER[i+1]='

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

ERROR!

IS_Valid_User=0;

i=0;

break;

case10:

//按A键上锁

Display_String(0,1,"

case12:

//按C键设置新密码

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

if(!

IS_Valid_User)Display_String(0,1,"

NoRights!

Display_String(0,0,"

NewPassword"

Display_String(0,1,"

case13:

//按13键保存新密码

IS_Valid_User)Display_String(0,1,"

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

for(i=0;

7;

i++)IIC_Password[i]=UserPassword[i];

//重新读入刚写的密码

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

//IIC_Password[6]='

Display_String(0,1,"

PasswordSaved"

}

case15:

//按F键消除所有输入

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完成。

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

5.1 基于Proteus的系统仿真

一、ProteusProfessional界面介绍

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

图12

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

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

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

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

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

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

2、预览窗口(TheOverviewWindow)

它可以显示两个内容。

一个是:

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

另一个是:

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

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

当前位置:首页 > 经管营销 > 企业管理

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

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