电子钟密码锁设计Word文件下载.docx
《电子钟密码锁设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子钟密码锁设计Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
2.5.1.设计流程图…………………………
2.5.2.程序模块设计……………………
2.5.3调试过程与说明……………………
2.6.小结……………………………………
第三章总结与体会………………………………………
参考文献…………………………………………………
附录一数字电子时钟程序清单…………………
附录二简易计算器程序清单………………………………
前言
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
单片机是智能仪器、计算机外部设备、生产过程控制的控制核心。
单片机已经是一项十分成熟的技术,因其具有小型化、廉价、简单可靠和稳定性好等优点,在工业测控、电子仪器、汽车电子系统、日用家电、电子通信、办公自动化设备和尖端武器(如雷达、火炮的控制系统)等方面都有广泛的应用。
在本次设计中使用的是STC89C52单片机,它是一种新型的价格便宜而性能优良的单片机系统,结构简单,布局合理,适用于多种程序功能调试和模拟。
本次设计用单片机开发系统来模拟密码锁的各种功能,在开发系统中输入编译好的程序,使用其键盘作为数字输入键和各功能键.
通过这次课程设计,进一步掌握了如何利用接口电路进行硬件系统的设计,如何进行软件的设计,同时增强了学习兴趣及动手能力。
在报告中,详细地记述了整个设计过程的各个环节,其中的不足欢迎师生们指出或给予更好的建议。
1.1设计任务
1.1.1设计要求
用单片机开发系统,设计一个电子时钟,从左到右依次以时分秒的顺序显示时间。
并且可以在程序代码中修改时间初始值。
提高要求:
1、可以加入闪烁显示,每过一秒使时和分,分和秒间的两点闪烁一次。
2、应用键盘扫描程序,能随时在键盘上修改时钟的初始值。
1.1.1 设计思路
本课题的数字电子时钟设计采用单片机定时器产生100MS的时,并开定时中断。
设计出一个1S的定时程序。
每进入一个定时中断,在其中断服务程序中计算分钟,时钟、钞钟。
预先资源定义:
时分秒的存放空间
1.2设计框图及简要说明
主程序
数码动态扫描模块
当前时间计时模块
当前时间调整模块
数值转换模块
计时单元由单片机内部的定时器来实现;
时间显示采用LED数码管动态扫描方式;
LED数码管的段码输入,由并行口P1低四位输入。
1.3硬件设计原理图及说明
一、原理图
图1.3.1数字电子时钟设计原理图
二、应用原理
该原理图以8255为接口芯片。
8255是intel公司生产的可编程输入输出接口芯片,它是具有3个8位的并行I/O端口,具有三种工作方式,被广泛地使用于单片机的并行I/O端口。
●工作方式0:
基本输入输出方式
●工作方式1:
选通输入输出方式
●工作方式2:
双向传送方式
8255的读/写控制逻辑电路接受CPU发来的控制口号RD、WR、RESET和地址信号A1~A0。
然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU或者将CPU送来的数据写入端口,各端口的工作状态。
如表1所示。
AI
A0
RD
WR
CS
工作状态
1
A口数据送入数据总线
B口数据送入数据总线
C口数据送入数据总线
数据总线送入A口
数据总线送入B口
数据总线送入C口
数据总线送入控制字寄存器
表1-1
1.4软件设计
1.4.1程序设计流程图(主程序、中断服务子程序及修改时间)
一、主程序框图
开始
设计初始化
初始化显示(调显)
调键盘扫描子程序
有键按下否
修改初值
按键错误
开始计时
定时中断
开定时中断
显示错误
调键扫
修改键否?
调修改子程序
返回
图1.4.1数字电子时钟主程序流程图
二、中断服务子程序框图
中断入口
中断保护
秒+1
调显示程序
秒>
59
秒清零送显缓
分+1
分>
分清零送显缓
时+1
时清零送显缓
时>
23
时的数量存进显缓
秒的数量存进显缓
中断返回
分的数量存进显缓
图1.4.2数字电子时钟中断服务子程序流程图
三、修改时间子程序
图1.4.3数字电子时钟修改时间子程序流程图
1.4.2调试过程与说明
在调试数字电子时钟程序时出现了数码管所显示时间重叠模糊的情况。
通过对程序代码和对数码管显示原理的分析,得出了出现上述情况的原因是由于8个数码管显示的数码变化速度很快,受人眼视觉暂留的影响,人眼无法分辨前后两次所显示的数码。
为解决这个问题所采取的措施是,在每显示一个数码管的内容后加一个延迟程序来减缓所显示数码的变换速度。
改进后再调试程序时8个数码管所显示的时间十分清晰。
1.5小结
在本次课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,最后在指导老师和同学们的帮助下,作者这个小组一起共同完成了该实验,实现了数字电子时钟的基本功能。
第二章简易电子计算器
2.1设计要求
设计一个可以进行简易加减运算的计算器,
要求:
1、键输入数和运算符号;
2、LED显示运算过程和结果(十进制数);
3、有清零和复位功能;
◢提高要求
能显示2位输入和3位输出。
2.2设计思路
显示设备采用八片七段共阴极LED显示器,共设置16个键,其中数字键0~9共十个,接下来依次是加号键、减号键、等于号键、清除键。
利用C52的定时器中断以给定的时间间隔扫描键盘,检测出键盘输入的信号,然后送至单片机进行处理,完成简单的加减的计算器功能,然后将结果送至LED的显示器,显示输出结果
2.3设计框图及简要说明
2.4硬件设计原理图及说明
由于本次课程设计以软件设计部分为主,简易电子计算器是继数字电子时钟的训练和巩固。
所以在应用硬件方面的原理和设计和数字电子时钟相同。
详细工作原理请见第一章1.3节硬件设计原理图及说明
2.5.软件设计
2.5.1程序设计流程图
初始化
提示输入一个数
调键盘子程序
保存该数据
提示输入另
一个数
键盘子程序
提示输入运算符
加法子程序
减法子程序
判断运算符类型
图2.5.1简易电子计算器程序流程图
2.5.2程序模块设计
1、主程序的设计
主程序主要是用来进行初始化的,调用自检程序,清空各个标志位,清空缓存区,给定定时器0工作方式。
在等待定时器0中断时主程序在以下程序段内循环:
LP1:
MOVPCON,#01H
SJMPLP1
2、中断模块的程序设计
进入定时器0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。
如果不是则退出中断程序。
3、显示模块的程序设计
由于使用的是静态显示,故先要对SCON进行相关设置,让串口工作在方式0下,使用指令MOVSCON,#00H就可以了。
首先从高位开始进行灭零显示,并将最后一个灭零的位,标志为负号位,然后判断负数标志位是否为一,是则将标志为负号位的送出显示负号(笔形码0FEH),否则直接送出显示
2.5.3调试过程与说明
在上机实践中,作者发现运算结果与实际结果不相符合,经过单步运行发现,原来是调用BCD码转二进制码子程序错误,于是作者调用成了二进制转BCD码子程序,原因是因为两个子程序的标号很接近,一不小心就会调用错误,说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。
在编程时,充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块进行调适就可以了,充分体现了结构化编程的优势。
一开始,设计只支持正整数的运算,并没有加入负数运算,因为时间问题,只是大概想了思路,并没实现。
最后在班上同学的帮助下。
终于实现了计算器的基本功能。
2.6小结
由于简易电子计算器是继数字电子时钟的练习和巩固,大多数模块都已经熟悉。
虽然在编程的过程中遇到了一些问题,但在同组人的共同努力下。
完成了本次课程设计的基本要求
第三章总结与体会
经过这次单片机专业课程设计,训练了作者的动手能力和理论实践相结合的能力,从中还体会到了团队的合作精神,因为一个人的能力毕竟有限,惟有善于合作的团队才能发挥出最大的能量。
在这次课程设计中,作者真正体会到了合作的重要性,作者这个班级在这次程序设计中总在一起,从要实现的功能到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚了我们班级的力量。
在遇到棘手的问题时,大家总是一起讨论,一起把问题解决;
在作者遇到不很明白的程序时,是同学们耐心地帮助讲解;
在面对有错的程序不知所措时,也是同学们帮助作者一步步地调试,耐心的指导,直至程序能正常运行。
总的来说,这次单片机课程设计对我们来说是很有意义的,以往在老师讲课时不是很明白的问题在这次课程设计中通过大家一起学习,一起动手,很多问题都迎刃而解。
而且加强了作者班级同学之间的凝聚力
参考文献
[1]于海生.微型计算机控制技术[M].清华大学出版社.1999-6
[2]孙涵芳.MCS-51系列单片机原理及应用[M].北京航空航天大学出版社.1996-4
[3]黄正谨.综合电子设计与实践[M].东南大学出版社.2002-3
[4]杨欣等.电子设计从零开始[M].清华大学出版社.2005-10
附录一:
数字电子时钟程序清单
DEDAEQU33H;
50MS记数常数,满200次为1S(T0)
NUMEQU34H;
0.3S记数常数,满6次为0.3S(T1)
SECEQU30H;
秒数据存储区
MINEQU31H;
分数据存储区
HOUEQU32H;
时数据存储区
SEC0EQU40H;
秒显缓区低位
SEC1EQU41H;
秒显缓区高位
MIN0EQU42H;
分显缓区低位
MIN1EQU43H;
分显缓区高位
HOU0EQU44H;
时显缓区低位
HOU1EQU45H;
时显缓区高位
SSEC0EQU60H;
秒显缓区低位字型码
SSEC1EQU61H;
秒显缓区高位字型码
SMIN0EQU62H;
分显缓区低位字型码
SMIN1EQU63H;
分显缓区高位字型码
SHOU0EQU64H;
时显缓区低位字型码
SHOU1EQU65H;
时显缓区高位字型码
GWBIT06H;
个位标志
SWBIT07H;
十位标志
HALEQU47H
FUNCKEYEQU0E7H
HOUKEYEQU0C7H
MINKEYEQU077H
SECKEYEQU87H
KEYEQU52H
;
-----------------------------------------------------------
ORG0000H
LJMPMAIN
ORG000BH
LJMPINTT0;
T0中断程序
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳至INTT1执行
主程序;
MAIN:
MOVSEC,#0
MOVHOU,#23
MOVMIN,#59
MOVDEDA,#00H
MOVNUM,#06H;
0.3秒定时用初值
MOVSP,#0F0H
MOVTMOD,#11H;
定时器0为方式1
MOVTH0,#50H;
赋初值
MOVTL0,#0C3H
MOVTL1,#50H;
装定时器T1定时初值
MOVTH1,#0C3H
SETBTR0;
启动T0
MOVIE,#82H
LCALLROLL
MOVSEC,#0
MOVHOU,#23
MOVMIN,#59
S:
LCALLDISP
LCALLKEY_SCAN;
键扫
SJMPS
--------------------------------------------------------
显示程序
DISP:
MOVA,SEC
MOVB,#10;
S转换送显缓区
DIVAB
MOVSEC0,B
MOVSEC1,A
MOVA,MIN
MIN转换送显缓区
MOVMIN0,B
MOVMIN1,A
MOVA,HOU
H转换送显缓区
MOVHOU0,B
MOVHOU1,A
MOVR5,#6
MOVR0,#40H
MOVR1,#60H
LOOP:
MOVA,@R0
MOVDPTR,#TAB;
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR5,LOOP
JBCSW,LOPP0
MOV59H,#00H;
"
"
MOV58H,#00H;
SJMPDISP0
LOPP0:
MOV59H,#09H;
--"
MOV58H,#09H;
DISP0:
MOVA,#80H;
写8255显示状态字
MOVDPTR,#0A003H
MOVX@DPTR,A
MOVA,#0FEH
MOVDPTR,#0A001H;
输出片选信号
MOVA,SHOU1;
HOURH
MOVDPTR,#0A000H
LCALLDE10MS
MOVA,#0FDH
MOVA,SHOU0;
HOURL
MOVA,#0FBH
MOVA,58H;
-"
MOVA,#0F7H
MOVA,SMIN1;
MINATEH
MOVA,#0EFH
MOVA,SMIN0;
MINSTEL
MOVA,#0DFH
MOVA,59H;
MOVA,#0BFH
MOVA,SSEC1;
SECONDH
MOVA,#7FH
MOVA,SSEC0;
SECONDL
RET
DELAY:
PUSH02H
DELAY1:
DELAY2:
DELAY3:
DJNZR2,DELAY3
POP02H
DJNZR2,DELAY2
DJNZR2,DELAY1
DJNZR2,DELAY
DE10MS:
;
延时子程序
DL1:
MOVR7,#14H;
DL2:
MOVR6,#17H
DL3:
DJNZR6,DL3
DJNZR7,DL2
RET
TAB:
共阴0-9字行码
DB3FH;
DB06H;
DB5BH;
2
DB4FH;
3
DB66H;
4
DB6DH;
5
DB7DH;
6
DB07H;
7
DB7FH;
8
DB6FH;
9
DB00H;
熄灭符
SEG:
键盘扫描程序
KEY_SCAN:
MOVDPTR,#0A003H;
设置状态字
MOVA,#89H
MOVX@DPTR,A
LP51:
设置端口B
MOVA,#00H
MOVDPTR,#0A002H
MOVXA,@DPTR
ANLA,#0FH
CJNEA,#0FH,XD
AJMPOVER
XD:
MOVR7,#80
DEL1:
MOVR6,#123
DEL2:
DJNZR6,DEL2
DJNZR7,DEL1
CJNEA,#0FH,JKEY
AJMPLP