带33键盘3位数电子号码锁

更新时间:2024-04-16 19:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计说明书

(2013/2014学年第二学期)

课程名称 :题 目 :带专业班级 :学生姓名 :学 号 :指导教师 :设计周数 :设计成绩 :

单片机课程设计 3*3键盘3位数电子号码锁

2周

2014 年7月 8日

目 录

1、课程设计目的……………………………………………………………….1 2、课程设计具体要求………………………………………………………….1 3、课程设计正文……………………………………………………………….1 3.1硬件设计……………………………………………………………….....1 3.1.1方案设计……………………………………………………………..1 3.1.2 AT89C51,CD4511,数码管简介……………………………………2 3.1.3 方案设计……………………………………………………………. 8 3.1.4 单元电路设计………………………………………………………8 3.1.5 原理图……………………………………………………………….10 3.1.6 PCB图………………………………………………………………..11 3.1.7 系统调试…………………………………………………………….12 3.2 软件设计…………………………………………………………….……12 3.2.1 系统分析………………………………………………………………12 3.2.2 系统设计………………………………………………………………13 3.2.3 系统实施及程序……………………………………………………....14 4、课程设计心得体会……………………………………………………………18 5、参考文献……………………………………………………………………..19

1

1、课程设计目的

1)掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 2)通过课程设计,掌握以单片机核心的电路设计的基本方法和技术 3)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

4)与模拟电子技术,数字电子技术等课程相结合,进一步熟悉和掌握单片机的结构及工作原理,为以后所学的后续课程打下良好的基础。

5)通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。

2、课程设计具体要求

本课程设计旨在设计一个带3*3键盘的3位数电子号码锁,系统内定的密码为111,通过各种模块电路的连接,实现 :1)当上电时,数码管显示000;2)输入密码时,如果输入密码正确,蜂鸣器报警,如果输入密码错误,显示器直接清除成“000”; 3)修改密码时,在输入密码后方可输入所要修改的密码,然后按下改密键,密码修改完毕; 4)再次输入修改后的密码,同3)

2.1 主要任务

设计并制作一个以单片机为核心的电子锁系统。(1)确定总体设计方案 (2)设计键盘输入电路 (3)设计显示电路 (4)合理分配地址,编写系统程序 (5)利用Protel设计硬件电路原理图和PCB图 (6) 软硬件联机调试

2.2 技术要求

电源打开后,显示器显示“000”,“111”为内定密码:输入号码,再按“确定”开门键。若密码正确,则门会打开(用蜂鸣器提示),否则显示器会清除成“000”:并且密码可修改。

3、课程设计正文 3.1硬件设计 3.1.1 方案设计

2

本课程设计为一个各种模块电路的综合系统,系统单片机的标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成。在硬件设计上主要由复位电路、晶体振荡电路、键盘输入电路、驱动电路、数码管显示电路、蜂鸣器报警电路、单片机模块电路、位选电路等构成。所用到的主要元器件有AT89C51、数码管、晶体振荡器、按键、三极管、蜂鸣器、CD4511等。

3.1.2 AT89C51,CD4511,数码管简介 AT89C51

a.AT89C51主要特性 ● 1000次擦写周期 ● 全静态工作:0Hz—33MHz ● 32个可编程I/O口线 ● 2个16位定时器/计数器 ● 6个中断源

● 全双工UART串行通道 ● 低功耗空闲和掉电模式 ● 掉电后中断可唤醒 ● 看门狗定时器 ● 双数据指针

● 灵活的ISP编程(字或字节模式) ● 4.0---5.5V电压工作范围 b.内部结构

下图是单片机AT89C51的内部结构总框图。它可以划分为CPU、存储器、并行口、串行口、定时/计数器和中断逻辑几个部分。

● CPU由运算器和控制逻辑构成。其中包括若干特殊功能寄存器(SFR) ● AT89C51时钟有两种方式产生,即内部方式和外部方式。(如图3-2所示)

● AT89C51在物理上有四个存储空间:片内/片外程序存储器、片内/片外数据存储器。片内有256B数据存储器RAM和4KB的程序存储器ROM。除此之外,还可以在片外扩展RAM和ROM,并且和有64KB的寻址范围。

● AT89C51内部有一个可编程的、全双工的串行接口。它串行收发存储在特殊功能寄存器

3

SFR的串行数据缓冲器SBUF中的数据。

● AT89C51共有4个(P0、P1、P2、P3口)8位并行I/O端口,共32个引脚。P0口双向I/O口,用于分时传送低8位地址和高8位数据信号;P1、P2、P3口均为准双向I/O口;其中P2口还用于传送高8位地址信号;P3口每一引脚还具有特殊功能(图3-3),用于特殊信号的输入输出和控制信号。

● AT89C51内部有两个16位可编程定时器/计数器T0、T1。最大计数值为2-1。工作方式和定时器或计数器的选择由指令来确定

图3-1 AT89C51 内部结构框图

16

图3-2 AT89S51的时钟电路

c.外部特性(引脚功能)

AT89S51芯片有40条引脚,双列直插式封装引脚图如2-4所示: ● Vcc(40):电源+5V

4

● Vss(20): 接地

● XTAL1(19)和XTAL2(18):使用内部振荡电路时,用来接石英晶体和电容;使用外部时钟时,用来输入时钟脉冲。

● P0口(39—32):双向I/O口,既可作地址/数据总线口用,也可作普通I/O口用。 ● P1口(1—8):准双向通用I/O口。

● P2口(21—28):准双向口,既可作地址总线口输出地址高8位,也可作普通I/O口用。 ● P3口(10—17):多用途口,既可作普通I/O口,也可按每位定义的第二功能操作。 ● ALE/~PROG(30):地址锁存信号输出端。在访问片外存储器时,若ALE为有效高电平,则P0口输出地址低8位,可以用ALE信号作外部地址锁存信号。公式(2—1)fALE=1/6fOSC ,也可作系统中其它芯片的时钟源。第二功能~PROG是对EPROM编程时的编程脉冲输入端。 ● RST/VPD(9):复位信号输入端。AT89S51接电源后,在时钟电路作用下,该脚上出现两个机器周期以上的高电平,使内部复位。第二功能是VPD,即备用电源输入端。当主电源Vcc发生故障,降低到低电平规定值时,VPD将为RAM提供备用电源,发保证存储在RAM中的信号不丢失。

● ~EA/Vpp(31):内部和外部程序存储器选择线。~EA=0时访问外部ROM 0000H—FFFFH;~EA=1时,地址0000H—0FFFH空间访问内部ROM,地址1000H—FFFFH空间访问外部ROM。 ● ~PSEN(29):片外程序存储器选通信号,低电平有效。 CD4511 a引脚介绍

5

引脚 7、1、2、6为 CD4511的BCD码输入端,9、10、11、12、13、14、15代表输出段码,另外,又设又三个辅助控制引脚:LT、BI、LE。 b引脚功能

引脚 7、1、2、6分别代表CD4511的BCD码输入,9、10、11、12、13、14、15分别代表输出段码的ABCDEFG,通过7个电阻与数码管abcdefg引脚相连,实现数码管的输出。另外,又设又三个辅助控制引脚:LT、BI、LE。其中LT为试灯输入低电平有效;BI为灭灯输入;LE为使能端。 功能介绍如下:

LE:锁定控制端,当LE=0时,允许译码输出。 LE=1时译码器是锁定保持状态,cd4511输出被保持在LE=0时的数值。

A1、A2、A3、A4、为8421BCD码输入端。

a、b、c、d、e、f、g:为译码输出端,输出为高电平1有效。

BI:4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。

LT:3脚是测试输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否正常。

6

数码管使用条件:

a、段及小数点上加限流电阻

b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定

c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA

7

上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。

数码管使用注意事项说明:

(1)数码管表面不要用手触摸,不要用手去弄引角;

(2)焊接温度:260度;焊接时间:5S

(3)表面有保护膜的产品,可以在使用前撕下来。

数字对应数码管显示控制转换字节 (共阴编码)

显示--HGFE,DCBA--编码 0 --0011,1111--0x3F; 1 --0000,0110--0x06; 2 --0101,1011--0x5B; 3 --0100,1111--0x4F; 4 --0110,0110--0x66; 5 --0110,1101--0x6D; 6 --0111,1101--0x7D; 7 --0000,0111--0x07; 8 --0111,1111--0x7F; 9 --0110,1111--0x6F; 共阳为编码取反即可 3.1.3 方案设计

本次课程设计的内容是设计一个带3*3键盘3位数电子号码琐,3*3键盘输入电路采用行列式结构,输出显示电路部分利用CD4511驱动三个数码管显示,密码修改通过软件编程实现,故在硬件设计上本次设计课题主要由3*3键盘输入电路、复位电路、晶体振荡电路、驱动电路,位选电路和蜂鸣器提示电路等组成。主要元器件有AT89S51、CD4511、NPN、PNP、数码管、晶体振荡器、按键。

8

3.1.4 单元电路设计 1)复位电路的实现

当正常工作时单片机接低电平正常工作,当按下按键,单片机接通高电平,实现复位功能。

2)晶体振荡电路的实现

电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了震荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。 3)驱动电路的实现

通过4511来实现 译码驱动的功能,把BCD码转化成段码显示。 4)键盘输入电路的实现

3*3键盘输入电路采用行列式电路结构,3个列线,3个行线分别与P1口的P1.3,P1.4,P1.5,P1.2,P1.1,P1.0相连 5)位选电路的实现

通过P2.0,P2.1,P2.2经过三个三极管放大来实现位选,分别控制三个数码管的显示。 5)蜂鸣器提示电路

通过P2.3经过一个PNP和蜂鸣器来实现提示密码输入正确

3.1.5原理图

9

10

3.1.6 PCBSWS3图 +51010ufSTXTAL1J1ON233VCCpf12Y1MHZXTAL2S2S1SWSW33+5pfINT04.7kINT14.7k4.7K20XTAL119XTAL21817161514INT113INT0121110STAT89GNDXTAL1XTAL2P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0P1.6P1.5P1.4P1.3P1.2P1.1P1.0U2E1S51/R/W/T1/T0/RNPNQ1/INT1/INT0/TxDxDST/VPDP1.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7PSALE/PREA/VpENOGP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0VCC4.7K2122232425262728293031323334353637383940+5P2P2P2P2+5E2+5NPNQ2P2P2P2P24511LTLKLE/SIN DIN CIN BIN AU3TBSEG GSEG FSEG ESEG DSEG CSEG BSEG A141510111213222222222222221413121110W7W6W5W4W3W2W110W7W6W5W4W3W2W110W7W6W5W4W3W2W17S7SEGEG[LEDgnGNDDPYGND[LEDgnGNDDPYGNDE2E1

11

TitleSizeDate:File:Numberevisio16-Jun-200F:\\count计数器.ddbSheet of Drawn By:

3.1.7 系统调试 硬件调试:

硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。

硬件调试可分为静态调试与动态调试两步进行。 静态调试是在用户系统未工作时的一种硬件检测。

第一步:目测。检查外部的各种元件或者是电路是否有断点。

第二步用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值

第四步是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。

动态调试 是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的 器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。 软件调试:

软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

3.2 软件设计 3.2.1 系统分析

本次课题设计是基于单片机的特性来实现其功能的。本系统采用的单片机是AT89S51型号。其上集成了3个数码管,10个按键开关,主要实现数字输入和复位功能。3*3键盘九

12

个按键,其中 七个数字键,一个确认键,一个密码修改键,还有复位电路一个按键。还有蜂鸣器提示电路,当输入密码正确时,蜂鸣器响,起提示作用。 3.2.2 系统设计

本系统需实现3个功能,3*3键盘输入电路通过九个按键采用行列式电路结构实现,输出显示电路部分通过CD4511驱动三个数码管结合位选电路来显示输入的密码,当密码输入正确时,蜂鸣器响,起提示作用,密码修改功能通过软件编程实现。

开始 设定密码111 初始化显示000 键盘扫描 否 有键按下? 是 取键号 改密键-9键 判键号类型 密码键1-7 蜂鸣器响? 显示键号 否 密码正确? 确定键--6 否 是 改密键 是 蜂鸣器响

13

3.2.3 系统实施及程序

#include\

#define uchar unsigned char #define uint unsigned int uint temp;

uchar buf[3]=0,num; uchar keym[3]={1,1,1}; uchar flag=0; 锁,0:锁定 uchar flag1=0; uchar

table[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};

sbit wei1=P2^0; sbit wei2=P2^1; sbit wei3=P2^2; sbit beep=P2^3;

uchar count=0; //输入个数

void delay(uint z) {

uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void intal() {

code

//输入缓存

//密码

//解锁标志,1:解

14

beep=1; TMOD=0x01;

TH0=(65536-45000)/256; TL0=(65536-45000)%6; EA=1; ET0=1; TR0=1; }

void keyscan(void) { P1=0xfe; temp=P1;

temp=temp&0xf8;//扫描行 if(temp!=0xf8) {

delay(5); temp=temp&0xf8;

if(temp!=0xf8)//延时消抖 {

temp=P1; switch(temp) {

case 0xee: buf[count]=0,count++; break;

case 0xde: buf[count]=3,count++; break;

case 0xbe: //复位键

15

{

count=0; flag=0; buf[0]=0;

buf[1]=0; buf[2]=0; } break; } do { temp=P1; temp=temp&0xf8;

}while(temp!=0xf8);//检测松手

} } P1=0xfd; temp=P1;

temp=temp&0xf8;//扫描行 if(temp!=0xf8) {

delay(5); temp=temp&0xf8;

if(temp!=0xf8)//延时消抖 { temp=P1; switch(temp) {

case 0xed: buf[count]=1,count++; break;

16

case 0xdd: buf[count]=4,count++; break;

case 0xbd:flag1=1; break; } do { temp=P1; temp=temp&0xf8;

}while(temp!=0xf8);//检测松手 } } P1=0xfb; temp=P1;

temp=temp&0xf8;//扫描行 if(temp!=0xf8) {

delay(5); temp=temp&0xf8;

if(temp!=0xf8)//延时消抖 {

temp=P1; switch(temp) {

case 0xeb: buf[count]=2,count++; break;

case 0xdb: buf[count]=5,count++; break; case 0xbb:

//改密键

// 确认键 17

if(flag==0)

{if(buf[0]==keym[0]&&buf[1]==keym[1]&&buf[2]==keym[2])//密码正确 { count=0; flag=1; buf[0]=0; buf[1]=0; buf[2]=0; beep=0; delay(1000); beep=1; }

else //密码错误 { count=0; buf[0]=0; buf[1]=0; buf[2]=0; } }

if(flag1==1) {

keym[0]=buf[0]; keym[1]=buf[1]; keym[2]=buf[2]; buf[0]=0; buf[1]=0; buf[2]=0;

18

flag1=0; flag=0; } break;

} do { temp=P1; temp=temp&0xf8; }

while(temp!=0xf8);//检测松手

} } }

void display(void) { wei1=0;

P0=table[buf[0]]; delay(5); wei1=1;

wei2=0;

P0=table[buf[1]]; delay(5); wei2=1;

19

本文来源:https://www.bwwdw.com/article/kymp.html

Top