基于C51单片机的电子密码锁的设计文档格式.docx
《基于C51单片机的电子密码锁的设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的电子密码锁的设计文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
开始运行显示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)
它可以显示两个内容。
一个是:
当你在元件列表中选择一个元件时,它会显示该元件的预览图;
另一个是:
当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色方框里面的内容就是当前原理图窗口中显示的内容,因此你可用鼠标在它上面点击来改变绿色方框的位置,从