带33键盘3位数电子号码锁Word格式文档下载.docx
- 文档编号:21569735
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:20
- 大小:435.96KB
带33键盘3位数电子号码锁Word格式文档下载.docx
《带33键盘3位数电子号码锁Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《带33键盘3位数电子号码锁Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
2.1设计题目:
带3*3键盘3位数电子号码锁
2.2原始数据及任务:
设计并制作出一个以单片机为核心的电子锁系统:
1、确定总体设计方案;
2、设计键盘输入电路;
3、设计显示电路;
4、合理分配地址,编写系统程序;
5、利用Protel设计硬件电路原理图和PCB图;
6、软硬件联机调试。
电源打开后,显示器显示“000”,“111”为内定密码;
输入号码,再按“确定”开门键。
若号码正确,则门会打开(用蜂鸣器指示),否则显示器会清除为“000”;
并且密码可修改。
3.1.1STC90C52AD的功能参数介绍
STC90C52AD是由宏晶公司生产的高性能八位单片机。
如图一所示。
该芯片采用FLASH存储技术,内部具有8KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机。
STC90C52AD可构成真正的单片机最小应用系统,缩小系统体积,增加系统的
图一
可靠性,降低系统的成本。
只要程序长度小于8K,四个I/O口全部提供给用户。
可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,相对不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。
工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。
STC90C52AD芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。
STC90C52AD单片机为40引脚芯片如图一所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。
P0口:
P0口可作为通用I/O口,但须外接上拉电阻,所以在设计显示数码管我们避免了使用P0口这样大大简化了动态显示电路。
P1口:
8位、双向I/0口,内部含有上拉电阻。
P1口可作普通I/O口。
输出缓冲器可驱动四个TTL负载;
用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。
P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。
在FLASH并行编程和校验时,P1口可输入低字节地址。
在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。
P2口:
P2口:
具有内部上拉电阻的8位双向I/O口。
P2口用做输出口时,可驱动4各TTL负载;
用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。
若负载为低电平,则通过内部上拉电阻向外部输出电流。
在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:
因本次课程设计中用不到P3口。
因此不详细介绍。
单片机使用宏晶公司支持串口下载程序(ISP)的单片机,为STC90C52AD课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。
该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。
课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。
课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。
扩展电路在万用板上制作用四位数码管显示小时与分钟,中间那个点用来区分小时与分钟;
每秒用一个LED闪烁一下;
用了4个按键,一个是选择键,一个是加键,一个是减键,
一个是确认键。
时间要精确,整点报时,声音间隔1秒,并且可以调整时间调整位闪烁提示。
扩展电路用到得器件:
共十六个按键:
十个数字键,一个是加键,一个是减键,一个是除键,一个乘键,一个等键,一个清零键;
六个DPY7-SEGDP共阳极动态LED;
六个PNP三极管;
十四个330欧姆和两个470欧的电阻;
导线。
每各引脚可吸收8各TTL的灌电流。
作为输入时,首先应将引脚置1。
P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。
在该模式下,P0口含有内部上拉电阻。
在FLASH编程时,P0口接收代码字节数据;
在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。
器件标识符:
标识符
器件名称
规格型号
数量
U1
单片机
STC90C52AD
1
C11C12
瓷片电容
22p或30p
2
U2
RS232驱动
MAX232
C13-C17
独石电容
0.22uF(224)
5
J1-J4,CRY
LstsHsts
接线插孔座
排母
86针
C1C2
电解电容
1.0uF/50V
C3C4C0
10uF/50V
3
CRY
晶体谐振器
6MHz
C5-C8
47uF(22uF)
4
High,Low,PS
发光二极管
φ3
JPS
接线端子
电源用
R1
金属膜电阻
200Ω
RST
按钮
小(0.2×
0.3)
R0
6.8K
JDB
DB9插座
DB9针形座
R2R3R4
3.3K
DIP插座
DIP40
R9
1M
DIP16
3.1.2综合电路设计
本系统共有两部分构成,即硬件部分与软件部分。
其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
其原理框图如下图
3.2.1键盘单元
键盘设计如下图所示
其中12个键的功能分配如下
S1:
1S4:
2S7:
S2:
4S5:
5S8:
6
S3:
7S6:
8S9:
9
S10:
0S11:
确认S13:
重置
采用扫描控制端口P1的值来确定有没有键按下,按下的是那个键。
3.2.2数码管显示
我们采用共阳数码管显示,共3个,段选端接在P0口,接法如下:
P0口需要通过上拉电阻接到+5V电源,这点需注意,上拉电阻接法如下:
R=10K
数码管位选端由P2口得前三个端口控制,分别通过PNP接到数码管的公共端,其接法如下图:
数码管显示是单片机中应用最为广泛的一种显示方式之一,设计中0-9与P0口对应关系如下表:
P0口值
0xc0
0xf9
0xa4
0xb0
0x99
显示值
P0值
0x92
0x82
0xf8
0x80
0x90
7
8
52单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如下图所示。
图中,电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。
晶振频率的典型值为12MH2,采用6MHz的情况也比较多。
内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。
外部振荡方式是把外部已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持同步。
(本次课设采用6MHz)
3.2.4蜂鸣器电路单元
如图下所示
硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。
若亮度不理想,可以调整P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。
实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况进行综合硬件测试分析。
硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试:
是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试:
是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试:
利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。
设置初值
N
NY
N
Y
Y
根据原理图列写原件清单,领取所需的元件,烙铁,万用表,去试验台焊电路板。
焊完板子,通过软硬结合的方式对电路板进行硬件调试,硬件没错误之后,开始进行软件编程,直到整个功能实现,并进行优化。
本次课设我主要进行了电路板与器件的焊接,同时全程参与了程序编写、改进与体统调试,对单片机系统简单调试与功能是先有了进一步认识。
由于学校配发的开发板有特殊的自然走线特点,给我们的自由拓展提供了方便也造成了难度。
我充分利用了其地线与火线多重排列,以及相邻焊盘自然连接的位置特点,结合我们需要使用的器件,先对整体布局加以把握,并简单焊接,并为后期改动、增删器件留有余地。
后期由于板子调试,加入了数枚电阻,虽然留有余地,但是由于器件较多任然稍显局促,并且锻炼了检查电路板连接失误的能力。
值得一提的是上拉电阻的使用,他不仅使单片机P0成功输出高电平,并且保证了共阴极数码管的放大控制,二者配合,成功实现了原理设计。
通过这次课程设计掌握51单片机的原理,初步掌握单片机调整及测试方法,提高动手能力和排除故障的能力。
同时通过本课题设计与装配、调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解各单元电路之间的关系及相互影响,从而能准确设计、计算定时计数的各个单元电路。
初步掌握厨房报警器的调整及测试方法。
提高动手能力和排除故障的能力在完成单片机课程设计后我们发现我们还有许多不足所学到的知识还远远不够以至于还有一些功能不能被动完成。
但通过学习这一次实践增强了我们的动手能力提高和巩固了单片机方面的知识特殊是软件方面。
从中增强了我们的团队合作精神并让我们熟悉到把理论应用到实践中去是多么重要。
附录C语言实验程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitfmq=P2^3;
//定义报警器端口p2.3为fmq
sbitwei1=P2^0;
//定义数码管1端口p2.0为wei1
sbitwei2=P2^1;
//定义数码管2端口p2.1为wei2
sbitwei3=P2^2;
//定义数码管3端口p2.2为wei3
ucharCode[3]={0,0,0};
ucharInPut[3]={1,1,1};
charcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uintKeyBoard,time;
uchar*p=InPut;
voiddelay(unsignedintcnt)
{
while(--cnt);
}
main()
uchartemp,Ok,Error;
ucharcount=0;
ucharSet=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)//重新设置密码的条件
switch(count)
{
case0:
Code[0]=KeyBoard;
count++;
break;
case1:
Code[1]=KeyBoard;
case2:
Code[2]=KeyBoard;
}
if(Set==0&
10)
if(count>
2)count=0;
InPut[0]=KeyBoard;
InPut[1]=KeyBoard;
InPut[2]=KeyBoard;
}
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]))
{
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)
fmq=0;
else{fmq=1;
if(time>
200){time=0,Error=0;
if(Ok==0)
P1=0xfe;
//P1口设置为oxfe11111110(第一行置为低电0)
temp=P1;
//P1赋给tenp
temp=temp&
0xf0;
//0xf0赋给temp(所有行线置为低电0,所有列线置为高电1)
if(temp!
=0xf0)//检测是否有按键按下
delay(5000);
//去除干扰
if(temp!
=0xf0)//再次检测是否有按键按下11110000
switch(temp)
{
case0x70:
KeyBoard=1;
//01110000
case0xb0:
KeyBoard=2;
//10110000
case0xd0:
KeyBoard=3;
//11010000
}
Ok=1;
while(((P1&
0xf0)==temp));
P1=0xfd;
//11111101(第二行置为低电0)
//11110000
=0xf0)
KeyBoard=4;
KeyBoard=5;
KeyBoard=6;
}
P1=0xfb;
//11111011(第三行置为低电0)
KeyBoard=7;
KeyBoard=8;
KeyBoard=9;
P1=0xf7;
//11110111(第四行置为低电0)
KeyBoard=0;
KeyBoard=10;
KeyBoard=11;
}
}
}
voidtimer0()interrupt1//终端原定时/计数器0级别较高
staticcnt=0;
TH0=(65536-2500)/256;
TL0=(65536-2500)%256;
cnt++;
if(cnt>
3)cnt=1;
switch(cnt)
{
case1:
P2=P3&
0xf8;
//11111000控制蜂鸣器数码管位选
P0=table[*p];
P3=P3|0x01;
//00000001选通第一个数码管
break;
case2:
//11111000
P0=table[*(p+1)];
P3=P3|0x02;
//00000010选通第二个数码管
case3:
//11111000
P0=table[*(p+2)];
P3=P3|0x04;
//00000100选通第三个数码管
voidtimer1()interrupt3//中断源定时/计数器1
time++;
课程设计
评语
成绩
指导教师
(签字)
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 33 键盘 位数 电子 号码