万年历语音报时时钟_第1页
万年历语音报时时钟_第2页
万年历语音报时时钟_第3页
万年历语音报时时钟_第4页
万年历语音报时时钟_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业Xxxxxxxx毕业设计题 目 基于MCS51单片机的语音万年历设计专 业 班 级 姓 名 指导教师姓名 职称 起止日期 摘 要本设计是基于51系列的单片机的电子万年历及语音报时设计,万年历可以显示年、月、日、时、分、秒、星期等,具有日期和时间校准、闰年补偿、温度显示、闹钟、光控开关,秒表等多种功能。在设计的同时对单片机、语音芯片和外围扩展知识进行了比较全面准备。本设计由万年历控制模块,显示模块,发声模块四个部分组成。控制模块由单片机89C52,按键模块,DS1302时

2、钟模块,温度感应模块等组成,其中89C52单片机作为核心,功耗小,电压可选用35V电压供电。显示模块由12864液晶模块组成。发声模块由喇叭和三极管组成。利用单片机可以大大减小硬件的复杂程度。综合以上各优点可知道该设备的确是一款经济、适用、多功能的万年历。关键字: 51单片机 lcd12864液晶显示器 语音报时 目 录TOC o 1-3 h u 1 电子万年历概述 1.1 问题的提出和研究背景 在当代繁忙的工作与生活中时间与我们每一个人都有非常密切的关系每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量因此产生了钟表。钟表的发展是非常迅速的从刚开始的机械式钟表到现

3、在普遍用到的数字式钟表即使现在钟表千奇百怪。但是它们都只是完成一种功能计时功能,只是工作原理不同而已,在人们的使用过程中逐渐发现了钟表的功能太单一,没有最大程度上的满足人们的需求。因此在这里能不能把一些辅助功能加入钟表中。在此设计中所设计的钟表不但具有普通钟表的功能它还能实现额外的功能。随着电子技术的迅速发展,特别是随着大规模集成电路产生而出现的微型计算机给人类生活带来了极大的方便。走入家庭从洗衣机、微波炉到音响、汽车到处都可以见到单片机应用的踪影。如果说微型计算机技术的出现使现代科学研究得到了质的飞跃那么也可以毫不夸张的说“单片机技术的出现则是给现代工业测控领域带来了一次新工业革命”。一块单

4、片机芯片就是一台微型计算机。由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。目前单片机以其可靠性高和智能性等特点被广泛应用到工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等领域中,并已经进入家庭。因此,单片机技术的开发和应用水平已经逐步成为一个国家自动化发展水平的标志之一。万年历是采用数字电路实现对时,分,秒.数字显示的计时装置, 随着科技的快速发展时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年

5、、月、日、周日、时、分、秒进行计时还具有闰年补偿等多种功能而且DS1302的使用寿命长误差小。对于数字电子万年历采用直观的数字显示可以同时显示年、月、日、周日、时、分、秒和温度等信息还有时间校准等功能。电子万年历广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等但是所有这些

6、都是以钟表数字化为基础的。因此研究万年历及扩大其应用有着非常现实的意义。 1.2 国内外研究现状及发展趋势 钟表功能的单一没有更大程度的满足人们的需求近年来随着电子技术的迅速发展,特别是随着大规模集成电路产生钟表的数字化给人们生产生活带来了极大的方便。实时时钟集成电路是一种高密度集成的专用时钟集成电路适合于一切需要微功耗及准确计时的场合,如:手机电视机 付费电表高精度时钟可编程时间控制器数码相机等等。早期RTC产品实质是一个带有计算机通讯口的分频器。它通过对晶振所产生的振荡频率分频和累加得到年、月、日、时、分、秒等时间信息并通过计算机通讯口送入处理器处理。这一时期RTC的特征如下在控制口线上为

7、并行口功耗较大采用普通CMOS工艺封装为双列直插式芯片普遍没有现代RTC所具有的万年历及闰年月自动切换功能也无法处理2000年问题。现在已经被淘汰。在90年代中期出现了新一代RTC它采用特殊CMOS工艺功耗大为降低典型值约0.5A以下供电电压仅为1.4V以下和计算机通讯口也变为串行方式出现了诸如三线SIO/四线SPI部分产品采用2线I2C总线包封上采用SOP/SSOP封装体积大为缩小功能上片内智能化程度大幅提高、具有万年历功能输出控制也变得灵活多样。其中日本RICOH推出的RTC甚至已经出现时基软件调校功能TTF及振荡器停振自动检测功能而且芯片的价格极为低廉。TTF是RTC发展史上具有里程碑意

8、义的技术从此以晶振为基准的电子钟表也可以具备类似传统钟表控制摆长以调节精度的功能。TTF是利用吞吐脉冲技术来补偿晶体振荡器的固有偏差而实现高精度时钟输出。利用一套特殊的数电路增加或减去相当于晶振振荡误差的脉冲而不改变晶振本身的振荡。在一定的调节时基中如20S内调节电路在最后一秒发生作用校准整个时基。这一校正过程完全是数字化过程故不会影响晶体负载电容匹配不影响晶体振荡电阻。最新一代RTC产品中除了包含第二代产品所具有的全部功能更加入了复合功能如低电压检测主备用电池切换功能抗印制板漏电功能且本身封装更小。 电子万年历的设计是由单片机驱动时钟芯片进行显示的目前单片机正朝着高性能和多品种方向发展趋势将

9、是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。CMOS化近年由于CHMOS技术的进小大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外还具有功耗的可控性使单片机可以工作在功耗精细管理状态。低功耗化 单片机的功耗已从mA级甚至1uA以下使用电压在3-6V之间完全适应电池工作。低功耗化的效应不仅是功耗低而且带来了产品的高可靠性、高抗干扰能力以及品的便携化。低电压化 几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽一般在3-6V范围内工作3。低电压供电的单片机电源下限已可达1-2V。目前0.8V供电的单片机已

10、经问世。进入21世纪后,智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。高性能化 主要是指进一步改进CPU的性能加快指令运算的速度和提高系统控制的可靠性。采用精简指令集RISC结构和流水线技术可以大幅度提高运行速度。外围电路内装化 这也是单片机发展的主要方向。在时钟集成电路方面充分利用TTF功能做到每一个RTC系统的高精度以RICOH 的TTF技术为代表的新一代RTC已经采用全新的思维特殊的技术以几乎不增加成本的方式将普通晶振的RTC计时精度提高到一个很高的水平。目前这一新型的RTC已在国内许多行业中迅速应用

11、起来。综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点符合电子仪器仪表的发展趋势具有广阔的市场前景。1.3 本设计的任务和要求 本论文主要研究基于单片机的电子万年历设计,所设计的电子万年历具备如下功能 1.能显示年、月、日、星期、时、分、秒。 2.以12h小时计时方式。 3.使用按键开关可实现时分调整时间与阴、阳历能够自动关联。 4.具备年、月、日、星期、时、分、秒校准功能。5.具备温度显示功能。6.具备语音播报当前时间温度温度 。所做的主要工作如下: 系统硬件电路的设计 1 单片机最小应用电路的设计。 2 DS1302时钟模块电路的设计。 3 针对电子万年历所设

12、计的LCD显示电路。 4 针对电子万年历所设计按键电路。 5 DS18B20温度检测电路6 语音播报控制电路及播报电路 系统软件程序的设计 1 主程序的设计。2 DS1302时间显示程序设计3 DS18B20温度显示程序设计4 语音播报程序设计1.4 章节内容安排本设计是以atmel公司的at89S52单片机为基础,系统的设计基于单片机的语音电子钟。本设计综合合了DS1302高精度时钟芯片,DS18B20数字温度检测芯片,ISD1420语音录放芯片,设计出多功能、高精度的语音电子钟。本设计的安排如下:1.简明扼要的阐述本设计的目的和要求。介绍单片机的发展、特点以及目前在国内外的应用和前景。同时

13、对本设计的结构进行了安排。2.根据设计要求结合单片机原理提出设计原理和方案。3.按照设计方案详细规划语音电子钟的硬件设计,利用绘制各个模块的电路原理图。4.在硬件设计的基础上,通过深入研究语音电子钟的功能。画出各个部分的程序流程图,然后根据流程图编写源程序。5.进行硬件的测试和软件的调试。通过集成开发环境IDE对编写的源程序进行调试。6.对全文进行总结,并写出设计的体会和本设计的不足。简单的叙述对本设计的前景和展望。2 系统功能与元器件选择 2.1 系统的主要功能 2.1.1时钟显示功能 对于时钟显示功能需要在液晶上显示小时、分钟和秒钟,以及日期,星期。2.1.2 显示功能对于本设计需要显示时

14、间,日期,温度,星期,闹钟这些内容2.1.3 温度检测功能检测时钟所在空间的环境温度2.1.4 报时功能按下报时按键后进行语音报时2.2 元器件选择 2.2.1单片机芯片的选择 选择一: 采用89C51芯片作为硬件核心采用Flash ROM内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具ISP在线编程技术, 当在对电路进行调试时由于程序的错误修改或对程序的新增功能需要烧入程序时对芯片的多次拔插会对芯片造成一定的损坏1。 选择二: 采用AT89S52,片内ROM全都采用Flash ROM能以3V的超底压工作同时也与MCS

15、-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间同样具有89C51的功能且具有在线编程可擦除技术当在对电路进行调试时由于程序的错误修改或对程序的新增功能需要烧入程序时不需要对芯片多次拔插所以不会对芯片造成损坏。 本次设计由于需要写入单片机里的程序比较大,需要更大的ROM 空间,并且需要对程序不断的修改和写入。所以选择采用AT89S52作为主控制系统。2.2.2显示模块选择 选择一 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见. 选择二 采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成对于显示文字比较适合,如采用在显示数字显

16、得太浪费,且价格也相对较高,所以也不用此种作为显示. 选择三 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 本次电子万年历设计需要显示的参数多,数码管需要的数量较多综合性价比所以采用了LCD液晶显示屏作为显示 2.2.3时钟芯片的选择 选择一 直接采用单片机定时计数器提供秒信号使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用节约成本,但是实现的时间误差较大。所以不采用此方案。 选择二 采用DS1302时钟芯片实现时钟。DS1302芯片是一种高性能的时钟芯片可自动对秒、分、时、日、周、月、年

17、以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区工作电压2.5V5.5V范围内2.5V时耗电小于300nA2。 本次设计在时间显示方面需要尽可能的减少误差与现实时间同步所以在时钟方面选用了DS1302芯片。2.2.4 温度检测功能选择一 采用带编码的数字时钟检测芯片,通过编码产生数字信号传到给单片机,再进行显示。测量精确,稳定度高,硬件电路简单,价格便宜但不适合于极端的共同做环境。选择二 用模拟温度温度测试原件,个体较大,硬件电路复杂,价格昂贵,但适合于极端环境下的使用。本次使用的环境为一般的生活环境,在这样的环境下数字测温芯片就能达到要求,系统选择采用DS18B20温度检测电路

18、。2.2.5 语音播报功能选择一 采用现成的语音芯片,进行播报设置,闹铃设置,价格便宜,但个性化差。选择二 利用录放芯片,自己进行录制,价格较高,能够进行个性化设置。由于大多说人喜欢个性化,且价格差别并不是太多,因此选择语音录放芯片ISD1402.2.2.6元器件最终确定 综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;128B20提供温度;ISD1402提供语音;LCD12864液晶显示屏作为显示。3 系统的硬件结构设计 3.1 总体设计 电子万年历的设计主要是在硬件电路中显示时钟日期文字方面的信息在设计方面需要用单片机内外部中断来控制时钟芯

19、片、液晶显示芯片。为了能更直观的显示、调节在本次设计中加入了5个按键,以便能对时间日期进行更好的调整,及报时控制。 硬件电路框图的设计主要包括单片机最小应用系统及显示电路、按键电路、DS1302时钟电路,ISP1402语音电路。单片机采用AT89S52或其兼容系列。采用12MHz高精度的晶振以获得较稳定时钟频率减小测量误差。时钟电路是以DS1302作为主控芯片、报时电路用ISP1402作为主控芯片、显示部分用LCD1602进行显示。 图3.1 总体设计框图 3.2 系统的模块电路设计 3.2.1单片机最小应用系统电路 AT89S52是一种低功耗、高性能CMOS 8位微控制器具有8K在系统可编程

20、Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程亦适于常规编程器。在单片机芯片上拥有灵巧的8 位CPU 和在系统可编程Flash使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。单片机最小应用系统电路包括以下的两个部分时钟电路和复位电路3。 3.3.1.1、 时钟电路 单片机的时钟信号用来提供单片机片内各种微操作的时间基准时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器引脚XTAL1和XTAL2分别是此放大电器

21、的输入端和输出端由于采用内部方式时电路简单,所得的时钟信号比较稳定实际使用中常采用这种方式。 图3.2 单片机时钟电路3.2.1.2、 复位电路 为了初始化单片机内部的某些特殊功能寄存器必须采用复位的方式。复位后可使CPU及系统各部件处于确定的初始状态并从初始状态开始正常工作。单片机的复位是靠外电路来实现的。在正常运行情况下只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位但如果RST引脚上持续为高电平。单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的

22、影响,在系统上电时RAM的内容是不定的。复位操作有两种情况,即上电复位和手动(开关)复位。本系统采用手动复位方式。 图3.3 单片机复位电路 3.2.2 DS1302时钟模块设计 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”、接着把RST端置“1”、最后才给予SCLK脉冲读/写时序。对于DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6若对程序进行读/写时RAM=1,对时间进行读/写时CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时该位为1,该位为0则表示进行的是写操作。控制字节总是从最低位开始输入

23、/输出的。对于DS1302的日历、时间寄存器内容“CH”是时钟暂停标志位,当该位为1时时钟振荡器停止DS1302处于低功耗状态当该位为0时,时钟开始运行。“WP”是写保护位在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时写保护位防止对任一寄存器的写操作。 DS1302的引脚排列其中1脚为后备电源、8脚为主电源。在主电源关闭的情况下也能保持时钟的连续运行。DS1302由后备电源或主电源两者中的较大者供电。当主电源大于后备电源0.2V时主电源给DS1302供电。当主电源小于后备电源时DS1302由后备电源供电。2脚和3脚是振荡源外接32.768KHz晶振。5脚是复位/片选线通过把

24、5脚输入驱动置高电平来启动所有的数据传送。5脚输入有两种功能:首先,5脚接通控制逻辑允许地址/命令序列送入移位寄存器;其次5脚提供终止单字节或多字节数据的传送手段。当5脚为高电平时所有的数据传送被初始化允许对DS1302进行操作。如果在传送过程中5脚置为低电平则会终止此次数据传送6引脚变为高阻态。上电动行时在主电源大于等于2.5V之前5脚必须保持低电平。中有在7脚为低电平时才能将5脚置为高电平6脚为串行数据输入端双向。7脚始终是输入端。 图3.4 DS1302时钟模块电路 3.2.3 LCD显示电路 LCD1602最佳工作电压是在5V左右,有数据位8个:接电源端、接地端、数据读写端、数据命令选

25、择端。在本次设计中,数据端D0-D7是和单片机的P2口连接。基本操作时序是1.在读数据状态时输入RS=L,RW=H,E=H,写数据时输入RS=H,RW=L。同时在与单片机连接运行过程中要进行上电保护对其进行初始化4。 图3.5 液晶显示电路 3.2.4 按键电路 在本次设计中为了能更好的调整时间日期,在总电路中加入了按键电路。主要是用来控制液晶显示上的时间日期一次完整的按键过程包含以下5个阶段: 1. 等待阶段 此时按键尚未按下处于空闲阶段。2. 前沿闭合抖动阶段此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为520ms。为了确保按键操作不会误动作此时必须有个前沿消抖动延时。3. 键

26、稳定阶段此时抖动已经结束,一个有效的按键动作已经产生。系统应该在此时执行按键功能或将按键所对应的键值记录下来待按键释放时再执行。4. 后沿释放抖动阶段一般来说考究一点的程序应该在这里再做一次消抖延时,以防误动作。但是如果前面“前沿抖动阶段”的消抖延时时间取值合适的话可以忽略此阶段。5. 按键释放阶段此时后沿抖动已经结束按键已经处于完全释放状态如果按键是采用释放后再执行功能则可以在这个阶段进行按键操作的相关处理。按键开关与单片机的P3口进行连接通过产生外部中断信号来调整液晶显示屏上的日期5。 图3.6按键电路 3.2.5 语音电路 ISD1110/ISD1420系列单片录放时间8至20秒,音质好

27、。芯片采用CMOS技术,内含震荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM阵列。最小的录放系统仅需麦克风、喇叭、两个按钮、电源及少数电阻电容。在录放操作结束后,芯片自动进入低功耗节电模式、功耗仅0.5uA。 ISD1420有唯一的录音控制和边缘电平触发两种放音控制。不分段时外围线路最简,也可按最小段长为单位任意组合分。该芯片操作模式为:ISD1110/ISD1420系列内置了若了干操作模式,可用最少的外围器件实现最多的劝能。操作模式也由地址端控制;当A7和A6都为1时,其它地址端置高就选择某个(或某几个)模式。因为操作模式和直接寻址互相排斥。操作模式可由

28、微控制器,也可由硬件实现。使用操作模式有两点注意: 图3.7 语音电路所有操作最初都是从0地址,即存储空间的起始端开始。后续操作根据所选用的模式可从其它的地址开始。此外,A4模式中,当电路由录转为放时地址计数器复位为0,而由放转为录则不复位。(2)当控制信号(/PLAYL、/PLAYE或/REC)变低,同时A6和A7为高时,执行操作模式。这种操作模式一直有效,除非控制信号再次由高变低,芯片重新锁存当前的地址模式端电平,然后执行相应操作。 3.3 电子万年历的硬件电路设计 本系统的特点是利用单片机控制DS1302的电子万年历的设计单片机选用AT89s52经济易用且片内有8K的ROM便于编程。 硬

29、件系统电路主要由单片机系统及DS1302时钟模块电路组成。采用AT89S52来实现对DS1302时钟芯片模块的控制。电路原理图如图所示6。 图3.6 电子万年历电路原理图 4 系统软件的设计 由于本设计的功能要求,运用的模块较多,程序设计较为复杂,因此在这里只进行对程序的说明,具体程序添加在附录1中。4.1 主程序流程图 有于本电路中需要实现的功能比较多,必须进行模块化的程序编写。因而主程序中主要是对各种子程序的初始化操作,以及对各种子程序功能的调用操作。主程序实现的具体功能与实现方式见下图,具体程序在附录1中。 4.2 时钟电路流程图本设计运用了DS1302时钟芯片,因此不需要再再单片机程序

30、中编写时钟程序了,只需对DS1302进行一定的初始化,及对其产生的时间进行读取,及有时需要的调整即可。 图4.2 DS18B20子流程图4.3 语音电路子程序语音电路主要用于当按键按下时,输出所录制好的报时与温度语音。 4.3 语音电路程序流图4.4 按键电路子程序按键主要用于人机界面的输入,按键子程序主要用于按键的检测。由于综合考虑按键硬件去抖动成本要比软件去抖动成本高很多。因此电路采用软件去抖。其过程为:扫描按键,去抖延时,再检测,执行对应程序。 4.5 温度检测电路DS18B20的工作流程是,初始化ROM操作指令存储器操作指令数据传输。其工作时序包括:初始化时序、写时序和读时序。开始DS

31、18B20初始化读字节写字节DS18B20初始化读取温度 图3.3 DS18B20子流程图4.6 显示电路子程序LCD液晶显示程序分为液晶初始化、读忙、写指令和写数据操作,液晶显示器是一块慢器件,所以在执行每条指令之前必须确定模块忙标志为低电平(不忙),否侧此指令无效。LCD初始化LCD是否为忙?YN单片机向LCD写命令单片机向LCD写数据显示数据结束图3.4 LCD显示程序流程图5 软硬件调试 5.1 软件调试 5.1.1、调试主程序 主程序运行后在无任何按键输入时观察有无显示液晶显示屏是否工作其时、分、秒显示的变化过程是否正确。若运行结果不正确首先应根据程序运行的实际现象分析判断哪些因素可

32、引起相关故障再通过调试方法逐一认证和排除。例如若定时/计数器的初始化出错,则时钟将不能工作若显示程序出错则将不能正确显示时钟单元内容若定时/计数器中断服务子程序出错则其显示数据的变化规律将不正常10。 5.1.2、调试子程序 在调试主程序时必然要调用相关的功能子程序。因此首先应明确子程序的具体功能通过对子程序的分析确定子程序的入口、出口参数及相关标识位的状态然后在满足入口条件的状态下设法检查从主程序进入子程序,再由子程序返回到主程序的运行过程。可采用跟踪运行或运行至光标处的方法检查从主程序进入子程序内部的运行过程,再通过单步运行等方法检查子程序内部的运行情况和返回主程序的过程11。 5.2 硬

33、件调试 检查电路连接是否正确特别是电源的正负极、按键开关电路、LCD1602显示电路、芯片程序是否烧写入芯片等等。硬件仿真如如图5.1所示。通过反复调试发现并排除软件与硬件存在的各类问题以满足系统设计的预期目的12。 6.总结与展望本设计是基于单机控制的电子万年历系统的成本较低但实用价值很高而且采用的技术较为稳定而且成熟,从而可以保证系统的稳定性另外系统应用要求不是很高环境的适应能力强。本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识以及查阅资料培养一种自学的能力。并且引导一种创新的思维把学到的知识应用到日常生活当中。在设计的过程中不断的学习思考和同学间的相互讨论运用科学的分析

34、问题的方法解决遇到的困难掌握单片机系统一般的开发流程学会对常见问题的处理方法,积累设计系统的经验充分发挥教学与实践的结合。全能提高个人系统开发的综合能力、开拓了思维。为今后能在相应工作岗位上的工作打下了坚实的基础。 经过一个学期的学习和研究本人对这个课题有了比较全面的了解对自动控制系统及单片机软件有较深入的认识,但由于时间和个人知识背景所限系统仍然存在不足之处有待改进。 参考文献 1 张鑫,华臻,陈书谦.单片机原理及应用M.电子工业出版社,2005.8第1次印刷 2 邢庆翠,王式龙,张乾.多功能数字时钟R.曲阜师范大学,2004 3 陈国平.MCS-51系列单片机系统原理与设计电子技术应用M.

35、冶金工业出版社2003.6 4 吴金戌.液晶显示器的原理与应用M.清华大学出版社,2002 5 夏路易,石宗义.电路原理图与电路板设计教程M.北京希望电子工业出版社,2002 6 何希才.集成电路及其应用实例M.科学出版社,1998.2 7 马忠梅,张凯.单片机的C语言应用程序设计M.北京:航空航天大学出版社,2007.1 8 刘文涛.基于C51语言编程的MCS-51单片机实用教程M.原子能出版社,2004.9 9 基于汇编语言的单片机的设计(简易电子钟设计)C.2007.6.26 10 付家才.单片机控制工程实践技术M.北京:化学工业出版社,2004.3 11 李光才,楼然笛.单片机课程设计

36、 实例指导M.北京:北京航空航天大学出版社,2004 12 朱定华.单片机原理及接口技术实验M.北京:北方交通大学出版社,2003 附 录 附录1 源程序 1.主程序#include#define uchar unsigned char#define uint unsigned intuchar num=0;uchar shi,fen,miao,nian,yue,ri,week;uchar shi1,fen1,miao1,naozhong;uchar code table=:-.= ;uchar code table1=年月日温度闹铃开关;uchar dispbuf9=0,0,0,0,0;/

37、显示数据暂存uchar code voice_add=0 x00,0 x04,0 x08,0 x0c,0 x10,0 x14,0 x18,0 x1c,0 x20,0 x24,0 x28,0 x2c,0 x30,0 x34,0 x38,0 x40,0 x4c,0 x6c;/地址数组 09十,点,整,温度,摄氏度,现在时刻,公鸡叫uchar code xingqi1= 星期一;uchar code xingqi2= 星期二;uchar code xingqi3= 星期叁;uchar code xingqi4= 星期四;uchar code xingqi5= 星期五;uchar code xingq

38、i6= 星期六;uchar code xingqi7= 星期日; uchar code TIME_SET= 时钟设置;uchar code ALARM_SET= 闹钟设置;/*标示位定义*/uchar KEY_DIS_Change_Flog=0; /切换显示标示位uchar KEY_SET_Flog=0; /设置标示位uchar Dis_Timer_num=0; /设置时显示计数bit Set_Dis_Flog=0; /设置显示标示位bit ALARM_Flog=0; /闹铃开关标示位bit VOICE_Flog=0; /语音播报标示位/*延时子程序*/void Delay_1ms(unsig

39、ned int xms)unsigned int i,j;for(i=xms;i0;i-)for(j=122;j0;j-);#includeDS1302.H#includeDS18B20.H#include12864.h#includekey.h#includedisplay.hvoid VOICE_Delay(unsigned char xms)unsigned char i;for(i=xms;i0;i-)display();Read_18B20_Temperature();#includeVOICE.Hvoid ALARM_CLOCK()if(naozhong)if(shi=shi1&f

40、en=fen1)P1=voice_add16; /公鸡叫PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(2);/*主程序*/main()INIT_DS1302();Read_18B20_Temperature();Delay_1ms(10);TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;LCD_init(); /液晶初始化 init_12864(); while(1) display(); keyscan(); Read_18B20_Temperature()

41、; voice(); ALARM_CLOCK(); void T0_time() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;Dis_Timer_num+;语音播放子程序sbit PLAYEN=P30;void voice()if(VOICE_Flog)VOICE_Flog=0;P1=voice_add15;/现在时刻PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(2);if(shi/10=2)P1=voice_add2; /2PLAYEN=0;Delay_1ms(3);PLAYEN=1;V

42、OICE_Delay(1);P1=voice_add10; /十PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(shi/10=1)P1=voice_add10; /十PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(shi%100) P1=voice_addshi%10; PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_add11; /点PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(f

43、en=0)P1=voice_add12; /整PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);elseif(fen/101) P1=voice_addfen/10; PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_add10; /十PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(fen/10=1)P1=voice_add10; /十PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(fen/10

44、=0)P1=voice_add0; /零PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(fen%100)P1=voice_addfen%10; PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_add13; /温度PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(2);if(dispbuf21)P1=voice_adddispbuf2; /PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);if(dispbuf

45、20)P1=voice_add10; / 十PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_adddispbuf1; /PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_add11; /点PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_adddispbuf0; /PLAYEN=0;Delay_1ms(3);PLAYEN=1;VOICE_Delay(1);P1=voice_add14; /摄氏度PLAYEN=0;D

46、elay_1ms(3);PLAYEN=1;VOICE_Delay(2);DS18B20温度读取程序#define uchar unsigned char#define uint unsigned intsbit DS18B20_DQ=P20;uchar data DS18B20_Temp_data4=0 x00,0 x00,0 x00,0 x00; /储存温度值得数组uchar code DS18B20_TEM_Deccode16=0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04,/温度小数位查表数组 0 x05,0 x06,0 x06,0 x07

47、,0 x08,0 x08,0 x09,0 x09;uint DS18B20_Change_Time=0;/不同温度传感器采集温度的切换时间bit DS18B20_Presence;/18b20复位成功标示位 =0 成功 =1 失败void Delay_6us(uchar xus)/6*xus+11us的延时时间(经仿真得到的) while(xus-);void DS18B20_RESET() /复位 DS18B20_DQ=1;Delay_6us(2);DS18B20_DQ=0;Delay_6us(80); /至少480us的低电平信号DS18B20_DQ=1; /拉高等待接收18b20的存在脉

48、冲信号Delay_6us(10);DS18B20_Presence=DS18B20_DQ;Delay_6us(40);DS18B20_DQ=1; /拉高使总线在空闲状态void Write_DS18B20_OneChar(uchar dat) /写一个字节uchar i=0;for(i=8;i0;i-)DS18B20_DQ=0;DS18B20_DQ=dat&0 x01;Delay_6us(5);DS18B20_DQ=1;dat=1;uchar Read_DS18B20_OneChar()/读一个字节uchar dat=0;uchar i=0;for(i=8;i0;i-)DS18B20_DQ=0

49、;dat=1;DS18B20_DQ=1;if(DS18B20_DQ)dat|=0 x80;Delay_6us(4);return dat;void Read_18B20_Temperature()DS18B20_RESET();/复位18B20if(!DS18B20_Presence)/复位成功Write_DS18B20_OneChar(0XCC);/跳过读序列号Write_DS18B20_OneChar(0X44);/启动温度转换Delay_6us(82);/等待温度转换时间500us左右DS18B20_RESET();/复位18B20Write_DS18B20_OneChar(0XCC);

50、/跳过读序列号Write_DS18B20_OneChar(0XBE);DS18B20_Temp_data0=Read_DS18B20_OneChar(); /Temperature LSBDS18B20_Temp_data1=Read_DS18B20_OneChar(); /Temperature MSB显示子程序#define uchar unsigned char#define uint unsigned intvoid display1() /显示1 显示日期、时间、温度、闹铃开关uchar i;dispbuf0=DS18B20_TEM_DeccodeDS18B20_Temp_data0

51、&0 x0f;/小数位dispbuf4=(DS18B20_Temp_data1&0 x0f)4);/取出温度值得整数位dispbuf3=dispbuf4/100;dispbuf2=dispbuf4%100/10;dispbuf1=dispbuf4%10; /*第一行年月日显示*/LCD_pos(0,1);write_dat(table2);write_dat(table0);LCD_pos(0,2);write_dat(tablenian/10);write_dat(tablenian%10);LCD_pos(0,3); /年write_dat(table10);write_dat(table

52、11);LCD_pos(0,4);write_dat(tableyue/10);write_dat(tableyue%10);LCD_pos(0,5); /月write_dat(table12);write_dat(table13);LCD_pos(0,6);write_dat(tableri/10);write_dat(tableri%10); LCD_pos(0,7); /日write_dat(table14);write_dat(table15);/*第二行时分秒显示*/LCD_pos(1,2);write_dat(tableshi/10);write_dat(tableshi%10);

53、LCD_pos(1,3);write_dat(table10);write_dat(tablefen/10);LCD_pos(1,4);write_dat(tablefen%10);write_dat(table10);LCD_pos(1,5);write_dat(tablemiao/10);write_dat(tablemiao%10);/*第三行星期显示*/LCD_pos(2,0); switch(week) case 1:LCD_pos(2,0); i=0; while(xingqi1i!=0) write_dat(xingqi1i);/显示字符i+; break; case 2:LCD

54、_pos(2,0);i=0; while(xingqi2i!=0) write_dat(xingqi2i);/显示字符 i+; break; case 3:LCD_pos(2,0);i=0;while(xingqi3i!=0) write_dat(xingqi3i);/显示字符 i+; break; case 4:LCD_pos(2,0);i=0;while(xingqi4i!=0) write_dat(xingqi4i);/显示字符 i+; break; case 5:LCD_pos(2,0);i=0;while(xingqi5i!=0) write_dat(xingqi5i);/显示字符

55、i+; break; case 6:LCD_pos(2,0);i=0;while(xingqi6i!=0) write_dat(xingqi6i);/显示字符 i+; break; case 7:LCD_pos(2,0);i=0;while(xingqi7i!=0) write_dat(xingqi7i);/显示字符 i+; break; default: break; /*第四行星期显示*/LCD_pos(3,0); /温write_dat(table16);write_dat(table17);LCD_pos(3,1); /度write_dat(table18);write_dat(tab

56、le19);LCD_pos(3,2); write_dat(tabledispbuf2);write_dat(tabledispbuf1);LCD_pos(3,3); write_dat(table12); /.write_dat(tabledispbuf0);LCD_pos(3,4); write_dat(table118);/write_dat(table119);LCD_pos(3,5); write_dat(table110);/闹write_dat(table111);LCD_pos(3,6); write_dat(table112);/闹write_dat(table113);LC

57、D_pos(3,7);if(naozhong)write_dat(table114);write_dat(table115);/开 elsewrite_dat(table116);write_dat(table117);/关void display2() /显示2 时钟设置uchar i; /*第一行时钟设置*/LCD_pos(0,0);i=0;while(TIME_SETi!=0)write_dat(TIME_SETi);/显示字符闹钟设置i+;/*第二行年月日设置*/LCD_pos(1,1);write_dat(table2);write_dat(table0);LCD_pos(1,2);

58、if(Set_Dis_Flog&KEY_SET_Flog=0)write_dat(table14);write_dat(table14);elsewrite_dat(tablenian/10);write_dat(tablenian%10);LCD_pos(1,3); /年write_dat(table10);write_dat(table11);LCD_pos(1,4);if(Set_Dis_Flog&KEY_SET_Flog=1)write_dat(table14);write_dat(table14);elsewrite_dat(tableyue/10);write_dat(tabley

59、ue%10);LCD_pos(1,5); /月write_dat(table12);write_dat(table13);LCD_pos(1,6);if(Set_Dis_Flog&KEY_SET_Flog=2)write_dat(table14);write_dat(table14);elsewrite_dat(tableri/10);write_dat(tableri%10); LCD_pos(1,7); /日write_dat(table14);write_dat(table15);/*第三行时间设置*/LCD_pos(2,2);if(Set_Dis_Flog&KEY_SET_Flog=3

60、)write_dat(table14);write_dat(table14);elsewrite_dat(tableshi/10);write_dat(tableshi%10);LCD_pos(2,3);write_dat(table10);if(Set_Dis_Flog&KEY_SET_Flog=4)write_dat(table14);elsewrite_dat(tablefen/10);LCD_pos(2,4);if(Set_Dis_Flog&KEY_SET_Flog=4)write_dat(table14);elsewrite_dat(tablefen%10);write_dat(ta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论