基于at89c51控制的定时闹钟设计课程设计论文毕业论文.docx
《基于at89c51控制的定时闹钟设计课程设计论文毕业论文.docx》由会员分享,可在线阅读,更多相关《基于at89c51控制的定时闹钟设计课程设计论文毕业论文.docx(30页珍藏版)》请在冰豆网上搜索。
基于at89c51控制的定时闹钟设计课程设计论文毕业论文
单位代码
学 号1201050050
分类号
密级
单片机应用技术课程设计
基于AT89C51单片机的定时闹钟设计
院(系)名称
专业名称
学生姓名
指导教师
目录
1概述1
1.1课程设计的目的和意义1
1.2设计要求1
2系统总体方案及硬件设计2
2.1系统设计原理2
2.2硬件设计2
2.2.1单片机AT89C512
2.2.2显示器的选择4
2.2.3控制按键的选择5
2.2.4时钟电路6
2.2.5喇叭:
SPEAKER6
3系统软件设计8
3.1系统软件设计说明8
3.2程序流程图9
3.2.1程序主流程图9
3.2.2时间设定设计9
3.3程序调试10
3.4仿真步骤11
3.5仿真结果11
4课程设计体会14
参考文献15
附1源程序代码16
附2系统原理图29
1.概述
1.1课程设计的目的和意义
课程设计是在学完《单片机原理及接口技术》课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机,软硬知识的理解,获得初步的应用经验,使对已学过的基础知识能有更深入的理解,学会独立思考、独立思考、独立工作,以及提高对所学应用基本理论分析和解决实际问题的能力。
为走出校门从事单片机应用的相关工作打下基础.
1.2设计要求
1)能显示:
时时—分分—秒秒。
2)能够设定定时时间、修改定时时间。
3)定时时间到能发出报警声。
设计的部分分为软件及硬件,软件部分写出闹钟的工作方式以及它是如何工作的,而硬件部分是软件的载体,画出正确的电路图然后在软件的控制下能使设计的定时闹钟正常工作。
2.系统总体方案及硬件设计
2.1系统设计原理
本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。
本系统采用单片机AT89C51作为本设计的核心元件,利用6位共阴数码管作为显示器件。
接入共阴LED显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,时间的定时用时钟电路,修改时间和定时用手动按键控制,报警声通过喇叭发出。
提示预先设定时间电器的起停时间到,从而控制电器的起停。
电路由下列部分组成:
时钟电路、复位电路、控制电路、LED显示,报警电路,芯片选用AT89C51单片机。
系统框图如图2-1所示:
图2-1系统框图
2.2硬件设计
2.2.1单片机AT89C51
AT89C51是一个低电压,高性能CMOS型8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器(ROM)和128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度.
图2-2是单片机AT89C51的引脚图:
图2-2单片机AT89C51引脚图
2.2.2显示器的选择
方案一:
液晶显示器。
如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。
但液晶显示器的驱动电路复杂,使用起来有一定的难度。
方案二:
点阵显示,是由八行八列的发光二极管集成在一块电路上组成,主要用来显示汉字,同时也能显示数字和少量图象,但它的焊接较麻烦,价格高,鉴于所设计的题目要求它不切实际。
所以排除此方案。
方案三:
用数码管作为显示器。
数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。
其缺点是功耗较大。
由于数码管使用起来较为方便,在夜间看时间也很方便,因此我选择了方案三。
单片机中通常使用7段LED,LED是发光二极管显示器的缩写。
LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,配置灵活,与单片机接口方便而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。
LED显示器有多种形式,如:
“米”字型显示器,点阵显示器和七段数码显示器等,在单片机系统中使用最多的是七段数码显示器。
本系统利用7SEG-MPX6-CC-BLUE数字显示器,7SEG-MPX6-CC-BLUE数字显示器的1-6引脚连接AT89C51单片机P2.0–P2.5接口,其他8个引脚分别与AT89C51单片机的P0.0-P0.7和共阳极管RESPACK-8排阻的2-9引脚分别连接。
因为共阴极的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故该系统中的6位LED数码管均用共阴极的数码管。
6位数码管的引脚图如图2-3所示:
图2-36位数码管的引脚
2.2.3控制按键的选择
方案一:
选取阵列式按键,减少了I/O口的使用,且扫描M×N个按键只需占用M+N个I/O口即可实现,但给编程带来了一定的困难,虽然节省了很多的口线,降低了成本,但在此设计中所用的按键要尽量少,因此排除此方案。
方案二:
独立式按键,每个按键实现一个功能,易于控制且编写程序简单,容易理解,虽然会占用一定的单片机I/O口资源,但是题目中要求使用的按键要尽量少。
通过以上两种方案比较,采用方案二。
2.2.4时钟电路
单片机的时钟产生方法有两种:
内部时钟方式和外部时钟方式。
本系统中AT89C51单片机采用内部时钟方式。
最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHz~12MHz之间。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF~100pF之间取值。
AT98C51单片机的时钟电路。
如图2-4所示:
图2-4时钟电路图
上拉电阻:
RESPACK-8
控制按键:
BUTTONACTIVESPSTPushButton
本系统要进行时间的调整和定时,因此用4个手动按键对其进行控制。
2.2.5喇叭:
SPEAKER
由P3.7口控制喇叭,使其定时时间到能发出报警声。
如图2-5所示:
图2-5喇叭引脚图
经过方案论证与比较,选择AT89C51作为主控,采用独立式按键控制,LED数码管动态扫描显示,喇叭:
SPEAKER,其中AT89C51单片机采用内部时钟方式。
3系统软件设计
3.1系统软件设计说明
该系统软件程序主要有主程序模块,定时中断服务程序,中断等待服务程序,键盘服务程序,显示子程序服务程序等六大模块组成。
在AT89C51外围的一个17管脚即P3.7管口上加喇叭器,通过软件与硬件的结合可实现定时报警功能。
图中按键从上往下设定为S1,S2,S3,S4,S1与p1.0相连,S2与p1.1相连,S3与p1.2相连,S4与p1.3相连。
当需要设定当前时间时,按一下S1键,进入时间设定状态,按一下S3,分钟加1;按一下S2,小时加1。
如此反复来设定当前时间。
调好时间后按S4退出当前时间设定状态;当要设定定时时间时,按下S2,进入定时时间设定状态,按一下S3,小时加1;按一下S1,分钟加1。
如此反复来设定要设定的定时时间。
设好后,按下S4退出定时时间设定状态。
3.2程序流程图
3.2.1程序主流程图
图3-1程序流程图
3.2.2时间设定设计
时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。
即只涉及4个键完成了6位时间参数的设定。
软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。
去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。
“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能
其流程图如下图3-2所示:
图3-2时间设定流程
3.3程序调试
1)将程序输入到keiluvision4的环境下;
2)用单步运行和断点运行方式调试程序;
3)调试T0中断服务程序,首先在记数单元39H、3AH、3BH、3CH单元中预置数,调试秒单元向分单元进位及分单元向时单元的进位,最后将T0中断服务程序统调通过;
4)在39H、3AH、3BH、3CH单元中预置数,调试显示程序;
5)调试主程序,使闹钟走时系统工作正常。
3.4仿真步骤
第一步:
用keiluvision4软件对程序进行编译,编译通过后,会自动生成HEX文件。
第二步:
在Proteus的元件库中找到AT89C51以及相应的元件,按照硬件设计中的说明把各部件连接起来组成一个定时闹钟的硬件系统。
第三步:
把在keiluvision4环境调试下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。
第四步:
验证系统能否实现所要求的功能,并检验错误。
3.5仿真结果
通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置。
定时时间到能发出报警声,使用keiluvision4软件编辑程序然后进行proteus进行仿真,其仿真图如下:
开始仿真时,显示如图3-3所示:
图3-3仿真图
(1)设定当前时间
当需要设定当前时间时,按一下S1键,进入时间设定状态,按一下S3,分钟加1;按一下S2,小时加1。
如此反复来设定当前时间。
调好时间后按S4退出当前时间设定状态。
如图3-4所示:
图3-4设定样式图
如图3-5:
设定当前时间是06:
06:
06
图3-5仿真时间设定图
(2)设定定时时间
当要设定定时时间时,按下S2,进入定时时间设定状态,按一下S3,小时加1;按一下S1,分钟加1。
如此反复来设定要设定的定时时间。
设好后,按下S4退出定时时间设定状态。
如图3-6所示图:
设定定时时间为06:
06
图3-6设定定时时间
如图3-7所示当到达时间06:
06时,喇叭发出报警声。
图3-7闹钟响起图
4课程设计体会
通过这次设计让我更深入了解在设计程序之前,务必要对所学单片机课程的内容有一个系统的了解,知道单片机片内片外的内容及其功能。
设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图。
在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路。
程序刚开始编好时,一般情况下会存在很多错误,要不断地修改,不断的改进才能达到预期的目的,编写程序的时间并不是很长,主要是修改程序会花很多时间。
总之,通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。
并且使我巩固了本课程所学的基本知识,还使我具有了撰写设计报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,看到自己几周的小成果,感觉一切的辛苦和艰难都是值得的。
参考文献
[1].张毅刚,单片机原理及应用,高等教育出版社.2014.
[2].皮大熊.单片机课程设计指导书.北京理工大学出版社.2010.
[3].吴金戌.8051单片机实践与应用.清华大学出版社.2003.
[4].楼然苗.51系列单片机设计实例.北京航空航天出版社.2004.
[5].黄仁欣.单片机原理及应用技术.清华大学出版社.2005.
[6].赵晓安.MCS-51单片机原理及应用.天津大学出版社.2001.3.
[7].凌玉华,单片机原理及应用系统设计,中南大学出版社.2006.
[8].胡汉才,单片机原理及应用,清华大学出版社.2004.
[9].徐江海.单片机实用教程.机械工业出版社.2007.
附1源程序代码
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME
ORG0100H
MAIN:
MOVSP,#50H
MOV20H,#00H;时间BINSECOND
MOV21H,#00H;BINMINUTE
MOV22H,#00H;BINHOUR
MOV23H,#01H;闹铃BINMINUTE
MOV24H,#01H;BINHOUR
MOV25H,#00H;定义一个标志位
MOV30H,#00H;时间BCDSECOND
MOV31H,#00H;
MOV32H,#00H;BCDMINUTE
MOV33H,#00H;
MOV34H,#00H;BCDHOUR
MOV35H,#00H;
MOV36H,#01H;闹铃BCDMINUTE
MOV37H,#00H;
MOV38H,#01H;BCDHOUR
MOV39H,#00H;
MOVTMOD,#01H;16位计数器T0,方式1
MOVTH0,#03CH;赋初值
MOVTL0,#0B0H
MOVIE,#10000111B;开中断T0,EA=1
SETBTR0;T0启动计数
MOVR2,#14H;计数器
MOVP2,#0FFH
LOOP:
LCALLTIMEPRO;调用现在时间与闹铃时间比较程序
LCALLDISPLAY1;调用现在时间显示子程序
JBP1.0,M1;判断按键是否按下
LCALLXIAOZHEN1;调用消抖程序
MOVC,25H.0
JCA1
A1:
CLR25H.0
LCALLSETTIME;调用设置现在时间子程序
LJMPLOOP
M1:
JBP1.1,M2
LCALLXIAOZHEN2
MOVC,25H.0
JCA2
A2:
CLR25H.0
LCALLSETATIME;调用设置闹钟的程序
LJMPLOOP
M2:
JBP1.3,M3
A3:
LCALLXIAOZHEN3
MOVC,25H.0
JCA4
A4:
CLR25H.0
M3:
LJMPLOOP
SETTIME:
L0:
LCALLDISPLAY1
JBP1.1,L1
LCALLXIAOZHEN4
MOVC,25H.0
JCA5
A5:
CLR25H.0
INC22H
MOVA,22H
CJNEA,#18H,GO12
MOV22H,#00H
MOV34H,#00H
MOV35H,#00H
LJMPL0
L1:
JBP1.2,L2
LCALLXIAOZHEN5
MOVC,25H.0
JCA6
A6:
CLR25H.0
INC21H
MOVA,21H
CJNEA,#3CH,GO11
MOV21H,#00H
MOV32H,#00H
MOV33H,#00H
LJMPL0
GO11:
MOVB,#0AH
DIVAB
MOV32H,B
MOV33H,A
LJMPL0
GO12:
MOVB,#0AH
DIVAB
MOV34H,B
MOV35H,A
LJMPL0
L2:
JBP1.3,L0
LCALLXIAOZHEN3
MOVC,25H.0
JCAX
AX:
CLR25H.0
RET
SETATIME:
LCALLDISPLAY2;调用闹钟设置,闹铃响时的显示程序
N0:
LCALLDISPLAY2
JBP1.2,N1
LCALLXIAOZHEN6
MOVC,25H.0
JCA7
A7:
CLR25H.0
INC24H
MOVA,24H
CJNEA,#24,GO22
MOV24H,#00H
MOV38H,#00H
MOV39H,#00H
LJMPN0
N1:
JBP1.0,N2
LCALLXIAOZHEN7
MOVC,25H.0
JCA8
A8:
CLR25H.0
INC23H
MOVA,23H
CJNEA,#60,GO21
MOV23H,#00H
MOV36H,#00H
MOV37H,#00H
LJMPN0
GO21:
MOVB,#0AH
DIVAB
MOV36H,B
MOV37H,A
LJMPN0
GO22:
MOVB,#0AH
DIVAB
MOV38H,B
MOV39H,A
LJMPN0
N2:
JBP1.3,N0
LCALLXIAOZHEN3
MOVC,25H.0
JCA9
A9:
CLR25H.0
RET
TIMEPRO:
MOVA,21H
MOVB,23H
CJNEA,B,BK
MOVA,22H
MOVB,24H
CJNEA,B,BK
SETB25H.0
MOVC,25H.0
JCXX
XX:
LCALLTIMEOUT
BK:
RET
TIMEOUT:
X1:
LCALLBZ
LCALLDISPLAY2
CLR25H.0
JBP1.3,X1
RET
BZ:
CLRP3.7
MOVR7,#250
T2:
MOVR6,#124
T3:
DJNZR6,T3
DJNZR7,T2
SETBP3.7
JBP1.3,XY
LCALLXIAOZHEN3
MOVC,25H.0
JCXY1
XY:
RET
XY1:
LJMPLOOP
XIAOZHEN1:
LCALLDISPLAY1
JBP1.0,XIAOZHEN1
MOVC,P1.0
JCXIAOZHEN1
LCALLDELAY
MOVC,P1.0
JCXIAOZHEN1
STOP1:
MOVC,P1.0
JNCSTOP1
LCALLDELAY
MOVC,P1.0
JNCSTOP1
SETB25H.0
RET
XIAOZHEN2:
LCALLDISPLAY2
JBP1.1,XIAOZHEN2
MOVC,P1.1
JCXIAOZHEN2
LCALLDELAY
MOVC,P1.1
JCXIAOZHEN2
STOP2:
MOVC,P1.1
JNCSTOP2
LCALLDELAY
MOVC,P1.1
JNCSTOP2
SETB25H.0
RET
XIAOZHEN3:
LCALLDISPLAY1
JBP1.3,XIAOZHEN3
MOVC,P1.3
JCXIAOZHEN3
LCALLDELAY
MOVC,P1.3
JCXIAOZHEN3
STOP3:
MOVC,P1.3
JNCSTOP3
LCALLDELAY
MOVC,P1.3
JNCSTOP3
SETB25H.0
RET
XIAOZHEN4:
LCALLDISPLAY1
JBP1.1,XIAOZHEN4
MOVC,P1.1
JCXIAOZHEN4
LCALLDELAY
MOVC,P1.1
JCXIAOZHEN4
STOP4:
MOVC,P1.1
JNCSTOP4
LCALLDELAY
MOVC,P1.1
JNCSTOP4
SETB25H.0
RET
XIAOZHEN5:
LCALLDISPLAY1
JBP1.2,XIAOZHEN5
MOVC,P1.2
JCXIAOZHEN5
LCALLDELAY
MOVC,P1.2
JCXIAOZHEN5
STOP5:
MOVC,P1.2
JNCSTOP5
LCALLDELAY
MOVC,P1.2
JNCSTOP5
SETB25H.0
RET
XIAOZHEN6:
LCALLDISPLAY2
JBP1.2,XIAOZHEN6
MOVC,P1.2
JCXIAOZHEN6
LCALLDELAY
MOVC,P1.2
JCXIAOZHEN6
STOP6:
MOVC,P1.2
JNCSTOP6
LCALLDELAY
MOVC,P1.2
JNCSTOP6
SETB25H.0
RET
XIAOZHEN7:
LCALLDISPLAY2
JBP1.0,XIAOZHEN7
MOVC,P1.0
JCXIAOZHEN7
LCALLDELAY
MOVC,P1.0
JCXIAOZHEN7
STOP7:
MOVC,P1.0
JNCSTOP7
LCALLDELAY
MOVC,P1.0
JNCSTOP7
SETB25H.0
RET
DELAY:
MOVR4,#14H
DL00:
MOVR5,#0FFH
DL11:
DJNZR5,DL11
DJNZR4,DL00
RET
TIME:
PUSHACC
PUSHPSW
MOVTH0,#03CH
MOVTL0,#0B0H
DJNZR2,RET0
MOVR2,#14H
MOVA,20H
CLRC
INCA
CJNEA,#3CH,GO1
MOV20H,#0
MOV30H,#0
MOV31H,#0
MOVA,21H
INCA
CJNEA,#3CH,GO2
MOV21H,#0H
MOV32H,#0
MOV33H,#0