密码锁修改后带程序版.docx

上传人:b****1 文档编号:10379079 上传时间:2023-05-25 格式:DOCX 页数:26 大小:247.77KB
下载 相关 举报
密码锁修改后带程序版.docx_第1页
第1页 / 共26页
密码锁修改后带程序版.docx_第2页
第2页 / 共26页
密码锁修改后带程序版.docx_第3页
第3页 / 共26页
密码锁修改后带程序版.docx_第4页
第4页 / 共26页
密码锁修改后带程序版.docx_第5页
第5页 / 共26页
密码锁修改后带程序版.docx_第6页
第6页 / 共26页
密码锁修改后带程序版.docx_第7页
第7页 / 共26页
密码锁修改后带程序版.docx_第8页
第8页 / 共26页
密码锁修改后带程序版.docx_第9页
第9页 / 共26页
密码锁修改后带程序版.docx_第10页
第10页 / 共26页
密码锁修改后带程序版.docx_第11页
第11页 / 共26页
密码锁修改后带程序版.docx_第12页
第12页 / 共26页
密码锁修改后带程序版.docx_第13页
第13页 / 共26页
密码锁修改后带程序版.docx_第14页
第14页 / 共26页
密码锁修改后带程序版.docx_第15页
第15页 / 共26页
密码锁修改后带程序版.docx_第16页
第16页 / 共26页
密码锁修改后带程序版.docx_第17页
第17页 / 共26页
密码锁修改后带程序版.docx_第18页
第18页 / 共26页
密码锁修改后带程序版.docx_第19页
第19页 / 共26页
密码锁修改后带程序版.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

密码锁修改后带程序版.docx

《密码锁修改后带程序版.docx》由会员分享,可在线阅读,更多相关《密码锁修改后带程序版.docx(26页珍藏版)》请在冰点文库上搜索。

密码锁修改后带程序版.docx

密码锁修改后带程序版

湖南科技大学

课程设计报告

课程名称:

单片机原理及应用课程设计

 

设计题目:

电阻测量

院系:

通信与控制工程系

专业:

通信工程

班级:

学生姓名:

学号:

0840921808409224

起止日期:

2010年12月20日~2010年12月31日

指导教师:

教研室主任:

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

1、设计过程中出勤、学习态度等方面

0.2

2、课程设计质量与答辩

0.5

3、设计报告书写及图纸规范程度

0.3

总成绩

教研室审核意见:

 

教研室主任签字:

年月日

教学系审核意见:

 

主任签字:

年月日

目录

设计要求1

一方案论证与对比1

1.1方案一1

1.2方案二2

二硬件电路设计3

2.1总体设计框图3

2.2功能模块3

2.21开锁电路设计..3

2.22按键电路设计4

2.3LED显示电路4

2.4STC89C52芯片接口电路设计6

2.58255A芯片接口电路设计8

2.6密码正确时显示电路的设计10

三系统软件设计11

3.1主程序设计11

3.2键盘程序设计11

四系统功能测试与整体指标12

五详细仪器清单13

六总结与思考及致谢14

七参考文献15

附录:

源程序16

 

摘要

从经济实用的角度出发,采用美国Atmel公司的单片机STC89C52与8255作为主控芯片,结合外围的键盘输入、显示、报警、开锁等电路,用c语言编写主控芯片的控制程序,设计了一款具有报警功能的电子密码锁,能完成按密码开锁,超次锁定,管理员解密基本的密码锁功能。

经实验证明,此设计有安全性高、价格低廉,低功耗,便于实现,易于改进等优点,具有推广价值。

关键词:

单片机;电子密码锁;矩阵键盘;LED数码管

 

电子密码锁设置

设计要求

密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

2、密码的输入:

采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。

在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。

进入密码的判断比较处理状态并给出相应的处理过程。

一方案论证与对比

1.1方案一

以STC89C52为核心的单片机控制。

其原理如图1所示。

图1单片机系统原理方框图

利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,能实现基本的密码锁功能,且添加LED灯提示功能。

 

1.2方案二

采用数字电路控制。

其原理方框图如图2所示。

图2数字电路原理方框图

采用数字密码锁电路的好处就是设计简单。

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。

电路由两大部分组成:

密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:

键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,更重要的是它更加适合我们学生做课程设计,方便简洁准确的达到课程设计的要求,所以我们采用第一种方案。

本方案采用一种是用以89C52为核心的单片机控制方案。

利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现达到设计要求基本的密码锁功能。

二硬件电路设计

2.1总体设计总框图(图3)

图3总体设计框图

2.2功能模块

2.21开锁电路设计

通过单片机送给开锁执行机构,将P3.5置低电平,密码正确指示灯亮,从而达到开锁的目的。

其原理如图4所示。

图4密码锁开锁示意图

2.22按键电路设计

本设计使用4×4矩阵键盘中的两个按键S4,S5。

其中S4为数字键,S5为功能键。

S4键功能是:

输入密码的长度,输入密码。

S5键功能是:

确认键

矩阵结构图如图5所示。

图54×4矩阵键盘原理电路图

2.3LED显示电路

本系统设计的显示电路是为了给使用者以提示而设置的。

本系统的显示采用串行显示的方式,用89C52单片机经8255A扩展6位八段码LED显示器,用8255A的B口作为段码(字形代码)数据口,PA作为位控制端口。

逻辑电路结构如图6所示。

图6LED数码管逻辑结构图

数码管的笔画顺序,本组用到的数码管是共阳极的,当在公共引脚接上电源正极,笔画脚通过一个220欧姆的电阻接负极,对应的笔画就会点亮。

显示的数字0~9的8位二进制码下表所示。

要在某位数码管上显示一个数字,首先把待显示的数字的显示码送给8255的PB口,接着选中要显示的位。

例如:

要在开发板中最右边的数码管上显示一个‘0’,则需要先把‘0’的显示码0XC0送至PB口,接着给PA5赋低电平,随后让单片机保持这个值不变,下载时钟程序即可让数码管显示规定的数字。

由于我们需要让六位数码管同时动态显示,还应考虑到显示时间的长短,这时用一个延时程序来控制即可。

表1数码管显示数值所对应的段码表

显示码

数字

十六进制

二进制

dp

g

f

e

d

c

b

a

0

0xc0

1

1

0

0

0

0

0

0

1

0xf9

1

1

1

1

1

0

0

1

2

0xa4

1

0

1

0

0

1

0

0

3

0xb0

1

0

1

1

0

0

0

0

4

0x99

1

0

0

1

1

0

0

1

5

0x92

1

0

0

1

0

0

1

0

6

0x82

1

0

0

0

0

0

1

0

7

0xf8

1

1

1

1

1

0

0

0

8

0x80

1

0

0

0

0

0

0

0

9

0x90

1

0

0

1

0

0

0

0

注:

‘1’对应的笔画熄灭,‘0’对应的笔画点亮。

注:

‘1’对应的笔画熄灭,‘0’对应的笔画点亮。

2.4STC89C52芯片接口电路设计

STC89C52是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。

C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,其内部结构如图7所示。

图7MCS-51单片机的内部结构框图

2.41中央处理器

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

2.42数据存储器(RAM)

STC89C52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM有256个,可存放读写的数据,运算的中间结果或用户定义的字型表。

2.43程序存储器(ROM)

STC89C52共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。

2.44定时/计数器

8051有三个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。

2.45并行输入输出(I/O)口

STC89C52共有4组8位I/O口(P0、P1、P2和P3),用于对外部数据的传输。

2.46全双工串行口

STC89C52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

2.47中断系统

STC89C52具备较完善的中断功能,有两个外中断、三个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

2.48时钟电路

StC89C52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C52单片机需外置振荡电容。

单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。

INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构

2.49STC89C52的引脚说明

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直插DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。

芯片图如图8所示。

图8STC89C52芯片图

2.58255A芯片接口电路设计

2.51.内部结构

8255A的内部结构由三部分电路组成:

与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路,8255芯片图如图9

图98255芯片引脚图

 

(1)与CPU的接口电路

与CPU的接口电路由数据总线缓冲器和读/写控制逻辑组成。

  数据总线缓冲器是一个三态、双向、8位寄存器,8条数据线D7~D0与系统数据总线连接,构成CPU与8255A之间信息传送的通道,CPU通过执行输出指令向8255A写入控制命令或往外设传送数据,通过执行输入指令读取外设输入的数据。

 

(2)内部控制逻辑电路

  内部控制逻辑包括A组控制与B组控制两部分。

  A组控制寄存器用来控制A口PA7~PA0和C口的高4位PC7~PC4;

  B组控制寄存器用来控制B口PB7~PB0和C口的低4位PC3~PC0。

  它们接收CPU发送来的控制命令,对A,B,C3个端口的输入/输出方式进行控制。

 (3)输入/输出接口电路

  8255A片内有A,B,C3个8位并行端口,A口和B口分别有1个8位的数据输出锁存/缓冲器和1个8位数据输入锁存器,C口有1个8位数据输出锁存/缓冲器和1个8位数据输入缓冲器,用于存放CPU与外部设备交换的数据。

 2.52引脚信号

  RESET:

复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:

芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.

RD:

读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:

写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。

D0~D7:

三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

A0,A1:

地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.

当A0=0,A1=0时,PA口被选择;

当A0=0,A1=1时,PB口被选择;

当A0=1,A1=0时,PC口被选择;

当A0=1.A1=1时,控制寄存器被选;

2.6密码正确时显示电路的设计

当密码输入后,我们通过单片机来控制流水灯显示是否正确,如果正确,那么就会有一个流水灯被点亮,其原理图如下图10所示:

图10流水灯原理图

流水灯是由发光二极管和限流电阻构成的,在设计电路中我们通过单片机的P16引脚,来控制我们选择点亮的流水灯,密码正确则灯D11点亮。

三系统软件设计

3.1主程序设计

主程序主要完成初始化、检查有无按键按下、以及调用显示等等,密码输入正确,则流水灯亮。

其流程图如9所示

图9主程序流程图

3.2键盘程序设计

键扫程序的过程为:

开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。

其流程图如图10所示。

 

 

图10键盘程序流程图

四系统功能测试与整体指标

很多程序就是在调试过程中慢慢完善,先前所完成的程序部分只能算一个基本框架,当然,这一切是建立在硬件没用问题的基础上。

程序在进行调试时,可以像硬件一样使用分模块调试,这样可以最迅捷的找出问题所在,不受其他模块的影响。

软件调试在Wave或KeilC51编译器下进行,源程序编译及仿真调试应分段或以子程序为单元逐个进行,最后可结合硬件实时调试。

刚开始调试的时候没有考虑的那么完善,仅仅考虑到密码对了,就算结束。

在后续的修改与调试期间,发现了许多问题。

比如当输入密码时,若4秒没有输入,就会跳过这位,直接进入到下一位的输入。

若一直没有输入,最终将跳过所有密码输入位,显示“Error”。

而开始时,并没有考虑到这点。

发现这些问题后,我们立即进行了改善,解决了这个问题。

在整个设计的过程中,大问题没有,但小问题一直不断。

但是我们一直努力发现问题,并解决问题,做到了自己最大的努力。

五详细仪器清单

表1仪器清单

仪器名称

数量

仪器名称

数量

STC89C52芯片

1个

1k电阻

23个

按键

2个

2k电阻

2个

30pF电容

3个

晶振

1个

8255芯片

1个

三极管

6个

八段数码管

5个

PCB板

1个

流水灯

8个

 

 

 

六总结与思考及致谢

课程设计是考验我们大学这三年来的所学,它要求我们将大学这三年来所学到的知识能够融会贯通、熟练应用,并要求我们能够理论联系实际,培养我们的综合运用能力以及解决实际问题的能力。

通过这段时间的设计,自己对学习有了更深刻的认识。

在大学学习的这段期间内,知识是通过一门门独立的课程传授给我们的,而实际问题能够顺利的得到解决,不但需要多方面的知识,而且还需要对这些知识综合地加以运用。

所以此次毕业设计既是学习的过程,也是实践的过程,不仅要对所学的知识加以了巩固和延伸,也让我学会慎密、全面的考虑问题,抓住主要矛盾加以解决的思维方法和围绕问题多方设法以求得解决的顽强意志。

在这半学期里,我们不断学习、不断积累并且不断的提高。

在谢四莲老师的悉心指导下,我们从最初的开题报告开始做起,进行设计方案的确定;之后开始我们自己的源程序的编写,时序的仿真和论文初稿的拟定等几个阶段。

在设计的过程中也遇到了许多困难,比如刚接到题目时发现本设计需要使用汇编语言编写程序,然后进行仿真,实现其基本功能,由于自己对汇编语言不是很懂,所以该设计一开始就对自己造成了一定的麻烦。

在编写一些模块时,许多功能一开始都没考虑到,所以在实现其功能时都出现了其它应有的错误,再后来就是仿真了,因为各模块需要根据所设计的要求来,所以在设置一些参数时都很困难。

这次的课程设计,是对我这三年来所学的专业知识是否踏实的检验,让我们对这三年中所学知识进行了综合,也让我们温习了一些已经快要淡忘的专业知识。

与此同时,我也充分认识到自身的许多不足:

基础知识学得不够扎实,缺乏综合运用及理论联系实际的能力等。

另外在此次设计过程中,也学会了其它的一些东西,学会了自己查找资料,快速浏览书籍掌握内容等学习方法。

七参考文献

[1]张鑫.单片微机原理与应用.北京.电子工业出版社.2008

[2]楼然苗.李光飞.单片机课程设计指导.北京.航空航天大学出版社.2007

[3]长洪润.刘秀英.单片机应用设计200例(上、下).北京.航空航天大学出版社.2006

[4]张毅刚.新编MCS-51单片机应用设计(第3版)哈尔滨工业大学出版社.2008

[5]马静.单片机原理与应用.实践教学指导书中国计量出版社.2003

附录:

源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineNO_KEY_DOWN0XFF

#defineSET0X28

#defineUP0X18

ucharxdataPA_at_0xD9FF,PB_at_0XDBFF,PC_at_0XDDFF,//定义外部变量,强制分配地址

EX_PORT_CON_at_0XDFFF;

ucharcodeLED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,//LED段码(0~9)

0X20,0X28};

ucharcodeSECRATE[3]={12,34,50};

uchardataINPUT_NUM[3]={0,0,0};

uchardataDISPLAY_BUF[6];

ucharcodeERROR[6]={0X64,0X77,0X77,0X27,0X77,0XFF};

uchar*PP;

ucharBIT_PLACE=0,COUNT=0,KEY,S=0,LENGH=1;

bitX=0,Y=0;

voidInput_Secret();

voidDisplay();

voidDelay(uintA);

ucharKey_Scan();

voidNum2_Buf();

voidmain()

{

EX_PORT_CON=0X81;

PA=0XFE;

PB=0XFF;

EA=ET0=TMOD=1;

TR0=1;

TH0=0X3C;

TL0=0XB2;

PP=DISPLAY_BUF;

BIT_PLACE=0;

gotoSTART;

while

(1)

{

Display();

if(Key_Scan()==SET)

{

START:

while

(1)

{Y=0;

KEY=Key_Scan();

Display();

if(KEY==UP)

{

if(LENGH>=6)LENGH=1;

elseLENGH++;

}

if(KEY==SET){Y=1;break;}

}

PP=DISPLAY_BUF;

X=1;

S=0;

while

(1)

{

Num2_Buf();

KEY=Key_Scan();

Display();

if((KEY==SET)||((S>=4)&&X))

{

if(PP=ERROR)PP=DISPLAY_BUF;

///if(BIT_PLACE==0XFF){BIT_PLACE=0;}

//else

{

if(BIT_PLACE

{BIT_PLACE++;X=1;S=0;COUNT=0;}

else

{

BIT_PLACE=0;

X=0;

if((SECRATE[0]==INPUT_NUM[0])&&(SECRATE[1]==INPUT_NUM[1])&&(SECRATE[2]==INPUT_NUM[2]))

P1=0;

else

{PP=ERROR;P1=0XFF;BIT_PLACE=0;}

INPUT_NUM[0]=INPUT_NUM[1]=INPUT_NUM[2]=0;

break;

}

}

}

if(KEY==UP){Input_Secret();S=0;}

}

}

}

}

voidInput_Secret()

{

if((BIT_PLACE%2))//在GE位

{

if((INPUT_NUM[BIT_PLACE/2]%10)>=9)INPUT_NUM[BIT_PLACE/2]-=9;

elseINPUT_NUM[BIT_PLACE/2]++;

}

else//在十位

{

if(INPUT_NUM[BIT_PLACE/2]>=90)INPUT_NUM[BIT_PLACE/2]-=90;

elseINPUT_NUM[BIT_PLACE/2]+=10;

}

}

voidDisplay()

{ucharI,J=0X01;

if(Y)

{

for(I=0;I

{

PB=0XFF;

PA=0XFF;

if((BIT_PLACE==I)&&(COUNT<=10));

elsePB=(*(PP+I));

PA=~(J<

Delay(200);

}

}

else

{

PA=0XDF;

PB=LED_CODE[LENGH];

}

}

voidNum2_Buf()

{

ucharI;

for(I=0;I

{

if(I%2)DISPLAY_BUF[I]=LED_CODE[INPUT_NUM[I/2]%10];

elseDISPLAY_BUF[I]=LED_CODE[INPUT_NUM[I/2]/10];

}

}

voidTimer()interrupt1

{

TH0=0X3C;

TL0=0XB2;

COUNT++;

if(COUNT>20)COUNT=0;

if(COUNT>=20)

S++;

}

voidDelay(uintA)

{

while(A--);

}

uchar

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

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2