关键词不能为空

当前您在: 主页 > 高中公式大全 >

英雄联盟策士统领出装带33键盘3位数电子号码锁讲解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-01 10:29
tags:电脑键盘锁

光头强图片-insubstantial

2021年1月1日发(作者:牛实)
河北工程大学科信学院
课程设计说明书

(20122013学年第2学期)


课程名称 : 单片机课程设计
题 目 :带3*3键盘3位数电子号码锁
专业班级 :科信自动化3班
学生姓名 :马景明
学 号: 100412332
指导教师 :韩昱 苗敬利 杨怡君 王巍 王静爽
设计周数 : 2周
设计成绩 :









2013年6月27号


1

目录
1、课程设计目的
2、课程设计任务
2.1设计题目
2.2原始数据及主要任务
2.3技术要求
3、课程设计内容
3.1方案设计
3.1.1 STC90C52AD的功能参数介绍
3.1.2 综合电路设计
3.2单元电路设计
3.2.1键盘单元
3.2.2数码管显示
3.2.3时钟产生单元

3.2.4蜂鸣器电路单元

3.3 系统原理图
3.4系统调试
3.5程序流程图
3.6系统实施
3.7 实习心得
附录


2


1、课程设计目的

1.1用单片机课程及已学电子电路知识设计,包括电路
图的设计和制板等。
1.2通过课程设计加深对单片机课程的相关知识的学习
和理解。
1.3初步学会一些设计思想和实践技能。提高学生综合
素质。
1.4让学生从设计过程中领悟到相互合作的重要性。
2、课程设计任务
2.1设计题目:带3*3键盘3位数电子号码锁
2.2原始数据及任务:设计并制作出一个以单片机 为核心的
电子锁系统:1、确定总体设计方案;2、设计键盘输入电路;3、
设计显示电路;4 、合理分配地址,编写系统程序;5、利用Protel
设计硬件电路原理图和PCB图;6、软硬件联 机调试。
2.3技术要求
电源打开后,显示器显示“000”,“111”为内定密码 ;输
入号码,再按“确定”开门键。若号码正确,则门会打开(用蜂
鸣器指示),否则显示器会 清除为“000”;并且密码可修改。
3、课程设计内容

3
3.1方案设计

3.1.1 STC90C52AD的功能参数介绍
S TC90C52AD是由宏晶公司生产的高
性能八位单片机。如图一所示。该芯片采
用FLAS H存储技术,内部具有8KB字节快
闪存存储器,采用DIP封装,是目前在中
小系统中应用最 为普及的单片机。
STC90C52AD可构成真正的单片机最
小应用系统,缩小系统体积,增加系统的
图一
可靠性,降低系统的成本。只要程序长度小于8K,四个IO口
全部提供给用户 。可用5V电压编程,而且擦写时间仅需10毫秒,
仅为875187C51的擦除时间的百分之一,与 875187C51的12V
电压擦写相比,相对不易损坏器件,没有两种电源的要求,改写
时 不拔下芯片,适合许多嵌入式控制领域。工作电压范围
(2.7V~6V),全静态工作,工作频率宽在 0Hz~24MHz之间,比
875187C51等51系列的6MHz~12MHz更具有灵活性,系 统能快
能慢。STC90C52AD芯片提供三级程序存储器加密,提供了方便
灵活而可靠的硬 加密手段,能完全保证程序或系统不被仿制。P0
口是三态双向口,通称数据总线口,因为只有该口能直 接用于对
外部存储器的读写操作。

4
STC90C52AD单片机为 40引脚芯片如图一所示,在本设计中,
主要用到P0口、P2口、P1.0口及P3.0、P3.1、 P3.2口。
P0口:
P0口可作为通用IO口,但须外接上拉电阻,所以在设计
显示数码管我们避免了使用P0口这样大大简化了动态显示电
路。
P1口:
P1口:8位、双向I0口,内部含有上拉电阻。
P1口可作普通IO口。输出缓冲器可驱动 四个TTL负载;
用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。
P1口的引脚 可由外部负载拉到低电平,通过上拉电阻提供电流。
在FLASH并行编程和校验时,P1口可输入低 字节地址。在
串行编程和效验时,P1.5MO- SI,P1.6MISO和P1.7SCK分别是
串行数据输入、输出和移位脉冲引脚。
P2口:
P2口:具有内部上拉电阻的8位双向IO口。
P2口用做输出口时,可 驱动4各TTL负载;用做输入口时,
先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低< br>电平,则通过内部上拉电阻向外部输出电流。
在FLASH并行编程和校验时,P2口可输入高字节地址和某
些控制信号。
P3口:

5
因本次课程设计中用不到P3口。因此不详细介绍。

单片机使用宏晶公司支持串口下载程序(ISP)的单片机,
为STC90C52A D课程设计配发的小电路板(ISP-MCU Basic
circuit)电路原理图见下图。该板 作为课程设计的核心电路板
使用,板上有单片机及附属电路,RS-232通信驱动电路,高低
电平测试电路等。课程设计电路中需要的其他电路在此基础上扩
展,通过插孔连接。
课程设计配发的小电路板(ISP-MCU Basic circuit)电路原理
图见下图。
扩展电路在万用板上制作用四位数码管显示小时与分钟 ,中
间那个点用来区分小时与分钟;每秒用一个LED闪烁一下;用了
4个按键,一个是选择键 ,一个是加键,一个是减键,
一个是确认键。时间要精确, 整点报时,声音间隔1秒,并且可
以调整时间调整位闪烁提示。
C1
1 uF
1
3
4
5
11
10
12
9
U2MAX23 2
Vcc
Vs+
Vs-
GND
T1out
T2out
R1in
R2in
VCC
16
2
6
15
147
13
8
10 uF
C4
10 uF
C3
1< br>2
3
4
5
6
7
8
10
11
12
13
14
15
16
17
CRY
9
1< br>2
3
4
5
6
7
8
10
11
12
13
14
15
16
17
9
19
18< br>20
U1
P10T2ADC0
P11T2EADC1
P12ADC2< br>P13ADC3
P14ADC4
P15ADC5
P16RxDADC6
P17TxDADC7
P30RxD
P31TxD
P32INT0
P33IN T1
P34CT0
P35CT1
P36WR
P37RD
RESET< br>XT1
XT2
GND
STC90C52AD
3.3K
GND< br>LowHigh
AD0P00
AD1P01
AD2P02
AD3P03
AD4P04
AD5P05
AD6P06
AD7P07
A8P20< br>A9P21
A10P22
A11P23
A12P24
A13P25A14P26
A15P27
EAP46
ALEP45
PSENP44VCC
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
2 8
31
30
29
40
39
38
37
36< br>35
34
33
32
21
22
23
24
25
26
27
28
31
30
29
VCC
GND
GND
Htst
R3
VCC
JPS
1
2C2
1 uF
11
10
C1+
C1-
C2+
C 2-
T1in
T2in
R1out
R2out
PS
R43.3K
C17224
C16224
C15224
C14224
C13224
R9
1M
C847uF
C747uF
C647uFC547uF
TXD
RXD
GND
JDB
DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI
GNDRS232-DB9
1
6
2
7
3
8
4
9
5
GND
R2
VCC
3.3K
VCC
R
S
T
10uF
*
C0
RXD
TXD
R0
R 1
200
6.8K
Ltst
C11
22p
C12
2 2p
单片机基本配置板
电路原理图
低电平测试端

高电平测试端


6

扩展电路用到得 器件:共十六个按键:十个数字键,一个是
加键,一个是减键,一个是除键,一个乘键,一个等键,一个 清
零键;六个DPY7-SEG DP共阳极动态LED;六个PNP三极管;十
四个330欧姆和两个470欧的电阻;导线。
每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将
引脚置1。P0也可用做访问外部程序存 储器和数据存储器时的低
8位地址数据总线的复用线。在该模式下,P0口含有内部上拉
电阻。 在FLASH编程时,P0口接收代码字节数据;在编程效验
时,P0口输出代码字节数据(需要外接上 拉电阻)。
器件标识符:

标识符
U1
U2
J1-J4, CRY
Lsts Hsts
CRY
High,Low,PS
R1
R0
R2 R3 R4
R9
器件名称
单片机
RS232驱动
规格型号
STC90C52AD
MAX232
数量
1
1




接线插孔座 排母 86针

晶体谐振器
发光二极管
金属膜电阻
金属膜电阻
金属膜电阻
金属膜电阻
6MHz
φ3
200Ω
6.8K
3.3K
1M
1
3
1
1
3
1






C3 C4 C0
C5-C8
JPS
RST
JDB
U1
U2
电解电容
电解电容
接线端子
按钮
DB9插座
DIP插座
DIP插座
10uF 50V
47uF(22uF)
电源用
小(0.2×0.3)
DB9针形座
DIP40
DIP16
3
4
1
1
1
1
1
标识符
C11 C12
C13-C17
C1 C2
器件名称
瓷片电容
独石电容
电解电容
规格型号
22p 或30p
0.22uF(224)
1.0uF 50V
数量
2
5
2

3.1.2综合电路设计


7
本系统 共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源
输入部分、键盘输入部分、密码存储部分 、复位部分、晶振部分、显示部
分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、
LCD显示程序、键盘扫描程序、启动程序、关闭程序、
建功能程序、密码设置
程序、 EEPROM读写程序和延时程序等组成。其原理框图如下图

键盘输入
复位电路




AT90C52
电源输入
显示电路
报警电路
密码存储电路
晶振电路


3.2单元电路设计
3.2.1键盘单元


键盘设计如下图所示

8

其中12个键的功能分配如下
S1:1 S4:2 S7:3
S2:4 S5:5 S8:6
S3:7 S6:8 S9:9
S10:0 S11:确认 S13:重置
采用扫描控制端口P1的值来确定有没有键按下,按下的是
那个键。

3.2.2数码管显示
我们采用共阳数码管显示,共3个,段选端接在P0口,接
法如下:


9


P0口需要通过上拉电阻接到+5V电源,这点需注意,上拉电
阻接法如下:
R=10K

数码管位选端由P2口得前三个端口控制,分别通过PNP接
到数码管的公共端,其 接法如下图:

数码管显示是单片机中应用最为广泛的一种显示方式之
一,设计中0 -9与P0口对应关系如下表:

10

P0口值
显示值
P0值
显示值
0xc0
0
0x92
5
0xf9
1
0x82
6
0xa4
2
0xf8
7
0xb0
3
0x80
8
0x99
4
0x90
9

3.2.3时钟产生单元
52单片机的时钟信号通常用两种电路形式得到:内部振荡方式
和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐
振器,就构成了内部振荡方式。由 于单片机内部有一个高增益反
相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟
脉 冲。内部振荡方式的外部电路如下图所示。

图中,电容器Col ,C02起稳定振荡频率、快速起振的作
用,其电容值一般在5-30pF。晶振频率的典型值为12M H2,采用
6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,
实用电路中使用 较多。外部振荡方式是把外部已有 的时钟信号

11
引入单片机内。这种方式适宜 用来使单片机的时钟与外部信号保
持同步。(本次课设采用6MHz)
3.2.4 蜂鸣器电路单元
如图下所示



3.3 系统原理图


3.4系统调试
硬件调试时可先检查印制 板及焊接的质量情况,在检查无误
后可通电检查LED显示器的点亮状况。若亮度不理想,可以调整
12
P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度
效果。
实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况
进行综合硬件测试分析。
硬件调试:硬件调试是利用DVCC实验与开发系统、基本
测试仪器(万用表、示波器等),检 查用户系统硬件中存在的故
障。硬件调试可分为静态调试与动态调试两步进行。
静态调试:是在用户系统未工作时的一种硬件检测。
第一步:目测。检查外部的各种元件或者是电路是否有断点。
第二步:用万用表测试。先用万 用表复核目测中有疑问的连
接点,再检测各种电源线与地线之间是否有短路现象。
第三步:加电检测。给板加电,检测所有插座或是器件的电
源端是否符合要求的值
第四步:联机检查。因为只有用单片机开发系统才能完成对
用户系统的调试。
动态 调试:是在用户系统工作的情况下发现和排除用户系统
硬件中存在的器件内部故障、器件连接逻辑错误等 的一种硬件检
查。动态调试的一般方法是由近及远、由分到合。由分到合是指
首先按逻辑功能将 用户系统硬件电路分为若干块,当调试电路
时,与该元件无关的 器件全部从用户系统中去掉,这样可以 将
故障范围限定在某个局部的电路上。当各块电路无故障后,将各
电路逐块加入系统中,在对各 块电路功能及各电路间可能存在的

13
相互联系进行调试。由分到合的调试既告完 成。由近及远是将信
号流经的各器件按照距离单片机的逻辑距离进行由近及远的分
层,然后分层 调试。调试时,仍采用去掉无关元件的方法,逐层
调试下去,就会定位故障元件了。
软件调试 :利用仿真器加以调试,对系统单个单元进行调试,
当单元电路成功后,在对整个程序调试,最后在用C PU芯片调试。
3.5程序流程图

开始




消抖子程序
设置初值




送入行扫描初值

读P1值



扫描P1口



Ok==0
Ok==0
N

N Y

Set==0


调用显示子程序



重置密码

结束

N


Ok==1
Y

14
Y

3.6系统实施
根据原理图列写原件清 单,领取所需的元件,烙铁,万用表,
去试验台焊电路板。焊完板子,通过软硬结合的方式对电路板进< br>行硬件调试,硬件没错误之后,开始进行软件编程,直到整个功
能实现,并进行优化。

3.7 实习心得
本次课设我主要进行了电路板与器件的焊接,同时全程参与了程
序 编写、改进与体统调试,对单片机系统简单调试与功能是先有
了进一步认识。由于学校配发的开发板有特 殊的自然走线特点,
给我们的自由拓展提供了方便也造成了难度。我充分利用了其地
线与火线多 重排列,以及相邻焊盘自然连接的位置特点,结合我
们需要使用的器件,先对整体布局加以把握,并简单 焊接,并为
后期改动、增删器件留有余地。后期由于板子调试,加入了数枚
电阻,虽然留有余地 ,但是由于器件较多任然稍显局促,并且锻
炼了检查电路板连接失误的能力。值得一提的是上拉电阻的使
用,他不仅使单片机P0成功输出高电平,并且保证了共阴极数
码管的放大控制,二者配合,成 功实现了原理设计。
通过这次课程设计掌握51单片机的原理,初步掌握单片
机调整及测 试方法,提高动手能力和排除故障的能力。同时通过
本课题设计与装配、调试,提高自己的动手能力,巩 固已学的理
论知识,建立单片机理论和实践的结合,了解各单元电路之间的
关系及相互影响,从 而能准确设计、计算定时计数的各个单元电
路。初步掌握厨房报警器的调整及测试方法。提高动手能力和 排
除故障的能力在完成单片机课程设计后我们发现我们还有许多

15
不足 所学到的知识还远远不够以至于还有一些功能不能被动完
成。但通过学习这一次实践增强了我们的动手能 力提高和巩固了
单片机方面的知识特殊是软件方面。从中增强了我们的团队合作
精神并让我们熟 悉到把理论应用到实践中去是多么重要。
附录 C语言实验程序

#include
#define uchar unsigned char
#define uint unsigned int

sbit fmq=P2^3;定义报警器端口p2.3为fmq
sbit wei1=P2^0;定义数码管1端口p2.0为wei1
sbit wei2=P2^1; 定义数码管2端口p2.1为wei2
sbit wei3=P2^2; 定义数码管3端口p2.2为wei3

uchar Code[3]={0,0,0};
uchar InPut[3]={1,1,1};
char
table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;

uint KeyBoard,time;

16
code
uchar *p=InPut;

void delay(unsigned int cnt)
{
while(--cnt);
}

main()
{














17
uchar temp,Ok,Error;
uchar count=0;
uchar Set=0;修改密码关键字
TMOD=0X11;
TCON=0X10;
TH0=(65536-5000)256;50ms
TL0=(65536-5000)%256;
TH1=(65536-50000)256;
TL1=(65536-50000)%256;
ET0=1;定时计数器T0中断允许位
ET1=1;
EA=1;开总中断























while(1)
{





if(KeyBoard==11)
{


}
Set=1;修改密码关键字
Ok=0;确认关键字








if(Set==1&&Ok==1&&KeyBoard<10)重新设置密码的条件
{






Ok=0;
switch(count)
{



case 0:Code[0]=KeyBoard;count++;break;
case 1:Code[1]=KeyBoard;count++;break;
case 2:Code[2]=KeyBoard;count++;break;






}
}
if(Set==0&&Ok==1&&KeyBoard<10)
{
18







































}
Ok=0;
if(count>2)count=0;
switch(count)
{



}

case 0:InPut[0]=KeyBoard;count++;break;
case 1:InPut[1]=KeyBoard;count++;break;
case 2:InPut[2]=KeyBoard;count++;break;








if(KeyBoard==10)
{






KeyBoard=100;Ok=0;count=0;
if(Set==1)
{Set=0;}
else
{
if( (Code[0]==InPut[0])&&(Code[1]==InPut[1])&&(Code[2] ==InPut[
2]))


{
19
















































}











}



}
fmq=1;
Error=0;
time=0;
else密码输入错误
{




}
Error++;
InPut[0]=1;
InPut[1]=1;
InPut[2]=1;







if(Error>=2)
{





TR1=1;
if(time<200)
{

}
20
fmq=0;








else {fmq=1;






}
}
if(time>200){time=0,Error=0;}
if(Ok==0)
{
P1=0xfe P1口设置为oxfe 1111 1110(第一行置为低电
0)






temp=P1;P1赋给tenp
temp=temp&0xf0;0xf0赋给temp (所有行线置为低电0,
所有列线置为高电1)































if(temp!=0xf0)检测是否有按键按下
{








delay(5000);去除干扰
if(temp!=0xf0)再次检测是否有按键按下 1111 0000
{





switch(temp)
{



case 0x70:KeyBoard=1;break;0111 0000
case 0xb0:KeyBoard=2;break;1011 0000
case 0xd0:KeyBoard=3;break;1101 0000
21





































}



}
}
Ok=1;
while(((P1&0xf0)==temp));






























P1=0xfd 1111 1101(第二行置为低电0)
temp=P1;
temp=temp&0xf0;1111 0000
if(temp!=0xf0)
{










delay(5000);
if(temp!=0xf0)
{







Ok=1;
switch(temp)
{



}
22
case 0x70:KeyBoard=4;break;
case 0xb0:KeyBoard=5;break;
case 0xd0:KeyBoard=6;break;































}

}
while(((P1&0xf0)==temp));


































P1=0xfb 1111 1011 (第三行置为低电0)
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{












delay(5000);
if(temp!=0xf0)
{








}
23
Ok=1;
switch(temp)
{



}
while(((P1&0xf0)==temp));
case 0x70:KeyBoard=7;break;
case 0xb0:KeyBoard=8;break;
case 0xd0:KeyBoard=9;break;




























}




































P1=0xf7 1111 0111(第四行置为低电0)
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{












delay(5000);
if(temp!=0xf0)
{








}
Ok=1;
switch(temp)
{



}
while(((P1&0xf0)==temp));
case 0x70:KeyBoard=0;break;
case 0xb0:KeyBoard=10;break;
case 0xd0:KeyBoard=11;break;

24





}




}



}

}

void timer0() interrupt 1终端原定时计数器0级别较高
{














static cnt=0;
TH0=(65536-2500)256;
TL0=(65536-2500)%256;
cnt++;
if(cnt>3)cnt=1;
switch(cnt)
{






case 1: P2=P3&0xf8;1111 1000 控制蜂鸣器 数码管位选





P0=table[*p];
P3=P3|0x01;0000 0001 选通第一个数码管
break;
case 2: P2=P3&0xf8;1111 1000
P0=table[*(p+1)];
25







}






}


P3=P3|0x02;0000 0010 选通第二个数码管
break;
case 3: P2=P3&0xf8; 1111 1000





P0=table[*(p+2)];
P3=P3|0x04;0000 0100 选通第三个数码管
break;
void timer1() interrupt 3中断源定时计数器1
{



}
TH1=(65536-50000)256;
TL1=(65536-50000)%256;
time++;




26
课程设计

评 语
课程设计

成 绩
指导教师
(签字)

年 月 日




27

羞愧的反义词-师生之谊


笛子独奏曲mp3-秦兵马俑教学设计


观察日记300字-置业顾问月工作总结


咖啡杯子-数学模型的作用


海阔天空串词-幼儿园小班说课稿


海市蜃楼是什么意思-悲伤日志


失恋33天影评-十八大报告内容


汪峰光明-锁魂典狱长



本文更新与2021-01-01 10:29,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/493317.html

带33键盘3位数电子号码锁讲解的相关文章