键盘3位数电子号码锁Word格式文档下载.docx
- 文档编号:20372992
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:21
- 大小:194.75KB
键盘3位数电子号码锁Word格式文档下载.docx
《键盘3位数电子号码锁Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《键盘3位数电子号码锁Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
设计并制作出一个以单片机为核心的电子锁系统:
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口可作为通用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口:
具有内部上拉电阻的8位双向I/O口。
P2口用做输出口时,可驱动4各TTL负载;
用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。
若负载为低电平,则通过内部上拉电阻向外部输出电流。
在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:
具有内部上拉电阻的8位双向口。
P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;
用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。
若外部的负载是低电平,则通过内部上拉电阻向输出电流。
在本设计中,P3口作为时间设置的4按键输入,因为有上拉电阻,所以可以通过按键直接接地,简化了电路。
在与FLASH并行编程和校验时,P3口可输入某些控制信号。
P3口除了通用I/O口功能外,还有替代功能如表1所示。
表1P3口的第二功能
端口引脚
各个功能
P3.0
RXD(串行口输入端)
P3.1
TXD(串行口输出端)
P3.2
INT0(外部中断0请求输入端,低电平有效)
P3.3
INT1(外部中断1请求输入端,低电平有效)
P3.4
T0(定时/计数器0计数脉冲输入端)
P3.5
T1(定时/计数器1计数脉冲输入端)
P3.6
WR(外部数据存储器写选通信号输出端,低电平有效)
P3.7
RD(外部数据存储器读选通信号输出端,低电平有效)
单片机使用宏晶公司支持串口下载程序(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电源,这点需注意,上拉电阻接法如下:
数码管位选端由P2口得前三个端口控制,分别通过PNP接到数码管的公共端,其接法如下图:
数码管显示是单片机中应用最为广泛的一种显示方式之一,设计中0-9与P0口对应关系如下表:
P0口值
0X22
0Xce
0x6e
0x3a
0x7c
显示值
P0值
0xfc
0x26
0xfe
0x7e
0xf6
7
8
52单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如下图所示。
图中,电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。
晶振频率的典型值为12MH2,采用6MHz的情况也比较多。
内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。
外部振荡方式是把外部已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持同步。
3.2.4蜂鸣器电路单元
如图下所示
硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。
若亮度不理想,可以调整P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。
实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况进行综合硬件测试分析。
硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试:
是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试:
是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。
设置初值
N
NY
N
Y
Y
根据原理图列写原件清单,领取所需的元件,板子和工具(烙铁,钳子,万用表,螺丝刀,剪刀),去试验台焊电路板。
焊完板子,通过软硬结合的方式对电路板进行硬件调试,硬件没错误之后,开始进行软件编程,直到整个功能实现,并进行优化。
本次单片机的课程设计与以往我们做过的课程设计大为不同。
如果说以前是牛刀小试的练习,那这次可以说是荷枪实弹的实战。
从上周一得到设计题目开始,我们一组成员便开始了积极的备战。
设计原理图、画PCB图、插件焊接、编程到调试,我们都团结一致,力图精益求精,因为我们知道,这是考验我们团队的时候。
在略为艰苦的环境下,我们克服一个又一个困难,最终完成了本次课程设计。
但是在过程中我们还是遇到了各种各样的挫折。
在设计图完成后,我们的设计图一度被指出很多不足之处,有一些甚至是很严重的错误。
幸亏有老师孜孜不倦的在旁指导,我们才最终完成了设计图。
这让我们认识到了自身的不足之处,告诫我们在今后的学习生活中脚踏实地,将知识学踏实才是我们的立身之本。
在插件与焊接的过程中我们也遇到了不少困难,但最终在我们的合作下都解决了。
我们在设计的一开始就进行的明确分工与在整个过程中的精诚合作是我们能解决各种问题的关键。
这次的课设让我们更加认识到了团队合作的重要性,让我们意识到在当今社会中,仅仅依靠一个人已经很难完成一些事情,合作已成为时代的主题。
在为单片机编写程序的过程中,高超同学用了一夜的时间完成了编程,他的这种精神让我十分敬佩,也让我很羞愧。
在本学期,由于没有认识的单片机技术的重要性,我在单片机的学习上并没有花费太多功夫,如今书到用时方恨少。
我们的不能帮忙让高超同学幸苦了,我们感到十分歉疚。
在程序的调试过程中,由于我们设计时候的各种小漏洞使得设备在运行的时候存在着或多或少的毛病。
我们深深认识到了自身知识的局限性。
在整个设计阶段,我们应该专心致志的研究各个阶段可能发生的情况,而不是得过且过,这个毛病若不改正,日后必将成为我们进步的桎梏,也将是我们以后踏入社会的绊脚石。
最后我想说的是,无论这次课程设计的结果如何,至少我们都参与到了其中,不仅收获了经验而且学到了很多我们在课堂上无法学到的东西。
我们的动手能力进一步得到提升,同时我们认识到了自身存在的各种不足,我们在以后的学习生活中一定会努力克服缺点,改正错误。
这次宝贵的经历必将成为我们一生的财富。
在这里我还要感谢老师在整个过程中不辞辛苦的辅导,如果没有老师的帮助,我们恐怕很难完成任务。
老师,您辛苦了!
附录C语言实验程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitfmq=P2^3;
sbitwei1=P2^0;
sbitwei2=P2^1;
sbitwei3=P2^2;
ucharCode[3]={0,0,0};
ucharInPut[3]={1,1,1};
char、codetable[]={0X22,0Xce,0x6e,0x3a,0x7c,0xfc,0x26,0xfe,0x7e,0xf6};
uintjianzhi,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(jianzhi==11)
{
Set=1;
Ok=0;
//确认关键字
}
if(Set==1&
&
Ok==1&
jianzhi<
10)//重新设置密码的条件
switch(count)
{
case0:
Code[0]=jianzhi;
count++;
break;
case1:
Code[1]=jianzhi;
case2:
Code[2]=jianzhi;
}
if(Set==0&
10)
if(count>
2)count=0;
InPut[0]=jianzhi;
InPut[1]=jianzhi;
InPut[2]=jianzhi;
}
if(jianzhi==10)
jianzhi=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
temp=P1;
//P1赋给tenp
temp=temp&
0xf0;
//0xf0赋给temp
if(temp!
=0xf0)//检测是否有按键按下
delay(5000);
//去除干扰
if(temp!
=0xf0)//再次检测是否有按键按下11110000
switch(temp)
{
case0x70:
jianzhi=1;
//01110000
case0xb0:
jianzhi=2;
//10110000
case0xd0:
jianzhi=3;
//11010000
}
Ok=1;
while(((P1&
0xf0)==temp));
P1=0xfd;
//11111101
//11110000
=0xf0)
jianzhi=4;
jianzhi=5;
jianzhi=6;
}
P1=0xfb;
//11111011
jianzhi=7;
jianzhi=8;
jianzhi=9;
P1=0xf7;
//11110111
jianzhi=0;
jianzhi=10;
jianzhi=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//中断源定时/计数器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘 位数 电子 号码
![提示](https://static.bdocx.com/images/bang_tan.gif)