基于51单片机的智能数字闹钟设计与实现
欧阳歌谷(2021.02.01)
摘 要
单片机自20世纪70年代问世以来,因为单片机极高的性能价格比,越发受到了人们的重视和关注,应用 领 域 广泛、发展很快。而51单片机是各单片机中最为典型的,也是最具有代表性的一种。
本设计是一款基于AT89C51的智能数字钟,该数字钟表由主控模块、按键模块、定时模块、温度检测模块和显示模块构成。主控模块由主控芯片AT89C51、晶振电路和复位电路构成;定时模块采用时钟芯片DS1302实现精确定时;用温度传感器DS18B20作为温度采集源,检测当前温度;用液晶显示器1602显示年、月、日、时间及温度。通过这种方法的实现,使智能数字闹钟的电路简单,性能可靠,实时性好,时间和温度精度高,操作简单。
在Proteus和Keil µvision4的环境下,完成了电路原理图的绘制以及程序的编译后,用焊接的方法在电路板上焊接实物,将Keil µvision4中生成的.hex文件的程序烧到电路中,检测并调试电路,实现智能数字闹钟的功能。
该智能数字闹钟可以应用于人们的生活和工作中,也可通过改装,将智能数字闹钟的性能提高,还可以增加新的功能,让智能数字闹钟显示更多方面的内容与功能,给人们的生活和工作带
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
来更多的方便。
关键词:单片机,时钟芯片,温度传感器,液晶显示器,智能数字
欧阳歌谷创编 2021钟
年2月1
欧阳歌谷创编 2021年2月1
AT89S52 based Digital Clock Design of
Intelligent Abstract
Abstract
SCM since the advent of the 1970s , because of high performance and low cost single chip , has been more and more people's attention and concern , widely used in the field , has developed rapidly. The microcontroller 51 is the most typical each MCU is the most representative one.
The designeris one section based on AT89C51 intelligent digit clock, this clock and watch by the master control module, fixed time the module, the temperature examines the module and the display module constitution. Master control module by master control chip AT89C51, crystal oscillator electric circuit and reset circuit constitution; Fixed time the module uses clock chip DS1302 to realize precisely fixed time; Gathers the source with temperature sensor DS18B20 as the temperature, the examination current temperature; 1602 demonstrate the year, the month, Japan, the time and the temperature with the liquid-crystal display. The method has the advantage of being simple circuit, reliable performance, good real-time, high precision of the time and temperature, simply operation【19】.
Under the environment of Proteus and Keil μvision4 , after finishing drawing circuit schematic and compiling program, Welding material on the circuit board by welding method. Then, .Hex files, the generation of Keil µ vision4 ,is made into the circuit. Finally, testing and debugging the circuit, and to realize the function of Intelligent digital alarm clock.
The electronic clock can be applied to the general living and working, can also be modified to improve performance add new functions and brings more convenient to people’s life and work.
Key Words:NC machining; NC verification; Machining environment; Help files
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
目 录
摘 要i Abstractii 第一章 引 言1
1.1 智能数字闹钟的研究背景和意义1 1.2智能数字闹钟的功能1 1.3 智能数字闹钟的发展趋势2 第二章 方案的论证与选择2
2.1 方案的论证2 2.2 方案的选择4 第三章 硬件电路的设计4
3.1 主控电路模块5 3.2 按键电路模块7 3.3 定时电路模块8 3.4 温度电路模块10 3.5 显示电路模块11 第四章 软件设计13
4.1总体系统软件设计13
4.1.1 主程序设计14 4.1.2 温度采集模块设计16 4.1.3 定时模块设计18 4.1.4 显示模块设计18
第五章 系统的安装与调试20
5.1 系统硬件的安装与调试21 5.2 系统软件的调试22 第六章 总结与展望25 参 考 文 献27 致 谢28 附 录29
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
第一章 引 言
1.1 智能数字闹钟的研究背景和意义
随着当今社会的快速发展,人类面临着很多问题,时间和空间的不足就是其问题之一。作为新一代技术型人才,日益发展的社会势必会面临这一严峻的问题。围绕这个即将到来的问题,本课题定为智能数字闹钟设计。钟表只是一种简单的显示时间的工具,本身不能给人们带来想要抓住时间的紧迫感,但如能把时钟时间的显示精确到分、秒,那么面对这种时间飞逝的重压感,人们就会重视它并有效地利用它,更懂得把握分寸,不白白浪费时间。当然若在钟表的显示中融入了其他人们日常工作出行必须的功能,智能并简单利用,可以大大为我们节省出空间来。
人们生活水平逐渐提高,并且越来越重视人性化事物,传统的指针式时钟也只能简单的满足人们的针对时间的需求,但是人们更着重追求高科技新事物,在现在日益充满物质的社会里,人们也追求在小的范围内显示更多的信息。而普通的时钟是模电技术、数电技术和单片机技术的结合,才使得现在的时钟实现更多功能。早期运用的时间控制器都是用模拟电路设计制作的,准确性及各方面的性能都不是很理想。随着单片机性价比的不断提高,新的产品应用越来越广泛,逐渐取代了昔日的模拟化产品,变得高端上档次。单片机系列产品已经遍布到工业控制,以及各个重要的公共场所,单片机的快速发展与应用更加大范围的扩展,在人们的日常生活中日需常见化,更加依赖单片机,给人类生活带来了极大的便利,单片机将与人们的生活、娱乐等不同方面都存在密不可分的关系。单片机在智能数字闹钟的应用中具有相当普遍的意义,是一件必不可少的元器件,在生活中起着关键性作用。由于时代的大变化发展,加快了数字 集 成 电 路 技 术的发展步伐,石 英 技 术 更加精进,使得数字钟能够走时准确,能够实现更多的功能,携带在身上很便捷,性能高。单片机内部结构有定时器/计数器,能够实现自动计时功能,单片机的使用大范围地出现在人们的周围,无处不在【16】。这种具有人们所需要的智能化特性产品为人们节省了大量时间和空间,扩大了数字化的范围,为家庭数字化奠定了基础。
1.2智能数字闹钟的功能
电路采用了单片机AT89C51、温度传感器DS18B20、时钟芯片DS1302、
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
1602LCD显示器,通过独立式按键可以切换模式,修改显示时间的数据。电路设计合理,具备了三大特点:简单,操作方便,美观大方。
本设计智能数字闹钟的主要功能为:
(1)连接电源,1602LCD显示器上可显示正常的时间、日期及温度的显示;
(2)可实现12小时/24小时时间显示的切换; (3)通过独立式按键手动修改时间日期;
(4)可以设置三个闹钟时间,当到闹钟响铃时间,可手动关闭;
1.3 智能数字闹钟的发展趋势
基于51单片机的智能数字闹钟体现了现代化电子产品的高性价比,成本低,电路简单,功能齐全。对于家庭生活中,具有了相当普遍性和实用性,使得人们在生活中对智能数字闹钟产生了依赖性,在各个方面不可缺少的,用一句夸张的话说:离开了它就不能活了,感觉身边总是少了些什么。时钟的发展已经从老式钟表发展到如今电子时钟以及智能化数字时钟的时代,通过时代的发展,高科技研制和广泛应用,智能数字闹钟的发展前景将不可估量,智能数字闹钟所实现的功能不仅仅只有报时功能,在不久的未来,智能数字闹钟可以设置闹钟,可以实现通话功能,可以是一本记事本,随时记录发生的事情,或许可以实现导航功能等,以上功能只要一个小小的智能数字闹钟就可实现,人们的生活更加方便。同时,智能数字闹钟的电路只需使用简单芯片,加以合理设计,使得电路简单、操作非常方便、美观实用,但是其精确度不是很高。
首先,伴随着更多性能更好新材料、更完善的设计方法、更先进的大规模集成电路的发展以及驱动技术的进步,时钟系统将会更加高精度,也将会更加完善。
其次,随着显示器件,如液晶显示器件性能的拓展,传统的机械时钟显示形式也将演变成高清晰度的显示方式。
最后,时钟系统在未来的应用将更加广泛,以其高精度的显示以及其多内容的显示界面将更受到人们的青睐。
第二章 方案的论证与选择
2.1 方案的论证
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
方案一:基于低成本数字集成电路及七段译码器组成的数字闹钟设计【10】 系统由数字逻辑集成芯片构成纯硬件电路,其电路由秒信号发生器、走时电路、校时电路、闹钟电路等部分组成。
秒信号发生器使用LM555构成多谐振荡器,调整电阻可改变频率,使之产生秒信号。走时电路包括秒计时器、分计时器、时计时器,每个部分都由两片计数器级联构成。其中秒计数器和分计数器都是用十进制与六进制计数器级联构成,时计数器由三进制计数器与十进制计数器级联构成。时计数器需要个位为十进制、十位只要计到2即可,不过需要清零电路。当个位计数到“4”,同时十位计数到“2”时立即清零,时钟就会从零开始重新计数。当时间与标准时间不吻合的时候,需要校准时间,对照标准时间将此时的时间的秒信号加速运行,加快时钟的计时速度,当到达标准时间后再切换回正确的输入信号,达到校准目的。闹钟是在在预定的时间到达时能输出闹铃声。
这种方案的电路搭建起来非常的庞大,大小不同芯片,总共需要用到18个,工程非常的繁琐,需要花费很长的时间在电路的排版和连线上。 方案二:基于VHDL的数字时钟设计【5】
基于VHDL的数字时钟设计主要由晶体振荡器、分频器、计数器、译码器显示器组成。基于VHDL的数字时钟设计中需要有一个时钟脉冲信号,因此用一个石英晶体振荡器产生一个高频脉冲信号,然后要用分频器将这个时钟脉冲信号分频,得到1Hz的时钟信号,将这个时钟信号分别接入计数器中,然后再为其他模块提供时钟。计数器用一个100进制的计数器和两个60进制的计数器进行级联。最后在三个计数器的输出接到七段译码管,总共要用到8个这样的数码管。
分 频 器 【13】 晶体振荡器 方案三:基于单片机智能数字闹钟设计计数器模块 七段码译码器模 块 基于单片机的数字时钟设计是要分好几个模块,单独对各类模块设计,以单片机AT89C51作为主控芯片,控制其他模块的运作,将数据控制输出到显示模块。对各个模块进行程序的编写,最后将编译链接生成一个.hex文件,将这个文件烧到AT89C51单片机芯片中,从而实现时钟的功能。当时钟电路上电后,电路初始化,系统保持原有的显示,通过按下不同的按键,切换到不同的模式中,实现12/24小时的切换,以及修改年、月、日、时、秒的时间设置;
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
当进入闹钟设置模式下,可设置三个闹钟时间,到设定时间蜂鸣器鸣响,无人操作时鸣响30s自动关闭闹钟;当需要设置更多功能时,只需多设置相应的功能按键就可实现。
对上述方案进行比较,方案一由硬件构成,比较容易实现,但由硬件搭建的电路不够稳定,译码管显示效果差,功能单一不能扩展,且电路功耗大,在将这种方案做成实物的过程中很漫长,更需要投入很多的精力,因出现故障而检查电路时很复杂,难找。方案二利用FPGA精度高、处理速度快的特点,利用外部50M石英晶振提供高精度系统频率,能够满足更高精度的要求,并且设计比较人性化。方案三显示准确、直观、易于调整。
2.2 方案的选择
本次设计采用方案三,即以AT89C51作为主控芯片,采用1602液晶作为显示器件,独立轻触式按键作按键模块,DS1302为定时来源,能准确定时,DS18B20作温度采集源。确定系统组成框图如图2.1所示,各功能模块如下:
图2.1 系统框架 主显示模块 温度模块 主控模块:由主控芯片AT89C51,外接时钟电路、复位电路和P0口的上拉控电阻构成,能够驱动程序的运行,在显示屏上实现智能数字闹钟的各个功能。
模温度模块:由芯片DS18B20和上拉电阻构成,实现温度采集,当周围有高按键模块 块定时模块 温物体时,温度的示数会逐渐的增加,离开时温度会慢慢下降。 定时模块:由DS1302、晶振,3.6V的纽扣电池构成,能够提供年、月、日、时、分和日期,纽扣电池可以支持时钟的走时,即使显示屏没电不显示时,时间也在计时。
显示模块: 由1602LCD液晶显示屏构成,把单片机传来的数据进行显示,显示的位数多,。
按键模块:由五个独立轻触式按键构成,可切换各种模式状态,能对数据进行修改。
第三章 硬件电路的设计
本设计采用AT89C51单片机作为本次设计的主要控制模块。单片机可把由DS18B20、DS1302中的数据利用软件来进行处理,从而把数据传输到显示模块,此模块实现温度、时间的显示。以1602LCD液晶显示器为显示模块,把单
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
片机传来的数据显示出来,在显示电路中,主要靠按键来实现各种显示要求的选择与切换。
3.1 主控电路模块
主控电路模块采用AT89C51作为核心元件来控制各部分,其电路原理图如图3.1。
单片机引脚功能的说明,见下表3.1
表3.1 单片机的引脚功能
引脚号 1~8 9 10~17 18、19 20 21~28 29 30 符号 P1口 引脚功能 8位,准双向I/O口,具有内部上拉电阻 RST P3口 复位,高电平有效 8位,准双向I/O口,具有内部上拉电阻 XTAL VSS P2口 时钟引脚 接数字地 8位,准双向I/O口,具有内部上拉电阻 PSEA 片外程序存储器的读选通信号,低电平有效 ALE 为CPU访问外部程序存储器或外欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
部数据存储器提供一个地址锁存信号 31 32~39 EA 外部存储器允许访问控制端 8位,漏极开路的双向I/O口,作为通用I/O口使用时,需加上上拉电阻 P0口 40 Vcc 接+5V电源 下面给出了单片机的内部结构图,如图3.2
图3.2 单片机的内部结构图
由图3.2单片机的内部结构图中看出,单片机是在半导体硅片上集成了中央处理器、存储器、并行I/O口、串行I/O口、定时器/计数器、中断系统、系统时钟电路及系统总线的微型计算机。通常把单片机称为嵌入式控制器或微控制器。
单片机的最小系统只需要最小的配置能够让单片机里的程序运行,如果要用IO口去驱动LCD显示,写好程序就能运行。单片机的P0口接上上拉电阻,排除外界对其有效电平的干扰,电路的抗干扰能力大大增强。单片机最小系统构成主要是由时序电路以及复位电路两个部分构成。
1、时序电路的介绍,下面给出了时序电路图:
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
时序电路由晶振与电容构成,其主要目的是滤波,这样可以使晶振输出的波形更加平滑,方便给予单片机适用的信号,至于大小应该是一个经验值,这样的滤波效果最好。电路中的电容C1和C2的典型值通常选择为30pF,该电容的大小会影响振荡器频率的高低、振荡器 的 稳 定 性 和 起 振 的 快 速性。晶体的频率越高,系统的时钟频率越高,单片机的运行速度也就越快【7】。但反过来。运行速度快对存储器的速度要求就高,对印制电路板的工艺要求也高,即要求线间的寄生电容要小。
2、复位电路的介绍,下面给出了复位电路图:
复位电路主要由电阻、电容、独立轻触式开关构成,利用复位电路把电路恢复到起始状态,就像计算器的清零按钮的作用一样,或者你输入错误,计算失误时都要进行清零操作。以便回到原始状态,重新进行计算。复位电路启动可以有三种方式,一是在给电路通电时马上进行复位操作;二是在必要时可以由手动操作;三是根据程序或者电路运行的需要自动地进行。
主控模块运用了单片机的最小系统,需要外接时钟电路和复位电路。但是,在智能数字闹钟的设计中,由于一定的原因,省略了接复位电路的连接,然而这种接法对电路不会造成很大的影响,仍然能够实现智能数字闹钟的功能。
3.2 按键电路模块
按键模块电路主要是由5个独立式按键组成,其电路图如图3.3。
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
图3.3 按键模块电路
图3.3按键模块电路中,S1、S2、S3、S4、S5分别接单片机AT89C51的P3口的P3.0、P3.1、P3.2、P3.3、P3.7,经单片机的控制,可通过不同按键的接通实现相应的功能(参数设置、闹钟设置等)。独立式按键的结构很简单,使用时只需要接其中两个引脚即可。
开机后,电路进入初始化状体,初始化完成过后,按下开关S1进入调节模式,依次按下S1设置年、月、日、星期、时、分、秒和三个闹钟时间,S2递增调节,S3递减调节,按下S4关闭闹钟/退出调节模式,显示屏上正常显示。S5按键12小时、24小时的切换。
3.3 定时电路模块
定时电路模块主要由芯片DS1302控制,电路图如图3.4。
图3.4 定时模块电路
DS1302芯片各管脚描述如下,见表3.2
表3.2 DS1302功能引脚说明
引脚号 符号 引脚功能 欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
1、8 2、3 4 5 6 7 Vcc2、Vcc1 X2、X3 GND RST I/O SCLK 为电源供电管脚 接32.768KHz的晶振 接地 复位端 为数据输入/输出引脚 接串行时钟 DS1302有12个寄存器,其中7个寄存器与日历、时钟相关,存放的数据形式是BCD码,其寄存器及控制字见表3.3
表3.3 DS1302的日历、时钟寄存器及其控制字
寄存器名 命令字 写操作 秒寄存器 分钟寄存器 小时寄存器 日期寄存器 月份寄存器 周日寄存器 年份寄存器 8CH 8DH 00-99 10YEAR YEAR 8AH 8BH 01-07 0 0 0 88H 89H 86H 87H 84H 85H 01-12或00-23 01-28,29,30,31 01-12 0 0 0 10M 0 0 DAY MONTH 12/24 0 0 10DATE DATE 0 HR HR 80H 82H 读操作 81H 83H 00-59 00-59 CH 0 10SEC 10MIN SEC MIN 取值范围 7 6 5 各位内容 4 3 2 1 0 单片机容易受外界环境的影响,时钟时常会出现混乱现象,导致时钟的精度不高。DS1302的作用主要用来记录数据,特别是对某些具有特殊意义的数据点的记录,除此之外,DS1302能够同时记录两个时间,一是记录数据的时间,二是出现该数据的时间,因此在测量系统中广泛应用。采用时钟芯片DS1302可以准确记录数据出现的时间,不需要占用硬件资源,不消耗单片机的资源。
使用DS1302芯片,可以提供稳定精确地走时,单片机只需要在第一次上电时进行必要的时间设定,以后需要时间的时候只需要从DS1302中读取数据即可。DS1302芯片自带长短月、闰年补偿等功能,只用51实现时间的各种功
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
能会非常麻烦。掉电后只需要微弱的电流即可保持精准走时,因此,在DS1302芯片的连接中连有3.6V的纽扣电池,可以在掉电后支持时间的走时。
3.4 温度电路模块
温度采集电路模块由DS18B20对温度进行采集测试,其电路图如图3.5。
图3.5 温度模块电路
DS18B20的引脚介绍,见表3.4
表3.4 DS18B20的引脚介绍
序 1 2 3 名称 引脚功能 号GND DQ 接地端 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 Vcc 接+5V电源 DS18B20产品具有以下特点: (1) 只要求一个端口即可实现通信。
(2) 在DS18B20中的只有三个引脚即可实现温度的采集,不需要外部任何的电路。
(3) 测量温度范围在-50℃到+120℃之间;数字温度计的分辨率用户可以从9位到12位选择。
(4) 内部设置温度上、下限告警。
DS18B20将采集到的信号送入单片机P2.5口,给电路提供一个温度数据。R2为上拉电阻,为DS18B20提供能量,最好能够外接+5V的电源,有些电路
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
仅仅依靠一个4.7K的上拉电阻是远远不够的,不能给其芯片足够的能量,如果采用多个DS18B20来采集温度数据时,这4.7K的电阻将供不应求,无法满足其需求【11】。温度采集电路还可将DS18B20的1脚和3脚同时接地,但是这样有可能 由 于 电 压 的 不 足 而 造 成温度读书不准确。如图3.5中的接法即使电源电压只有4V电路也可以正常工作,DS18B20采集的温度数据也不会有很大的误差,因此这种接法在合适不过。
由图3.5温度模块电路中所示,DS18B20只有三个引脚,3脚接+5V电源,1脚接地,2脚接信号输出口,同时接了一上拉电阻,因为DS18B20是单线温度传感器,数据线是漏极开路,如果DS18B20没接电源,则需要数据线强上拉,给DS18B20供电;如果DS18B20接有电源,则需要一个上拉即可稳定的工作。用小循环来移动8次,将内部寄存器的8位数据全读出来,再通过数学处理来显示温度。
3.5 显示电路模块
显示电路模块是用1602LCD液晶显示屏显示时间、温度等数据,其电路图如图3.6。
图3.6 显示模块电路图
1602液晶显示屏的引脚定义,见表3.3
表3.3 1602液晶显示屏的引脚定义
引脚号 1 2 3 4 引脚名 Vss Vcc Vee RS 0/1 电平 输入/输出 输入 电源地 电源(+5V) 对比调整电压 0=输入指令 1=输入数据 作用 欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
5 RW 0/1 输入 0=向LCD写入指令或数据 1=从LCD读取信息 6 E 1,1→0 输入 使能信号,1时读取信息,1→0(下降沿)行指令 7 8 9 10 11 12 13 14 15 16 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 +Vcc 接地 输入/输出 数据总线line0(低位) 输入/输出 数据总线line1 输入/输出 数据总线line2 输入/输出 数据总线line3 输入/输出 数据总线line4 输入/输出 数据总线line5 输入/输出 数据总线line6 输入/输出 数据总线line7(最高位) LCD背光电源正极 LCD背光电源负极 与数码管相比该模块有如下优点:
1、显示字数多,可显示32位,使用数码管,这样的数据以及其位置的摆放是相当的庞大。
2、显示的内容丰富,可显示所有数字和大、小写字母。
3、程序简单,如果用数码管动态显示,刷新显示时间长,但1602能自动完成这个功能。
1602LCD分为带背光和不带背光两种形式,基控制器大部分为HD44780,带背光的比不带背光的厚,在应用中没有太大的差别,使用时不需要分太清楚,两者尺寸差别如下图3.7所示:
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
图3.6 1602LCD尺寸图
如图3.6LCD1602尺寸图所示,从显示屏的正看,这两种显示屏没有差别;从侧面看,将这两种显示屏一比较,明显能够看出无背光的厚度要比带背光的厚度小,有3.5mm的差距,其他部分的尺寸都是一样大的,没有很大的区别。
根据显示的内容,可以将1602LCD液晶分为字符 型 液 晶 , 图 形 液 晶,本设计模块中是采用字符 型 液 晶 ;根据显 示 容 量 又 可 以分为单行16字,2行16字,两行20字等等【3】。因此,1602LCD液晶显示屏能够同时实现这几个功能:在LCD1602显示屏上显示日期、时间、温度以及三个闹钟的设置时间。用数码管显示这么多的功能将是一个非常庞大的工程量。
第四章 软件设计
为了利于实现本设计的智能化,提高编程的效率,本毕业设计项目采用C语言进行软件开发与设计。在智能数字闹钟的软件中,先单独编辑各个模块的程序,对各模块程序进行编译链接,程序没有任何错误可以完全运行操作,接着将各模块的C语言程序综合连接,使编程结构清晰明了,整个程序发现错误检查的时候更加方便,不会令人头疼烦躁。软件设计主要分为了四个部分来编写程序,主程序主要对整个模块进行定义、初始化,主要在按键模块切换的模式情况进行详细的设计,同时也对闹钟部分进行了详细的设计,通过设置的闹钟时间与显示时间比较,当两个时间相同时闹钟就会鸣响;温度模块主要是根据DS18B20芯片进行温度的采集,显示程序的编写则根据其的控制字要求将温度在LCD1602显示屏上显示;定时模块是用芯片DS1302实现定时的功能,提高走时的精确度。
4.1总体系统软件设计
软件程序的设计是根据硬件电路图的连接和各个元器件的功能进行设计。在编写软件时,可以按各个程序的功能将软件细分为各个功能模块,再通过主程序的调用来实现整个软件系统。
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
系统主程序流程图如图4.1,如下所示:
图4.1 主程序流程图
数字钟开机后,进入初始状态,通过调节各个独立轻触式按键来修改数据和各个模式的切换。
图4.1主程序流程图中Y表示按下开关,N表示开关没有按下。
开机后,按下S5可对时间进行12/24小时形式的切换;按下S1可以切换不同的模式,可以根据自己的要求进行切换,这时显示屏上会显示相对应的调节项;切换在某个模式上,按下S2进入数据调节,可将预设参数作加设置,按下S3进入数据调节,可将预设参数作减设置;当参数设置完成后按下开关S4,退出该模式,电路进入正常显示状态。当时间到设置的闹钟时间时会有闹铃,无人操作时响铃30s后自动关闭,或者按下S4关闭闹钟。 4.1.1 主程序设计
主程序:初始化各个功能模块,对闹钟、温度、定时、显示、按键等功能进行定义。其关键代码如下:
void main()//主函数
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
{
LCD_Init();//lcd初始化 InitDs1302();
TimeInit();//定时器初始化 BEEP = 1;
time.alarm_hour = 8; time.alarm_min = 30; time.alarm_hour1 = 18; time.alarm_min1 = 30; time.alarm_hour2 = 23; time.alarm_min2 = 30; while(1) {
TimeAdjust(); ReadTime(); CompareTime();
Display_String(dispbuf,0x00);//lcd1602显示第一行数据 Display_String(warn,0x40);//lcd1602显示第二行数据 } }
void time1() interrupt 1 {
TH1= (65536-50000)/256;
TL1 = (65536-50000)%256;//初始值的定时
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
Count=Count+1; if (count == 20) { sec--; if(sec == 0) { TR0 = 0; BEEP = 1; } count = 0; } }
4.1.2 温度采集模块设计
通过温度传感器将实时温度信息进行采集,将检测到的温度数据数字化,并使其在显示器上输出。其关键代码如下: //读取温度
long int ReadTemperature(void) {
unsigned char a=0; unsigned char b=0; long int t=0,temp1=0; float tt; char flag = 1; Init_DS18B20();
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
WriteAChar(0xCC); //跳过读序号列号的操作
WriteAChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个寄存器对应温度 delay_18B20(100); m=ReadAChar(); n=ReadAChar(); Init_DS18B20();
WriteAChar(0xCC); // 跳过读序号列号的操作 WriteAChar(0x44); // 启动温度转换 //传感器返回值除16得实际温度值
//为了得到2位小数位,先乘100,再除16,考虑整型数据长度, //技巧处理后先乘25,再除4,除4用右移实现 temp1 = n; temp1 <<= 8; temp1 = temp1|m; if ( temp1 < 0x800) { flag = 0; }
else if ( temp1 >= 0x800) { flag = 1;
temp1 = ~temp1 + 1; }
tt = temp1 * 0.0625; temp1 = tt * 10 + 0.5; if (flag == 1) temp1 = temp1 *(-1); return temp1; }
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
4.1.3 定时模块设计
对当前时间,日期等信息进行设定,通过本程序对年月日以及时分读取设定。其关键代码如下: //----读时钟------ uchar read(uchar addr) {
uchar dat=0; rst=0;sclk=0;rst=1; send(addr);//发送地址 dat=receive();//接收 rst=0;return(dat); }
void InitDs1302() {
write(0x8e,0x00);//开
write(0x80,0x53);//写初始状态秒钟的数值 write(0x82,0x28);//写初始状态分钟的数值 write(0x84,0x08);//写初始状态小时的数值 write(0x86,0x09);//写日 write(0x88,0x05);//写月 write(0x8c,0x14);//写年 write(0x8e,0x80);//关 }
4.1.4 显示模块设计
显示正常的时间、日期及温度,并且可实现对12小时/24小时时间切换的显示,对设置三个闹钟时间,闹钟响铃时间进行显示。其关键代码如下: void Write_LCD_Sj(uchar sj)//写数据函数 {
LCD_Busy_Wait();
RS=1;RW=0;EN=0;P0=sj;EN=1;delayms(1);EN=0;
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
}
void Write_LCD_Command(uchar com)//写指令函数 {
LCD_Busy_Wait();
RS=0;RW=0;EN=0;P0=com;EN=1;delayms(1);EN=0; }
void LCD_Init() {
Write_LCD_Command(0x38);//设置8位格式 delayms(1);
Write_LCD_Command(0x01);//屏幕显示内容清除(清屏) delayms(1);
Write_LCD_Command(0x06);//设置输入方式 delayms(1);
Write_LCD_Command(0x0c);//显示总数据 delayms(1); }//初始化
void Set_LCD_POS(uchar pos) {
Write_LCD_Command(pos|0x80); }
void Display_String(uchar *pos, uchar LineNo)//屏幕的显示 { uchar j;
Set_LCD_POS(LineNo); for(j=0;s[j] != '\\0' && j < 16;j++) {
Write_LCD_Sj(s[j]); delayms(1); }
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
}
第五章 系统的安装与调试
5.1 系统硬件的安装与调试
系统硬件在Proteus 7.8仿真软件环境下进行调试,在Proteus中画出智能数字闹钟的电路原理图,在此过程中,寻找元器件要有耐心、认真负责的态度,准确无误的找到相对应的元器件,哪怕一个小小的不同就会影响设计的成果。通过查阅各种资料和老师的帮助下,能够很快的画出电路原理图,并在仿真软件中实现功能。
由于本设计中有五个模块,在完成各个模块后,需要把各部分对应的连接起来,在安装各模块的同时,可以更多掌握每个部分的功能。每个模块安装完成后,不说明就已经完成了全部工作,需要多次进行电路的检测,发现不足与问题所在,不要影响电路的工作。并利用万用表等实验器材对整体进行检测,避免由于接线的错误造成不必要的故障,并且保证安全。
一切准备工作结束后,开始焊接工作,在完成整个焊接工作过程中,得到老师和同学的帮助,工作起来更加得心应手。开始焊接的是单片机的最小系统系统,根据仿真原理图很顺利的完成此次工作,接下来依次焊接了按键模块,温度采集模块,定时模块,显示模块以及各部分的连接,在焊接过程中遇到了很多的问题,有时候把引脚焊错,心情会很烦躁,影响下面的进度,焊接过程中需要用到很多的工具,如:万能表,烙铁,示波器等。在焊接DS1302的时候出现一些问题,编程的时候显示不正常,经过不断的检查电路以及反复使用万能表的检测,最后终于发现了问题的所在,引脚接反了,造成芯片的损坏,庆幸当时多购买了此芯片,不然又要到处跑了。焊接1602显示屏与单片机时,花费了一些时间,一开始焊接的时候没有注意显示屏与单片机P0口顺序,将连接的引脚接反了,显示的时候出现了乱码,在焊接的时候用的锡线太多,不好把该显示屏插在板子上,只好重新焊接,保证其美观。通过不断的拆拆改改,最后调试的时候终于成功,实现了智能数字闹钟的功能。
系统的焊接是本设计中最重要的部分,它要求理论和实际的实物进行很好的结合,焊接工作也是一份细致的工作,需要有耐心,才能将各个元器件正确
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
的焊在电路板上,完成本次设计,实现智能数字闹钟的所有功能。一旦焊接过程中出现错误就要拆下线路重新焊接,工作量会很庞大。
焊接好电路,一定要严格检查,由于本设计采用的是万用板,因此在检测时务必要认真仔细。发现万用板上有多余的锡点时及时地清理,避免造成电路的短路,发生事故,同时,要注意各跳线有无错接或者接触不良的现象,虚焊情况,各元器件的引脚是否接正确,电源、地是否已接完善等现象,对以上情况都要作相应的检查,并作必要的处理。
系统的焊接过程主要有以下几个阶段:
1、根据仿真电路图购买相关的元器件,准备好工具,为实物的焊接做准备。
2、在电路板上合理的安放好元器件,保证实物的美观,尤其是要注意那些易受干扰的电容的位置设计。
3. 用万能表检测电路板上引脚情况,对照仿真原理图用烙铁连接起来,把握整个焊接过程,其中一定要细心,注意安全。
4. 根据仿真原理图,将元器件焊接好,保证其元器件不受损伤。 安装:将各模块的跳线接好,注意引脚。各模块的供电端和接地端,接入单片机的引脚一定要认清引脚好,避免接错,造成不必要的损失。
调试:检测引脚电压是否正常,按键是否接好,电路中有无短路,虚焊。在硬件电路无误情况下,接入电源,系统就可以正常工作了,打开显示器开关产品就可以实现相应功能。
5.2 系统软件的调试
1、 Proteus【2】的调试
运行ISIS 7 Professional出现下面的窗口,在这个窗口中绘制智能数字闹钟的仿真原理图:
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
(1)添加元件到元件表中:智能数字闹钟的设计中主要用到的元件有:AT89C51、DS1302、1602LCD、DS18B20、“地”、“电源”等。单击“P”按钮,出现挑选元件对话框,在此对话框的KEYWORD中输入要找的元件名称,单击OK。
(2)放置元器件:在元件列表中左键选取对应的元器件,在原理图编辑窗口中单击左键,这样所需要的元件就被添加到原理图编辑窗口中。添加“地”、“电源”的时候左键点击工具栏中的Terminals Mode,分别选择GOUND、POWER,在原理图编辑窗口点击左键,分别将“地”、“电源”放置在原理图编辑窗口中。
(3)连线:将智能数字闹钟各个模块综合连接。
(4)添加仿真文件:双击单片机,出现下面的对话框,在Program File中单击
出现文件浏览对话框,找到new.hex文件,单击确定完成添加文
件,单击OK退出。
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
(5)仿真:单击开始仿真。
在进行Proteus仿真软件的调试时,在寻找元器件的过程中遇到了一些麻烦,在仿真元件中找不到想对应的器件,通过询问同学以及资料的查询,终于找到了全部的元件,并将其各个模块进行总和连接,连线过程中安全的通过了,但是耗费了我大量的时间。在仿真软件绘制原理图的过程并没有出现很大的错误,主要就是花费了较长的时间寻找元件盒电路的连线上。
在调试过程中,发现在设置第一个闹钟的时候,出现了一个问题,例如现在的时间是08:27,设置的闹钟时间是08:30,仿真运行开始,闹钟在08:28,08:29的时候都会响铃,当到达闹钟时间响铃结束后,不会再警报,出现正常,这个主要的调试方法在程序的调试中解决。
当解决完这个问题,重新将程序烧到单片机,又出现一个问题,时间不走了,当时怀疑DS1302定时芯片出现问题,于是用万用表对其电路进行检
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
测,,也没有发现什么问题,一切都很正常,最后没办法就将DS1302芯片拆下来,重新将芯片安装,在进行仿真的时候,时间终于走了,但又迎来了一个问题,第一个定的闹钟没有想,于是在程序中再次检查,找到了原因,终于都没有问题,智能数字闹钟的电路能够运行,完全的实现所要求的功能。 2、 Keil µvision4的调试
系统的软件开发环境是Keil µvision4,具体程序编写调试的步骤如下: 1、在菜单Project中选择New Project,设立文件夹,保存文件名,在弹出的对话框中选择Atmel公司的AT89C51单片机。
2、在File菜单中选择New,在弹出的对话框中编辑所需C语言程序
【4】
。程
序初步完成后,点击保存,并设置文件名为***.c。
3、用鼠标右键单击Soµrce groµp 1选择Add Files Groµp‘Soµrce groµp1’,关
闭窗口,程序中命令字符变成绿色。
4、编辑链接,确定程序无误后,用鼠标点击Options for Target,在Target菜单中设置晶振为12MHz,在Oµt pµt中添加Create Hex Fi选项,输出Hex文件。如图5.1所示。
图5.1 程序调试
确认无误后,打开PROTEUS仿真软件,画出所设计的电路图,检查电路,在电路无误后导入Keil µvision4软件生成的HEX文件,点击运行,这时就可以在PROTEUS仿真软件中进行仿真了。在编译调试完成后,可以通过编程器,就可以将所编译的正确程序写入到AT89C51单片机中了,软件安装调试结束。
程序的编写主要有4个大模块:主程序的编写、定时DS1302模块的编写、温度采集DS18B20模块的编写以及1602LCD显示模块的编写。主程序对各个模块
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
进行初始化,对各模块进行定义,同时对三个闹钟时间的设置进行了详细的编写;定时模块主要是对时钟的读写,以及工作方式的编写;温度模块编写该模块怎样读字节,写字节以及温度的读取;显示模块是编写怎样接收日期、时间、温度、三个闹钟时间的数据并在显示屏中显示。
程序的编写调试中主要是温度采集模块的编写,在大学四年的学习中并没有学习过该方面的知识,编写此部分程序的时候最感到吃力,有点不知道从哪里着手。通过图书馆资料的查找,以及在老师的讲解和同学的帮助下,此段程序才慢慢的形成,通过不断的编译找到错误,再到及时修改,如此反复进行,终于将此模块程序运行正常。
做液晶主界面(包括显示时间,日期,星期,温度)时,必须每一步进行调试,烧程序到单片机,花了很长时间,这个过程非常烦琐。
在编写DS1302模块的时候,现了好多问题,读和写都不行,结果发现是硬件焊接错了,经过调整,对底层函数进行了相应修改,最后终于完成,幸好有同学和老师的帮忙。
在调试过程中,发现在设置第一个闹钟的时候,出现了一个问题,例如现在的时间是08:27,设置的闹钟时间是08:30,仿真运行开始,接下来的过程中主要出现了两个问题,一是在未到第一个闹钟时间前,没过一分钟就会警报,直到闹钟时间过,电路又出现正常;二是到第一个设置的闹钟时间,蜂鸣器没有鸣响。通过对程序的反复检查以及同学的帮忙,在这设置闹钟的那段程序中找到了原因,经过修改,在仿真的时候终于显示正常。
第六章 总结与展望
在四年大学的学习过程中,毕业设计是最后但是又最重要一个的环节,是我们步入社会参与实际项目的一个开端,是对我们在大学时期学习情况的一次大检阅。系统的设计主要包括单片机、实时时钟芯片的选取,按键电路、温度采集电路和显示电路的设计,以及各芯片与单片机接口电路的设计。
本次智能数字闹钟的设计,主要有三方面的工作:
1、智能数字闹钟原理图的绘制,要熟悉并掌握每个芯片的引脚功能、内部结构以及各芯片的控制要求和形式,同时要掌握Proteus仿真软件,学会怎样在这个仿真软件中画图,对个工具的使用要非常的熟练。
2、程序的编写,要对各个模块的原理和流程图整理清晰,知道如何对各
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
模块的编写。通过复习C语言,要掌握C语言的运用并能将之在程序中编写。最后还要对Keil µvision4软件进行系统的了解,熟识此软件的操作方法。
3、电路的排版和焊接,在焊接过程中要注意安全,不要在焊接时被烙铁的高温烫伤,在掌握好焊接技术后再开始电路的焊接。
通过自己坚持不懈的努力,经历了从仿真、程序编写、最后的实物成现这个过程,无论制作过程中有什么不顺利的、令人烦躁的事,现在都无法阻挡我的喜悦之情,没有白费苦心。一切都是值得!制作实物和软件的编程是一个困难的过程,当实物制作成功以及软件的编程通过能实现时,自己收获的却远比付出的多,通过自己的研发、制作、调试等一系列工作,基础知识运用的更加的扎实,专业水平得到了大幅提升,并且锻炼了我的毅力,同时树立了更强的自信心,只要功夫深,铁杵就能磨成针,无论做什么事,只要抱着这种心态,未来的发展就一片光明!天下是没有免费的午餐,一切都要自己把握,自己努力。只有时刻准备好的人才能走得更远、更高。遇到困难时更是要坚定,勇敢的面对,查找自己的不足,不断地挑战,才有进步。
随着社会的发展,时代的进步,智能化数字闹钟的发展将也会更加长久,而且以后会有更多智能化的事物出现在我们的周围,智能化将在人们的生活中发挥不可替代的作用,一切将会变得更加高科技。
通过本次智能数字闹钟的设计,首先,巩固了大学四年所学习的专业知识;其次,明白了自己在遇到学术问题时该怎么做、怎么处理、怎么自己独自克服。也明白了以后独自立足社会时或者工作遇到困难时的处理方法。
参 考 文 献
[1]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:高等教育出版社,2010. [2]谢龙汗,莫衍.Proteus电子电路设计及仿真[M].北京:电子工业出版社,2012. [3]黄继昌,张梅林等.电子爱好者必备手册[M].北京:中国电力出版社,2011. [4]谭浩强.C语言程序设计[M].北京:清华大学出版社,2010.
[5]臧纯化等.现代电子技术基础(数字部分)[M].北京:北京航空航天大学出版社,2005. [6]周立功.单片机实验与实践教程(三)[M].北京:北京航空航天大学出版社,2006. [7]赵建领. 51系列单片机开发宝典 [M]. 北京:电子工业出版社,2007:386-413. [8] 于润伟.数字系统设计[M].北京:机械工业出版社,2006年.
[9] 李雅轩.模拟电子技术[M].西安:西安电子科技大学出版社,2000年. [10] 蒋立平.模拟电路与数字电路.北京:北京工业出版社,2004.
[11] 叶刚.基于DS18B20温度控制系统的设计[J].电子测量与仪器学报,2007年.
[12] 史俊杰.田庆安.开关稳压电源原理、设计及实用电路(修订版)[M] .西安:西安电子科技大学出版社,2005年.
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
[13] 彭为. 单片机典型系统设计实例精选[M].北京:电子工业出版社,2006. [14] 张延琪.常用电子电路280例简析[M].北京:中国电力出版社,2004年. [15] 彭介华.电子技术课程设计指导[M].西安:电子工业出版社,1996年.
[16] 余永权.ATMEL89系列单片机应用技术[M].北京:北京航空航天大学出版社,2002年. [17] Paul Lister. Single-chip microcomputers[M].New York, NY, USA: McGraw-Hill, Inc, 1984:23-33.
[18] Claus Kunel, Klaus Zahnert. BASIC stamp. Newnes, 2000.
[19] Harprit Singh Sandhu. Running Small Motors with PIC Microcontrollers. McGraw Hill Professional, 2009.
附 录
1.电路原理图
2. 原件清单
单片机 AT89C51 1 上拉电阻 1 独立轻触式按键 5 晶振 32.768KHz 1 晶振 12MHz 1 电容 30pF 2
欧阳歌谷创编 2021年2月1
欧阳歌谷创编 2021年2月1
电阻 10K 1 电阻 4.7K 1 LCD1602 液晶显示屏 1 定时芯片 1302 1 温度采集芯片 DS18B20 1 蜂鸣器 1 三极管 PNP 1 3. 实物电路运行图
欧阳歌谷创编 2021年2月1
因篇幅问题不能全部显示,请点此查看更多更全内容