资源描述
第 II 页
黄河科技学院课程设计
单位代码
学 号 1201050050
分 类 号
密 级
单片机应用技术课程设计
基于AT89C51单片机的定时闹钟设计
院(系)名称
专业名称
学生姓名
指导教师
目 录
1 概述 1
1.1 课程设计的目的和意义 1
1.2 设计要求 1
2 系统总体方案及硬件设计 2
2.1 系统设计原理 2
2.2 硬件设计 2
2.2.1 单片机AT89C51 2
2.2.2 显示器的选择 4
2.2.3 控制按键的选择 5
2.2.4 时钟电路 6
2.2.5 喇叭:SPEAKER 6
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
第 30 页
黄河科技学院课程设计
1.概述
1.1课程设计的目的和意义
课程设计是在学完《单片机原理及接口技术》课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机,软硬知识的理解,获得初步的应用经验,使对已学过的基础知识能有更深入的理解,学会独立思考、独立思考、独立工作,以及提高对所学应用基本理论分析和解决实际问题的能力。为走出校门从事单片机应用的相关工作打下基础.
1.2 设计要求
1)能显示:时时—分分—秒秒。
2)能够设定定时时间、修改定时时间。
3)定时时间到能发出报警声。
设计的部分分为软件及硬件,软件部分写出闹钟的工作方式以及它是如何工作的,而硬件部分是软件的载体,画出正确的电路图然后在软件的控制下能使设计的定时闹钟正常工作。
2.系统总体方案及硬件设计
2.1系统设计原理
本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。
本系统采用单片机AT89C51作为本设计的核心元件,利用6位共阴数码管作为显示器件。接入共阴LED显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,时间的定时用时钟电路,修改时间和定时用手动按键控制,报警声通过喇叭发出。提示预先设定时间电器的起停时间到,从而控制电器的起停。
电路由下列部分组成:时钟电路、复位电路、控制电路、LED显示,报警电路,芯片选用AT89C51单片机。
系统框图如图 2-1所示:
复位、时钟等电路
按钮电路
AT89C51单片机
6位数码管显示电路
闹铃声指示电路
电源系统
图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-3 6位数码管的引脚
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
控制按键:BUTTON ACTIVE SPST PushButton
本系统要进行时间的调整和定时,因此用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)将程序输入到keil uvision4的环境下;
2)用单步运行和断点运行方式调试程序;
3)调试T0中断服务程序,首先在记数单元39H、3AH、3BH、3CH单元中预置数,调试秒单元向分单元进位及分单元向时单元的进位,最后将T0中断服务程序统调通过;
4)在39H、3AH、3BH、3CH单元中预置数,调试显示程序;
5)调试主程序,使闹钟走时系统工作正常。
3.4仿真步骤
第一步:用keil uvision4软件对程序进行编译,编译通过后,会自动生成HEX文件。
第二步:在Proteus的元件库中找到AT89C51以及相应的元件,按照硬件设计中的说明把各部件连接起来组成一个定时闹钟的硬件系统。
第三步:把在keil uvision4环境调试下生成的.HEX文件装入到AT89C51里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现。
第四步:验证系统能否实现所要求的功能,并检验错误。
3.5仿真结果
通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置。定时时间到能发出报警声,使用keil uvision4软件编辑程序然后进行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源程序代码
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME
ORG 0100H
MAIN:MOV SP,#50H
MOV 20H,#00H ;时间 BIN SECOND
MOV 21H,#00H ; BIN MINUTE
MOV 22H,#00H ; BIN HOUR
MOV 23H,#01H ;闹铃 BIN MINUTE
MOV 24H,#01H ; BIN HOUR
MOV 25H,#00H ;定义一个标志位
MOV 30H,#00H ;时间 BCD SECOND
MOV 31H,#00H ;
MOV 32H,#00H ; BCD MINUTE
MOV 33H,#00H ;
MOV 34H,#00H ; BCD HOUR
MOV 35H,#00H ;
MOV 36H,#01H ;闹铃 BCD MINUTE
MOV 37H,#00H ;
MOV 38H,#01H ; BCD HOUR
MOV 39H,#00H ;
MOV TMOD,#01H ;16位计数器 T0,方式1
MOV TH0,#03CH ;赋初值
MOV TL0,#0B0H
MOV IE,#10000111B ;开中断 T0,EA=1
SETB TR0 ;T0启动计数
MOV R2,#14H ;计数器
MOV P2,#0FFH
LOOP:LCALL TIMEPRO ; 调用现在时间与闹铃时间比较程序
LCALL DISPLAY1 ; 调用现在时间显示子程序
JB P1.0,M1 ; 判断按键是否按下
LCALL XIAOZHEN1 ; 调用消抖程序
MOV C,25H.0
JC A1
A1:CLR 25H.0
LCALL SETTIME ; 调用设置现在时间子程序
LJMP LOOP
M1:JB P1.1,M2
LCALL XIAOZHEN2
MOV C,25H.0
JC A2
A2:CLR 25H.0
LCALL SETATIME ; 调用设置闹钟的程序
LJMP LOOP
M2:JB P1.3,M3
A3:LCALL XIAOZHEN3
MOV C,25H.0
JC A4
A4:CLR 25H.0
M3:LJMP LOOP
SETTIME:
L0:LCALL DISPLAY1
JB P1.1,L1
LCALL XIAOZHEN4
MOV C,25H.0
JC A5
A5:CLR 25H.0
INC 22H
MOV A,22H
CJNE A,#18H,GO12
MOV 22H,#00H
MOV 34H,#00H
MOV 35H,#00H
LJMP L0
L1:JB P1.2,L2
LCALL XIAOZHEN5
MOV C,25H.0
JC A6
A6:CLR 25H.0
INC 21H
MOV A,21H
CJNE A,#3CH,GO11
MOV 21H,#00H
MOV 32H,#00H
MOV 33H,#00H
LJMP L0
GO11:MOV B,#0AH
DIV AB
MOV 32H,B
MOV 33H,A
LJMP L0
GO12:MOV B,#0AH
DIV AB
MOV 34H,B
MOV 35H,A
LJMP L0
L2:JB P1.3,L0
LCALL XIAOZHEN3
MOV C,25H.0
JC AX
AX:CLR 25H.0
RET
SETATIME:LCALL DISPLAY2 ;调用闹钟设置,闹铃响时的显示程序
N0:LCALL DISPLAY2
JB P1.2,N1
LCALL XIAOZHEN6
MOV C,25H.0
JC A7
A7:CLR 25H.0
INC 24H
MOV A,24H
CJNE A,#24,GO22
MOV 24H,#00H
MOV 38H,#00H
MOV 39H,#00H
LJMP N0
N1:JB P1.0,N2
LCALL XIAOZHEN7
MOV C,25H.0
JC A8
A8:CLR 25H.0
INC 23H
MOV A,23H
CJNE A,#60,GO21
MOV 23H,#00H
MOV 36H,#00H
MOV 37H,#00H
LJMP N0
GO21:MOV B,#0AH
DIV AB
MOV 36H,B
MOV 37H,A
LJMP N0
GO22:MOV B,#0AH
DIV AB
MOV 38H,B
MOV 39H,A
LJMP N0
N2:JB P1.3,N0
LCALL XIAOZHEN3
MOV C,25H.0
JC A9
A9:CLR 25H.0
RET
TIMEPRO:MOV A,21H
MOV B,23H
CJNE A,B,BK
MOV A,22H
MOV B,24H
CJNE A,B,BK
SETB 25H.0
MOV C,25H.0
JC XX
XX:LCALL TIMEOUT
BK:RET
TIMEOUT:
X1:LCALL BZ
LCALL DISPLAY2
CLR 25H.0
JB P1.3, X1
RET
BZ:CLR P3.7
MOV R7,#250
T2:MOV R6,#124
T3:DJNZ R6,T3
DJNZ R7,T2
SETB P3.7
JB P1.3,XY
LCALL XIAOZHEN3
MOV C,25H.0
JC XY1
XY:RET
XY1:LJMP LOOP
XIAOZHEN1:LCALL DISPLAY1
JB P1.0,XIAOZHEN1
MOV C,P1.0
JC XIAOZHEN1
LCALL DELAY
MOV C,P1.0
JC XIAOZHEN1
STOP1:MOV C,P1.0
JNC STOP1
LCALL DELAY
MOV C,P1.0
JNC STOP1
SETB 25H.0
RET
XIAOZHEN2:LCALL DISPLAY2
JB P1.1,XIAOZHEN2
MOV C,P1.1
JC XIAOZHEN2
LCALL DELAY
MOV C,P1.1
JC XIAOZHEN2
STOP2:MOV C,P1.1
JNC STOP2
LCALL DELAY
MOV C,P1.1
JNC STOP2
SETB 25H.0
RET
XIAOZHEN3:LCALL DISPLAY1
JB P1.3,XIAOZHEN3
MOV C,P1.3
JC XIAOZHEN3
LCALL DELAY
MOV C,P1.3
JC XIAOZHEN3
STOP3:MOV C,P1.3
JNC STOP3
LCALL DELAY
MOV C,P1.3
JNC STOP3
SETB 25H.0
RET
XIAOZHEN4:LCALL DISPLAY1
JB P1.1,XIAOZHEN4
MOV C,P1.1
JC XIAOZHEN4
LCALL DELAY
MOV C,P1.1
JC XIAOZHEN4
STOP4:MOV C,P1.1
JNC STOP4
LCALL DELAY
MOV C,P1.1
JNC STOP4
SETB 25H.0
RET
XIAOZHEN5:LCALL DISPLAY1
JB P1.2,XIAOZHEN5
MOV C,P1.2
JC XIAOZHEN5
LCALL DELAY
MOV C,P1.2
JC XIAOZHEN5
STOP5:MOV C,P1.2
JNC STOP5
LCALL DELAY
MOV C,P1.2
JNC STOP5
SETB 25H.0
RET
XIAOZHEN6:LCALL DISPLAY2
JB P1.2,XIAOZHEN6
MOV C,P1.2
JC XIAOZHEN6
LCALL DELAY
MOV C,P1.2
JC XIAOZHEN6
STOP6:MOV C,P1.2
JNC STOP6
LCALL DELAY
MOV C,P1.2
JNC STOP6
SETB 25H.0
RET
XIAOZHEN7:LCALL DISPLAY2
JB P1.0,XIAOZHEN7
MOV C,P1.0
JC XIAOZHEN7
LCALL DELAY
MOV C,P1.0
JC XIAOZHEN7
STOP7:MOV C,P1.0
JNC STOP7
LCALL DELAY
MOV C,P1.0
JNC STOP7
SETB 25H.0
RET
DELAY:MOV R4,#14H
DL00:MOV R5,#0FFH
DL11:DJNZ R5,DL11
DJNZ R4,DL00
RET
TIME:PUSH ACC
PUSH PSW
MOV TH0,#03CH
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#14H
MOV A,20H
CLR C
INC A
CJNE A,#3CH,GO1
MOV 20H,#0
MOV 30H,#0
MOV 31H,#0
MOV A,21H
INC A
CJNE A,#3CH,GO2
MOV 21H,#0H
MOV 32H,#0
MOV 33H,#0
MOV A,22H
INC A
CJNE A,#18H,GO3
MOV 22H,#00H
MOV 34H,#0
MOV 35H,#0
AJMP RET0
GO1:MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
AJMP RET0
GO2:MOV 21H,A
MOV B,#0AH
DIV AB
MOV 33H,A
MOV 32H,B
AJMP RET0
GO3:MOV 22H,A
MOV B,#0AH
DIV AB
MOV 35H,A
MOV 34H,B
AJMP RET0
RET0:POP PSW
POP ACC
RETI
DISPLAY1:MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1:MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH
MOV A,R3
RL A
JNB ACC.6,LD1
INC R0
MOV R3,A
LJMP PLAY1
LD1:RET
DISPLAY2: PUSH ACC
PUSH PSW
MOV R0,#36H
MOV R3,#0FBH
MOV A,R3
PLAY2:MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH
MOV A,R3
RL A
JNB ACC.6,LD2
INC R0
MOV R3,A
LJMP PLAY2
LD2:POP PSW
POP ACC
RET
DL1:MOV R7,#05H
DL:MOV R6,#0FFH
DL6:DJNZ R6,$
DJNZ R7,DL
RET
DSEG1: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
附2系统原理图
展开阅读全文