电子号码锁.docx
- 文档编号:30321963
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:21
- 大小:167.71KB
电子号码锁.docx
《电子号码锁.docx》由会员分享,可在线阅读,更多相关《电子号码锁.docx(21页珍藏版)》请在冰豆网上搜索。
电子号码锁
课程设计说明书
(2014/2015学年第二学期)
课程名称:
单片机课程设计
题目:
电子号码锁
专业班级:
电气工程及其自动化1226班
学生姓名:
学号:
指导教师:
杜永等
设计周数:
两周
设计成绩:
2015年7月9日
目录
1、课程设计目的1
2、课程设计任务1
2.1原始数据及任务1
2.2技术要求1
3、课程设计内容1
3.1方案设计1
3.1.1STC90C52AD的功能参数介绍1
3.1.2综合电路设计3
3.2单元电路设计4
3.2.1键盘单元4
3.2.2数码管显示5
3.2.4蜂鸣器电路单元6
3.4系统调试7
3.5程序流程图8
3.6系统实施8
4、参考文献9
附录C语言实验程序9
附录电路原理图16
1、课程设计目的
1.1用单片机课程及已学电子电路知识设计,包括电路图的设计和制板等。
1.2通过课程设计加深对单片机课程的相关知识的学习和理解。
1.3初步学会一些设计思想和实践技能。
提高学生综合素质。
1.4让学生从设计过程中领悟到相互合作的重要性。
2、课程设计任务
2.1原始数据及任务
设计并制作出一个以单片机为核心的电子锁系统:
1、确定总体设计方案;2、设计键盘输入电路;3、设计显示电路;4、合理分配地址,编写系统程序;5、利用Protel设计硬件电路原理图和PCB图;6、软硬件联机调试。
2.2技术要求
电源打开后,显示器显示“000”,“111”为内定密码;输入号码,再按“确定”开门键。
若号码正确,则门会打开(用蜂鸣器指示),否则显示器会清除为“000”;并且密码可修改。
3、课程设计内容
3.1方案设计
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口:
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
1
C13-C17
独石电容
0.22uF(224)
5
J1-J4,CRY
LstsHsts
接线插孔座
排母
86针
C1C2
电解电容
1.0uF/50V
2
C3C4C0
电解电容
10uF/50V
3
CRY
晶体谐振器
6MHz
1
C5-C8
电解电容
47uF(22uF)
4
High,Low,PS
发光二极管
φ3
3
JPS
接线端子
电源用
1
R1
金属膜电阻
200Ω
1
RST
按钮
小(0.2×0.3)
1
R0
金属膜电阻
6.8K
1
JDB
DB9插座
DB9针形座
1
R2R3R4
金属膜电阻
3.3K
3
U1
DIP插座
DIP40
1
R9
金属膜电阻
1M
1
U2
DIP插座
DIP16
1
3.1.2综合电路设计
本系统共有两部分构成,即硬件部分与软件部分。
其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
其原理框图如下图
3.2单元电路设计
3.2.1键盘单元
键盘设计如下图所示
其中12个键的功能分配如下
S1:
1S4:
2S7:
3
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口值
0xc0
0xf9
0xa4
0xb0
0x99
显示值
0
1
2
3
4
P0值
0x92
0x82
0xf8
0x80
0x90
显示值
5
6
7
8
9
3.2.3时钟产生单元
52单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如下图所示。
图中,电容器Cl,C2起稳定振荡频率、快速起振的作用,其电容值为22pF。
晶振频率的典型值为12MH2,采用6MHz的情况也比较多。
内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。
外部振荡方式是把外部已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持同步。
(本次课设采用6MHz)
3.2.4蜂鸣器电路单元
3.4系统调试
硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。
若亮度不理想,可以调整P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。
实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况进行综合硬件测试分析。
硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试:
是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试:
是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试:
利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。
3.5程序流程图
3.6系统实施
根据原理图列写原件清单,领取所需的元件,烙铁,万用表,去试验台焊电路板。
焊完板子,通过软硬结合的方式对电路板进行硬件调试,硬件没错误之后,开始进行软件编程,直到整个功能实现,并进行优化。
3.7实习心得
从上周一得到设计题目开始,我们一组成员便开始了积极的备战。
设计原理图、画PCB图、插件焊接、编程到调试,我们都团结一致,力图精益求精,因为我们知道,这是考验我们团队的时候。
在这两周的时间里,我学到了很多,对单片机有了更深刻的认识,也对自己的不足有了清醒的认识。
在设计过程中,老师给予了我们很多帮助,原理图设计时,我们不确定各个电阻的的阻值如何选取,就去问老师,老师不仅告诉我们选取什么阻值,还告诉选取的理由,当调试失败出问题时,老师帮助我们找问题,他们有经验有学识,对我们帮助很大。
在设计图完成后,我们的设计图一度被指出很多不足之处,有一些甚至是很严重的错误。
幸亏有老师的教导,我们才最终完成了设计图。
这让我们认识到了自身的不足之处,告诫我们在今后的学习生活中脚踏实地,将知识学踏实才是我们的立身之本。
在这里我还要感谢老师在整个过程中不辞辛苦的辅导,非常感谢老师。
最后我想说的是,无论这次课程设计的结果如何,至少我们都参与到了其中,不仅收获了经验而且学到了很多我们在课堂上无法学到的东西。
我们的动手能力进一步得到提升,同时我们认识到了自身存在的各种不足,我们在以后的学习生活中一定会努力克服缺点,改正错误。
这次宝贵的经历必将成为我们一生的财富。
4、参考文献
[1]张毅刚.单片机原理及应用.北京:
高等教育出版社.2010.5(4)
[2]彭为,黄科,雷道仲.单片机典型系统设计实例精讲.北京:
电子工业出版社.2006.5
[3]刘刚,秦永左.单片机原理及应用.北京:
中国林业出版社,2006.9
[4]李建忠.单片机原理及应用.西安:
西安电子科技大学出版社,2002
附录C语言实验程序
#include
#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)//重新设置密码的条件
{
Ok=0;
switch(count)
{
case0:
Code[0]=KeyBoard;count++;break;
case1:
Code[1]=KeyBoard;count++;break;
case2:
Code[2]=KeyBoard;count++;break;
}
}
if(Set==0&&Ok==1&&KeyBoard<10)
{
Ok=0;
if(count>2)count=0;
switch(count)
{
case0:
InPut[0]=KeyBoard;count++;break;
case1:
InPut[1]=KeyBoard;count++;break;
case2:
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]))
{
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,所有列线置为高电平)
if(temp!
=0xf0)//检测是否有按键按下
{
delay(5000);//去除干扰
if(temp!
=0xf0)//再次检测是否有按键按下11110000
{
switch(temp)
{
case0x70:
KeyBoard=1;break;//01110000
case0xb0:
KeyBoard=2;break;//10110000
case0xd0:
KeyBoard=3;break;//11010000
}
Ok=1;
while(((P1&0xf0)==temp));
}
}
P1=0xfd;//11111101(第二行置为低电0)
temp=P1;
temp=temp&0xf0;//11110000
if(temp!
=0xf0)
{
delay(5000);
if(temp!
=0xf0)
{
Ok=1;
switch(temp)
{
case0x70:
KeyBoard=4;break;
case0xb0:
KeyBoard=5;break;
case0xd0:
KeyBoard=6;break;
}
while(((P1&0xf0)==temp));
}
}
P1=0xfb;//11111011(第三行置为低电0)
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(5000);
if(temp!
=0xf0)
{
Ok=1;
switch(temp)
{
case0x70:
KeyBoard=7;break;
case0xb0:
KeyBoard=8;break;
case0xd0:
KeyBoard=9;break;
}
while(((P1&0xf0)==temp));
}
}
P1=0xf7;//11110111(第四行置为低电0)
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(5000);
if(temp!
=0xf0)
{
Ok=1;
switch(temp)
{
case0x70:
KeyBoard=0;break;
case0xb0:
KeyBoard=10;break;
case0xd0:
KeyBoard=11;break;
}
while(((P1&0xf0)==temp));
}
}
}
}
}
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:
P2=P3&0xf8;//11111000
P0=table[*(p+1)];//
P3=P3|0x02;//00000010选通第二个数码管
break;
case3:
P2=P3&0xf8;//11111000
P0=table[*(p+2)];//
P3=P3|0x04;//00000100选通第三个数码管
break;
}
}
voidtimer1()interrupt3//中断源定时/计数器1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
}
附录电路原理图
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 号码