单片机课程设计报告定时闹钟设计.docx
《单片机课程设计报告定时闹钟设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告定时闹钟设计.docx(27页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告定时闹钟设计
定时闹钟设计
摘要:
本设计目的是利用单片机设计制作一个简易的定时闹铃时钟,可以放在宿舍或教室使用,在夜晚或黑暗的场合也可以使用。
可以设置现在的时间以及闹铃的时间并且显示出来,若时间到则发出一阵声响。
本次设计的定时闹钟在硬件方面就采用了AT89C52芯片,用6位LED数码管进行显示。
LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时—分分—秒秒。
通过五个功能按键可以实现对时间的修改、定时和闹铃终止,闹钟设置的时间到时蜂鸣器可以发出声响。
在软件方面用C51编程。
整个定时闹钟系统能完成时间的显示,调时和设置闹钟、停止响铃等功能,并经过系统仿真后得到了正确的结果。
关键词:
定时闹钟;蜂鸣器;AT89C52;74HC245;
第1章绪论
1.1设计目的
本次课程设计的主题是定时闹钟,其基础部分是一个数字钟。
电路系统由秒信号发生器、“时、分、秒”计数器、显示器组成。
其中秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,这里用51单片机的定时器来实现。
利用定时器获得每一秒的时刻,然后在程序中,我们就可以给秒进行逐秒赋值,满60秒则进位为1分,满60分则进位为1小时,满24小时则时间重置实现一天24小时的循环。
译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过一个六位八段数码管显示出来。
这里利用51单片机的相关知识,来实现电子闹钟的相关功能。
实验使用了AT89C52、74HC245等芯片,通过单片机的P0、P3管脚来驱动数码管显示出相应的时刻。
本文将讲述AT89C52、74HC245等芯片的基本功能原理,并重点介绍该电子闹钟的设计。
1.2设计要求和任务
1.2.1设计要求:
使用6位七段LED显示器来显示现在的时间;显示格式为“时时分分秒秒”;具有4个按键来做功能设置,可以设置现在的时间及显示闹铃设置时间;时间到则发出一阵声响,可通过按键复位;对单片机系统设计的过程进行总结,认真书写课程设计报告并按时上交。
1.2.2设计任务:
利用51单片机结合七段LED显示器设计一个简易的定时闹铃时钟,可以放在宿舍或教室使用,由于用七段LED显示器显示数据,在夜晚或黑暗的场合也可以使用。
可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响。
1.3论文主要内容
论文分别叙述从硬件和软件上实现该设计的过程。
第2章为总体设计方案。
第3章主要介绍设计实现需要解决的硬件问题。
依次介绍所使用的各种硬件的使用方法,并附上仿真电路图和文字说明。
第4章从软件的角度说明实现该设计需要解决的问题。
第2章系统总体设计
2.1系统设计需求
系统要求实现以下功能:
1.当电源接通时,系统能正确显示当前时间。
2.当前时间与实时时间有误差时,可以通过键盘调整当前时间。
3.系统允许进行闹钟设置,开启闹钟功能时,当设置的闹钟时间与当前时间一致的时候,系统通过蜂鸣器发出警报声并且可以通过按键停止。
2.2总体设计方案
功能组成:
本次设计中的计时功能很容易实现,难点在于时钟功能和闹钟功能的切换和时间的设置。
该电子闹钟设计对51单片机定时器0装初值,使其初值对应50ms,定时器0的中断次数达到20次就刚好为1s,当秒部分计数到60时置零,并向分部分进一;当分部分计数到60时置零,并向时部分进一,当时部分计数到24时置零,从而满足时钟的正常工作。
在设计过程中,我发现通过4个按键来完成一个闹钟的基础功能虽然可以实现,但是用户用起来就会很麻烦,因为有的键必须有多种功能和不同的触发方式,我认为可以增加少许按键来方便用户快速了解到我们的闹钟是如何进行控制的。
所以本次设计设置5个键依次对其进行“时间校准”、“闹钟设置”、“秒分时切换/终止警报”、“加1按钮”、“减1按钮”。
“秒分时切换/终止报警”键在调时状态中,起时分秒切换的作用,在非调试状态下,起闹钟终止的作用。
当用户按下“时间校准”的按钮后,程序会关闭T0定时器,之后时钟停止工作,此时数码管会显示当前静止的时间,说明已经进入时间校准的界面了。
在完成时间校准后,打开T0定时器,时钟会在设置好的时间上继续工作走秒。
当用户按下“闹钟设置”按钮后,会将当前时间复制出来提供给定时界面,注意此时我们的时钟仍然在继续工作,只是数码管显示的是定时模式的静止时间。
当设置好后,此时用户设置的时间只要没有触发过闹铃,再次按“闹钟设置”按钮就能查看并修改,即闹钟会保存下用户最后一次未被触发的闹钟时间。
当正常工作的时钟时刻到达了预设的闹铃时刻,蜂鸣器发出警报声,屏幕会闪烁并显示当前时间。
考虑到用户可能已经被提醒而不想继续被闹铃声干扰,还提供了一个能够终止闹铃的功能,此功能与“时分秒切换”功能共用同一按键,按下后时钟继续正常工作,且闹钟功能又可以重新设置。
2.3系统软件
本设计在Keil编程环境下,使用C语言进行编程的编辑。
编辑成功后,通过仿真软件Proteus进行仿真测试。
2.4系统硬件
LED显示屏×1
主控芯片:
AT89C52
闹钟提示:
蜂鸣器
人机交互:
按键×5
晶振:
12KHz×1
排阻:
RESPACK-8×1
电容:
10nf×2
总线收发器:
74HC245×2
第3章系统硬件设计
3.1系统硬件模块及功能
系统硬件模块主要分为以下几个模块:
1.主控模块:
控制其他子模块。
2.时钟模块:
为系统提供实时时间。
3.显示模块:
显示系统时间信息。
4.按键模块:
用户通过按键进行人机交互,修改实时时间、设置闹钟时间和终止闹钟报警。
5.闹钟模块:
在所设闹钟时间发出警报声。
3.2主控模块
3.2.1主芯片AT89C52
(1).AT89C52简介
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
AT89C52引脚图如图3.2.1:
图3.2.1
(2).工作原理
AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的
方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),Flash编程和程序校验期间,P1接收低8位地址。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
3.2.2时钟电路设计
利用芯片内部的振荡电路,在XTAL1、XTAL2的引脚上外接定时元件,内部振荡器便能产生自激振荡。
定时元件可以采用石英晶体和电容组成的并联谐振电路,如图3.2.2所示。
晶振可以在1.2~12MHZ之间任选,甚至可以达到24MHz,但是频率越高功耗也就越大。
和晶振并联的电容C1、C2的大小对振荡频率有微小影响,可以起到频率微调作用。
时钟电路如图3.2.2:
图3.2.2
3.2.374HC245芯片
电路中用74HC245芯片充当总线收发器,作用是放大信号,它具有典型的CMOS型三态缓冲门电路。
由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。
引脚定义:
1引脚DIR:
未输入输出端口转换用,当它为高电平“1”时,信号由“A”端口输入“B”端口输出;当它为低电平“0”时,信号由“B”端口输入“A”端口输出。
2-9引脚:
“A”端口输入输出端,每个端口与“B”端口对应。
11-18引脚:
“B”端口输入输出端,每个端口与“A”端口对应。
10引脚:
GUD,电源地。
20引脚:
VCC,电源正极。
74HC245引脚图如图3.2.3
(1):
图3.2.3
(1)
仿真电路图如图3.2.3
(2):
图3.2.3
(2)
3.3LED显示模块
本次课程设计采用了6位数码管显示电路。
在6位LED显示时,为了简化电路,降低成本,采用动态显示的方式, 6个LED显示器共用一个8位的I/O, 6位LED数码管的位选线分别由相应的P2. 0~P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。
译码显示电路将“时”、“分”、“秒”计数器的输出状态经七段显示译码器译码,通过6位LED七段显示器显示出来。
到达定时电路时根据计时系统的输出状态产生脉冲信号,然后去触发音频发生器实现闹铃。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。
LED仿真电路图如图3.3:
图3.3
3.4按键模块
按键模块共设置了五个按键,功能分别如下:
(1).时间校准键“CLOCK”:
自锁开关,按下后进入校准设置,再次按下后退出。
(2).闹钟设置键“ALARMCLOCK”:
自锁开关,按下后进入闹钟设置,再次按下后退出。
另外可供用户对已经设置的闹钟时间进行查看或修改。
(3).秒分时切换/终止报警键“SWITCH/STOP”:
按钮开关,在按下“CLOCK”或“ALARMCLOCK”键时,为时分秒切换功能,默认是“秒”,再次按下是“分”,然后是“时”之后是“秒”,以此类推。
在“CLOCK”或“ALARMCLOCK”键未按下时,为终止报警功能。
(4).时间增加键“+”:
按钮开关,可以在进入校准设置和闹钟设置后,进行加一操作。
(5).时间减少键“-”:
按钮开关,可以在进入校准设置和闹钟设置后,进行减一操作。
按键模块仿真电路图如图3.4:
图3.4
3.5警报模块
闹铃指示设置有声和光两种形式。
声音形式的关键元件是蜂鸣器。
蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,本次设计我们使用的是后者。
闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。
蜂鸣器仿真电路图如图3.5:
图3.5
第4章系统软件设计
4.1系统软件设计概述
该部分主要分为实时时钟模块、LED显示模块、键盘中断模块、闹钟模块。
实时时钟部分主要包括实时时间的读写,时间的修改。
LED显示模块主要包括显示屏的初始化,显示的命令字。
键盘中断模块包括各键的定义和作用,按键的消抖,各按键跳转的子程序分配。
闹钟模块包括闹钟时间的设置,以及对蜂鸣器启动和停止条件的设置和处理。
4.2主程序设计
主程序包含三个部分。
一是主函数部分,负责系统的初始化操作;从中断服务取得实时时间;判断闹钟时间是否与实时时间相等并在相等时发出警报声。
第二部分是定时中断部分,分两种情况:
负责处理从中断服务获得的时间数据并送至LED显示缓冲显示,或者显示闹钟设置界面并显示闹钟时间的设置过程。
第三部分是外部中断,主要定义5个按键的作用,分配每一个按键跳转的子程序。
第三部分负责时间和日期的修改,闹钟时间的设置,停止蜂鸣器鸣叫的功能。
4.3单片机的中断系统
断系统在单片机应用系统中起着十分重要的作用,是现代嵌入式控制系统广泛采用的一种适时控制技术,能对突发事件进行及时处理,从而大大提高系统对外部事件的处理能力。
正是有了中断技术,单片机才得以能够普及。
因此,中断技术是单片机的一项重要技术,掌握中断技术能开发出灵活、高效的单机片应用系统。
4.3.1中断源
要让单机片停止当前的程序去执行其他程序,需要向它发出请求信号,CPU接收到中断请求信号后才能产生中断。
让CPU产生中断的信号称为中断源(又称中断请求源)。
单片机提供5个中断源,其中两个为外部中断请求源INT0(P3.2)和INT1(P3.3),两个片内定时器/计数器T0和T1的溢出请求中断源TF0和TF1,1个片内串行口发送或接收中断请求源T1和R1。
4.3.2中断的优先级别
单片机内的CPU工作时,如果一个中断源向它发出中断请求信号,它就会产生中断。
但是,如果同时有两个中断源发出中断请求信号,CPU就会优先接收级别高的中断请求源,然后再接收优先级别低的中断请求。
表4.3.2列出5个独立中断请求源由其硬件结构决定的自然优先级排列顺序。
中断源
自然优先级
中断入口地址
中断编号
外部中断INT0
高
↓
低
0003H
0
定时器T0
000BH
1
外部中断INT1
0013H
2
定时器T1
001BH
3
串行口通信中断R1或T1
0023H
4
表4.3.2单片机中断源的自然优先级、入口地址及中断编号
对应于单片机的5个独立中断源,应有相应的中断服务程序。
这些中断服务程序有专门规定的存放位置,即表4.3.2的中断入口地址。
当有了中断请求后,CPU可以根据入口地址迅速找到中断服务程序并开始执行,大大提高执行效率。
4.4主程序
主程序见附录。
第5章系统测试
5.1测试内容
1.显示部分
2.按键部分
5.2测试环境
Proteus仿真模拟软件。
5.3测试步骤
5.3.1测试环境的构建
(1).在Proteus软件中绘制好定时闹钟仿真模拟电路图。
(2).将Keil编译器生成的.hex文件载入AT89C52芯片。
图5.3.1
(2)载入.hex文件
(3).在Proteus软件中,点击左下角的“play”按钮启动定时闹钟。
如下图,“play”按钮在第一个。
图5.3.1(3)仿真电路运行控制按钮
5.3.2测试内容
详细测试内容如下:
定时闹钟是否能正确显示时间;是否能正确显示闹钟设置时的界面;是否能正确显示时间调整时的界面。
(1).显示时间
点击“play”键之后,时钟系统开始走时,如图5.5.2
(1):
图5.3.2
(1)
经测试,显示结果达到预期要求。
(2).时间调整测试
如果用户发现时间运行不对,要对时间进行修改和调整,就需要进入时间修改的界面。
预期可以对时、分、秒进行调整和修改。
系统能正确显示时间修改的界面。
用户可以完成时间的修改。
经测试,该部分运行正常。
(3).闹钟设置测试
在系统能正确显示时间之后,用户若想设置闹钟,可以通过按键完成闹钟时间的设置。
设置时间到后蜂鸣器报警,按下“STOP”键后警报停止
经测试,该部分能正常运行。
结论:
通过以上对仿真项目的全面测试,可知仿真部分运行正常。
5.4测试结果
通过以上测试,证明本设计基本实现系统所有要求,即能够正确显示时间信息,能够对当前时间进行调整和修改,并且能够设定闹钟并在所设置的闹钟时间发出警报声,通过按键可以停止警报。
结论
该系统采用单机片AT89C52作为核心芯片,结合一些其他外围设备,一起构成了一款能够显示时间并且能够对其进行修改和设置定时闹钟的定时闹钟系统。
该系统采用数码管显示屏,能够清晰显示时间信息,并且能够友好的引导用户进行时间的修改以及闹钟的设置。
可以通过各个寄存地址对时间进行读写操作,即读取时间和修改时间。
利用蜂鸣器为用户提供闹铃功能,能够在设定时间发出警报声提醒用户。
采用按键较少的独立式键盘供人机交互,操作简单方便。
可以通过键盘修改时间,也可以设置闹铃时间和修改闹铃时间,另外,在闹铃时间与系统时间一致,蜂鸣器鸣叫时,可以通过按键中断警报声。
总之,该定时闹钟系统完成了市场上一般闹钟应有的功能,能够显示时间和设置闹钟,可以给用户提供时间信息。
该设计也存在一些缺点,就是实际生产时投入资金会比市场上一般闹钟价格昂贵,如果进行包装,价格还会上升一些。
另外,外观不如市场销售的闹钟美观。
致谢
衷心感谢雷俊红老师的指导。
参考文献
[1]李强,51系列单片机应用软件编程技术[M].北京:
北京航空航天大学出版社,2009.4:
134-138.
[2]薛慧芳.MCS-51单机片串行口的一口多用[J].南京化工大学学报(自然科学版),1998,S1:
84-86.
[3]王东锋,王会良,董冠强.单机片C语言应用100例[M].北京:
电子工业出版社,2009.3:
218-219,148-152.
[4]楼然苗,李光飞.单片机课程设计指导(第2版)[M].北京:
北京航空航天大学出版社,2012.1:
285-289.
附录:
系统电路图如下:
系统电路图
系统程序如下:
#include
sbitbtnTime=P1^0;
sbitbtnClock=P1^1;
sbitbtnSwitch=P1^2;
sbitbtnUp=P1^3;
sbitbtnDown=P1^4;
sbitpin1=P2^0;
sbitpin2=P2^1;
sbitpin3=P2^2;
sbitpin4=P2^3;
sbitpin5=P2^4;
sbitpin6=P2^5;
sbitpinBuz=P2^6;
unsignedchartimer=0,sec,min,hour,count=0,s=60,m=60,h=24,flag=0;
unsignedcharcodenumbers[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddelayMs(unsignedintk){
unsignedinti,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
voidtimeChange(){
sec++;
if(sec==60){
sec=0;
min++;
if(min==60){
min=0;
hour++;
if(hour==24)
hour=0;
}
}
}
voidshowTime(unsignedcharzs,unsignedcharzm,unsignedcharzh){
pin1=1;
P0=numbers[zh/10];
delayMs(5);
pin1=0;
pin2=1;
P0=numbers[zh%10]&0x7f;
delayMs(5);
pin2=0;