首页 基于单片机的万年历设计毕业论文

基于单片机的万年历设计毕业论文

举报
开通vip

基于单片机的万年历设计毕业论文基于单片机的万年历设计 内蒙古科技大学毕业设计说明书(毕业论文) 题 目:基于单片机的电子万年历设计 带温度显示可调闹钟万年历 摘 要 本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统最大的特点是体现了较强的人机交互和独立的模块化程序设计。温度采集选用DS18B20芯片,数据显示采用1602A液晶显示模块,在第一行显示年月日、星期以及当前的状态,第二行显示温度和时间,合理的利用液晶显示区域。51主芯片利用定时中断产生时间,控制着液晶的显示更新、温度的实时变化以及按键...

基于单片机的万年历设计毕业论文
基于单片机的万年历设计 内蒙古科技大学毕业设计说明书(毕业论文) 题 目:基于单片机的电子万年历设计 带温度显示可调闹钟万年历 摘 要 本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统最大的特点是体现了较强的人机交互和独立的模块化程序设计。温度采集选用DS18B20芯片,数据显示采用1602A液晶显示模块,在第一行显示年月日、星期以及当前的状态,第二行显示温度和时间,合理的利用液晶显示区域。51主芯片利用定时中断产生时间,控制着液晶的显示更新、温度的实时变化以及按键的读取处理,而对于闹钟,实际上就是时间里的一个嵌套程序。时间和闹钟的值由按键调整设置,采用通用的二十四小时制。该电路采用51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 关键字:万年历;温度计;闹钟;液晶显示 一、 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 设计与论证 根据要求,系统分为四个 基于单片机的万年历设计 摘 要 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。目前,单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来了诸多方便。 本设计是一个基于AT89S52单片机的日历显示系统,本设计能显示公历年、月、日,以及时、分、秒、温度、星期等信息,而且还提供了农历信息,具有调整时间,温度采集,闹钟及个性化的闹铃等功能。系统所用的时钟日历芯片DS1302具有高性能、低功耗、接口简单的特点,使本系统电路简化,编程方便,同时功能也很强。采用AT89S52单片机的万年历系统可以很好的改善传统采用模拟电路引起的计时不准确,不可靠,一致性差等问题。此系统计时精确,价格低廉,可以广泛应用在生活,学习和工作等任何领域,并且起到重要作用。 关键词:万年历;单片机;时钟芯片;温度芯片;公历转农历 The Design of Electronic Calendar clock Based on Single-chip Microcomputer Abstract Along with the technical fast development, time passing, to from the view sun, the pendulum clock to the present electron clock, the humanity studies unceasingly, innovates unceasingly the record. At present, the monolithic integrated circuit technology's application product already entered everyone. The electronic ten thousand calendar's appearances have brought conveniently many for people's life. This design is one based on AT89S52 single-chip microcomputer calendar display system, it can demonstrate years, the month, the date of the Gregorian calendar, and hour, minute, second, temperature, week and so on. Moreover it has also provided the lunar calendar information, adjustable time pattern, temperature sample, alarm system, individual quarter-bell and so on. The system clock calendar DS1302 with high performance, low power consumption and simple interface features Circuit enable the system to streamline programming convenience, but also highly functional. The problems of inaccurate, unreliable, and the uniform inferior can be come up when you use the analogous circuit. However, it can be improved when you use the clock system based on AT89S52 single-chip microcomputer. The system time accurate, low cost and can be widely applied to the life, study and work in any field, and has played an important role. Key words:The Electronic Calendar Clock;Single-chip Microcomputer;The Time Calendar Clock;Temperature Chip;The Lunar Calendar Convert To The Gregorian Calendar 目 录 I摘 要 IIAbstract 1第一章 引 言 11.1 概述 11.2 单片机的简介 4第二章 方案设计与论证 42.1 单片机芯片设计与论证 52.2 电源模块设计与论证 52.3 按键控制模块设计与论证 52.4 时钟模块设计与论证 52.5 温度采集模块设计与论证 62.6 显示模块模块设计与论证 7第三章 系统的硬件设计 73.1 主控芯片AT89S52与最小外围系统 73.1.1 AT89S52的概述 103.1.2 AT89S52最小系统的设计 113.2 时钟芯片DS1302接口设计与性能分析 113.2.1 DS1302性能简介 123.2.2 DS1302接口电路设计 143.3 温度芯片DS18B20接口设计与性能分析 143.3.1 DS18B20性能简介 153.3.2 DS18B20接口电路设计 163.3.3 DS18B20的工作时序 173.4 闹钟模块接口设计与性能分析 173.4.1 AT24C02器件使用 193.4.2 接口电路设计 193.5 LCD显示模块 193.5.1 LCM1602的特性及使用说明 213.5.2 LCM1602与MCU的接口电路 213.6 按键模块设计 23第四章 软件设计 234.1 软件总体部分的设计 244.2 LCD驱动及液晶显示 254.3 按键识别及处理 264.4 温度数据采集 274.5 时间数据采集 284.6 闹钟程序 284.7 公历转农历的实现 30第五章 系统的调试 31总结 32参考文献 33附录A 设计原理图 34附录B 源程序 55附录C 公历对应的农历数据表 58致谢 第1章 引 言 1.1 概述 随着电子技术的发展,人类不断研究,不断创新纪录。万年历目前已经不再局限于以书本形式出现。以电脑软件或者电子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用,采用电子时钟作为时间显示已经成为一种时尚。目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。 本文提出了一种基于AT89S52单片机的万年历 设计方案 关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案 ,利采用一个LCD显示。本方案以AT89S52单片机作为主控核心,与时钟芯片DS1302、温度芯片DS18B20、闹钟模块、按键、LCD显示等模块组成硬件系统。在硬件系统中设有5个独立按键和一个LCD显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间、温度显示、是否为闰年等,综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2 单片机的简介 单片机是一种集成电路芯片。它采用超大规模技术将具有数据处理能力的微处理器(CPU)、存储器(含程序存储器ROM和数据存储器RAM)、输入、输出接口电路(I/O接口)集成在同一块芯片上,构成一个即小巧又很完善的计算机硬件系统,在单片机程序的控制下能准确、迅速、高效地完成程序设计者事先规定的任务。所以说,一片单片机芯片就具有了组成计算机的全部功能。 然而单片机又不同于单板机(一种将微处理器芯片、存储器芯片、输入输出接口芯片安装在同一块印制电路板上的微型计算机),单片机芯片在没有开发前,它只是具备功能极强的超大规模集成电路,如果对它进行应用开发,它便是一个小型的微型计算机控制系统,但它与单板机或个人电脑(PC机)有着本质的区别。 不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等等。开发支持的环境包括指令的兼容及可移植性,支持软件(包含可支持开发应用程序的软件资源)及硬件资源。要利用某型号单片机开发自己的应用系统,掌握其结构特征和技术特征是必须的。 单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。 诚然,单片机的应用意义远不限于它的应用范畴或由此带来的经济效益,更重要的是它已从根本上改变了传统的控制方法和设计思想。是控制技术的一次革命,是一座重要的里程碑。 1946年第一台电子计算机诞生至今,依靠微电子技术和半导体技术的进步,从电子管——晶体管——集成电路——大规模集成电路,使得计算机体积更小,功能更强。特别是近20年时间里,计算机技术获得飞速的发展,计算机在工农业,科研,教育,国防和航空航天领域获得了广泛的应用,计算机技术已经是一个国家现代科技水平的重要标志。 单片机诞生于20世纪70年代,象Fairchild公司研制的F8单片微型计算机。所谓单片机是利用大规模集成电路技术把中央处理单元(Center Processing Unit,也即常称的CPU)和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,而现代的单片机则加上了中断单元,定时单元及A/D转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛。 20世纪70年代,微电子技术正处于发展阶段,集成电路属于中规模发展时期,各种新材料新工艺尚未成熟,单片机仍处在初级的发展阶段,元件集成规模还比较小,功能比较简单,一般均把CPU、RAM有的还包括了一些简单的I/O口集成到芯片上,象Fairchild公司就属于这一类型,它还需配上外围的其他处理电路方才构成完整的计算系统。类似的单片机还有Zilog公司的Z80微处理器。 1976年INTEL公司推出了MCS-48单片机,这个时期的单片机才是真正的8位单片微型计算机,并推向市场。它以体积小,功能全,价格低赢得了广泛的应用,为单片机的发展奠定了基础,成为单片机发展史上重要的里程碑。 在MCS-48的带领下,其后,各大半导体公司相继研制和发展了自己的单片机,象Zilog公司的Z8系列。到了80年代初,单片机已发展到了高性能阶段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列,Rokwell公司的6501及6502系列等等,此外,日本的著名电气公司NEC和HITACHI都相继开发了具有自己特色的专用单片机。 80年代,世界各大公司均竞相研制出品种多功能强的单片机,约有几十个系列,300多个品种,此时的单片机均属于真正的单片化,大多集成了CPU、RAM、ROM、数目繁多的I/O接口、多种中断系统,甚至还有一些带A/D转换器的单片机,功能越来越强大,RAM和ROM的容量也越来越大,寻址空间甚至可达64kB,可以说,单片机发展到了一个新的平台。 第2章 方案设计与论证 按照系统设计的要求,初步确定系统由电源模块、时钟模块、显示模块、键盘接口模块、温度测量模块和闹钟模块共六个模块组成,电路系统构成框图如图2.1所示。 图2.1 硬件电路框图 2.1 单片机芯片设计与论证 方案一: 采用AT89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低电压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用AT89S52芯片作为硬件核心,采用Flash ROM,能以3V的超低电压工作,而且与MCS-51系列单片机完全兼容,该芯片内部存储器为8KB ROM 存储空间。同样具有AT89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 综合考虑,采用AT89S52作为主控芯片。 2.2 电源模块设计与论证 方案一:采用市电经变压器降压成5V电源,为MCU及外部电路提供电源,能提供较为稳定的电压及足够的功率,制作简单,成本较高、笨重,不利于便携设备携带。 方案二:采用9V干电池经LDO稳压成5V电源为系统提供电源,携带方便,价格便宜。 考虑系统为一个便携式用品,方案一不便于携带,故采用方案二。 2.3 按键控制模块设计与论证 方案一:采用矩阵键盘,由于按键多可实现数值的直接键入,但在系统中需要CPU不间断的对其端口扫描。 方案二:采用独立按键,查询简单,程序处理简单,可节省CPU资源。 因系统中所需按键不多,为了释放更多的CPU占有时间,故采用方案二。 2.4 时钟模块设计与论证 方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。 方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA. 综合考虑制作难度及精度,故采用方案二。 2.5 温度采集模块设计与论证 方案一:采用温度传感器(如热敏电阻或AD590),再经AD转换得到数字信号,精度较准,但价格昂贵,电路较复杂。 方案二:采用数字式温度传感器DS18B20,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式,但准确度不高,误差最大达2度。 综合考虑,采用方案二,用DS18B20温度芯片,采用单总线访问,降低成本、降低制作难度且可节省单片机宝贵的GPIO资源。 2.6 显示模块模块设计与论证 方案一:采用静态显示方法,静态显示模块的硬件制作较复杂及功耗大,要用到多个移位寄存器,但不占用端口,只需两根串口线输出。 方案二:采用动态显示方法,动态显示模块的硬件制作简单,段扫描和位扫描各占用一个端口,总需占用单片机14个端口,采用间断扫描法功耗小、硬件成本低及整个硬件系统体积相对减小。 方案三:采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,LCM1602可显示32个字符,采用LCD的缺点是亮度不够。 比较以上三种方案:方案一硬件复杂体积大、功耗大;方案二硬件简单、功耗小;方案三硬件简单,显示内容多,功耗小,成本低等。本系统设计要求达到功耗小、体积小、成本低,显示信息多等要求,权衡三种方案,选择方案三。 第3章 系统的硬件设计 3.1 主控芯片AT89S52与最小外围系统 3.1.1 AT89S52的概述 1、AT89S52的主要性能 AT89S52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复檫写的程序存储器和256字节数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89S52单片机可灵活应用于各种控制领域。AT89S52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。单片机正常工作时,都需要有一个时钟电路和一个复位电路。本设计中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。复位是单片机的初始化操作,单片机在启动运行时,都需要先复位,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路来实现。其主要工作特性是: · 8k字节可编程Flash存储器 · 八个中断源 · 与MCS-51单片机产品兼容 · 全静态操作:0Hz~33Hz · 三级加密程序存储器 · 32个可编程I/O 口线 · 三个16 位定时器/计数器 · 全双工UART串行通道 · 低功耗空闲和掉电模式 · 掉电后中断可唤醒 · 看门狗定时器 · 双数据指针 · 1000次擦写周期 · 掉电标识符 2、AT89S52的引脚说明 AT89S52有40个引脚,如图3.1所示: 3.1 AT89S52芯片 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触发输入(P1.1/T2EX),具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。 P1口的第二功能如下:   P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出   P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)   P1.5 MOSI(在系统编程用)   P1.6 MISO(在系统编程用)   P1.7 SCK(在系统编程用)   P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR),P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。flash编程和校验时,P3口也接收一些控制信号。 P3口的二功能如下:   P3.0 RXD(串行输入口)   P3.1 TXD(串行输出口)   P3.2 INTO(外中断0)   P3.3 INT1(外中断1)   P3.4 TO(定时/计数器0)   P3.5 T1(定时/计数器1)   P3.6 WR(外部数据存储器写选通)   P3.7 RD(外部数据存储器读选通)   此外,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则执行内部程序存储器的指令。 3.1.2 AT89S52最小系统的设计 根据系统设计要求,结合性能分析,通过查阅相关资料及自己的努力思考,把单片机最小系统设计为图: 图3.2单片机最小系统 此设计中P0口做为输出口用来驱动LCD显示,而P0口内部又没有上拉电阻,所以加上10K上拉电阻。 (1) 复位电路 考虑到设计要求,本设计中的复位电路集手动复位及上电自动复位于一体。 1)上电自动复位通过外部复位电路的电容C3的充电来实现,只要电源VCC的上升时间不超过1ms,就可以实现自动上电复位。 2)按键手动复位是通过使复位端经电阻与VCC接通而实现的。 (2) 时钟振荡电路 考虑系统运行速度,采用12MHZ的石英晶振,并使用两个小电容作为微调电容,具体设计见图3.2。 3.2 时钟芯片DS1302接口设计与性能分析 3.2.1 DS1302性能简介 DS1302是Dallas公司生产的一种实时时钟芯片。它通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。 DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。因此,其与单片机之间的数据传送是十分容易实现的,DS1302的引脚排列及内部结构图如图3.3: DS1302引脚说明: X1,X2 32.768kHz晶振引脚 GND 地线 RST 复位端 I/O 数据输入/输出端口 SCLK 串行时钟端口 VCC1 慢速充电引脚 VCC2 电源引脚 图3.3 DS1302管脚 3.2.2 DS1302接口电路设计 1、 时钟芯片DS1302的接口电路及工作原理: 图3.4 DS1302与MCU接口电路 图3.4为DS1302的接口电路,其中Vcc1为后备电源,Vcc2为主电源。VCC1在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。VCC2在双电源系统中提供主电源,在这种运用方式中VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。 DS1302由VCC1或VCC2 两者中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图5所示。表-1为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对时间进行读/写时,CK=0,对程序进行读/写时RAM=1。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;进行写操作时,该位为0。控制字节总是从最低位开始输入/输出的。表-2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。 2、DS1302的控制字 DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为1表示进行读操作,为0表示进行写操作。控制字节总是从最低位开始输出。 表1 DS1302的控制字格式 3、数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示。 图3.5 DS1302读/写时序图 4、DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2。 表2 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 3.3 温度芯片DS18B20接口设计与性能分析 3.3.1 DS18B20性能简介 1.DS18B20的主要特性 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。其性能特点可归纳如下: 1) 独特的单线接口仅需要一个端口引脚进行通信; 2) 测温范围在-55℃到125℃,分辨率最大可达0.0625℃; 3) 采用了3线制与单片机相连,减少了外部硬件电路; 4) 零待机功耗; 5) 可通过数据线供电,电压范围在3.0V-5.5V; 6) 用户可定义的非易失性温度报警设置; 7) 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 8) 负电压特性,电源极性接反时,温度计不会因发热烧毁,只是不能正常工作。 2.DS18B20工作原理    DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3.6所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3.6中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图3.6 DS18B20测温原理 3.3.2 DS18B20接口电路设计 如3.7图所示,该系统中采用数字式温度传感器DS18B20,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,用P2.3与DS18B20的DQ口连接,Vcc接电源,GND接地。 图3.7温度传感器DS18B20接口电路 3.3.3 DS18B20的工作时序 1、复位时序图 图3.8复位时序图 2、 读时序图 图3.9读时序图 3、写时序图 图3.10 写时序图 3.4 闹钟模块接口设计与性能分析 此部分硬件上利用AT24C02存储闹钟时间,普通蜂鸣器作为闹铃播放器件。 3.4.1 AT24C02器件使用 1、AT24C02的特性: 1) 与400KHz I2C 总线兼容 2) 到6.0 伏工作电压范围 3) 低功耗CMOS 技术 4) 写保护功能当 WP 为高电平时进入写保护状态 5) 自定时擦写周期 6) 1,000,000 编程/擦除周期 7) 8 脚DIP SOIC 或TSSOP 封装 8) 温度范围商业级工业级和汽车级 2、AT24C02功能说明 AT24C02支持I2C 总线数据传送 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,I2C 总线协议规定任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据,发送或接收的模式通过器件地址输入端A0、A1 和A2 可以实现将最多8个24WC01和24WC02 器件连接到总线上。 管脚描述如下: A0 A1 A2 器件地址选择 SDA 串行数据/地址 SCL 串行时钟 WP 写保护 VCC/VSS +1.8V~6.0/地 图3.11 AT24C02管图 3、工作时序 1)总线时序 图3.12 总线时序 2)写周期时序 图3.12写周期时序 3)起始/停止时序 图3.13 起始/停止时序 4)应答时序 图3.14 应答时序 5)立即地址读时序 图3.15 立即地址读时序 3.4.2 接口电路设计 AT24C02与AT89S52的接口电路如图3.165所示: 3.16 AT24C02与MCU的接口电路 3.5 LCD显示模块 3.5.1 LCM1602的特性及使用说明 1、 LCM1602的接口信号说明如表3: 表3 LCM1602的接口信号 编号 引脚符号 功能说明 编号 引脚符号 功能说明 1 VSS 电源地 9 D2 DATA I/O 2 VDD 电源正极 10 D3 DATA I/O 3 VL 液晶显示偏压信号 11 D4 DATA I/O 4 RS 数据/命令选择端(H/L) 12 D5 DATA I/O 5 R/W 读/写选择端(H/L) 13 D6 DATA I/O 6 E 使能信号 14 D7 DATA I/O 7 D0 DATA I/O 15 BLA 背光正极 8 D1 DATA I/O 16 BLK 背光负极 2、基本操作时序如下: 1)读状态:RS=L,RW=H,E=H 2)写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲 3)读数据:RS=H,RW=H,E=H 4)写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲 3、初始化设置 1)显示模式设置如表4: 表4显示模式设置 2)显示开/关及光标设置如表5: 表5 显示开/关及光标设置 3.5.2 LCM1602与MCU的接口电路 接口电路如图3.16所示: 图3.16 LCM1602与单片机接口电路 LCD的D0~D7分别接单片机的的P0口,作为数据线,因为P0口内部没有上拉电阻,所以外部另外加上10K的上拉电阻;P2.0—P2.2分别接LCD的RS、RW、E三个控制管脚;RV1用来调节LCD的显示灰度;BLK、BLA为背光的阴极和阳极,接上相应电平即点亮背光灯(图中未画出)。 3.6 按键模块设计 本系统用到了5个按键,其中一个用作系统手动复位,另外4个采用独立按键,该种接法查询简单,程序处理简单,可节省CPU资源,按键电路如图3.17所示,4个独立按键分别与AT89S52的P2.4、P2.5、P2.6、P2.7接口相连。 图3.17 按键电路 对以上4个按键作简要说明:S2——SET 键,S3——UP键,S4——DOWN键,S5——OUT/STOP键。 SET 键:按下SET键进入时间校准状态,按一下进入秒调整,两下分调整,依此类推可进行各年月日,时分秒以及星期的校准; UP键:当SET键按下时,UP进行SET选定项(如:小时)的加操作; DOWN键:当SET键按下时,DOWN进行SET选定项(如:小时)的减操作; OUT/STOP键: 1) 当SET键按下时,此键功能为退出校准功能; 2) 当SET键未按下时,UP关闭闹钟。 第4章 软件设计 整个软件系统采用C51编程,主要实现以下功能: 1) LCD的驱动 2) 时间数据的采集 3) 公历转农历的实现 4) 闹铃的设置 5) 温度的采集 6) 按键的识别处理 4.1 软件总体部分的设计 程序从main()函数开始运行,随后对LCD、DS18B20、DS1302、闹钟模块等器件进行初始化操作并对标志位赋初值,随后进入while(1)循环中运行按键扫描程序及液晶显示程序,详细程序见附录C。 (1)主程序流程图如图4.1所示: 图4.1 主函数流程图 (2)系统中的数据结构 考虑到系统中的时间信息是一个整体,为了便于管理,故采用C语言中的结构体变量,定义如下: typedef struct __SYSTEMTIME__ { unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString[11]; unsigned char TimeString[9]; }SYSTEMTIME; //定义的时间类型 SYSTEMTIME CurrentTime;//定义当前时间结构变量 4.2 LCD驱动及液晶显示 1、LCD驱动 LCD的驱动包括初始化操作、写指令、写数据、显示模块的设定等操作。LCM1602有以下几个基本时序: 1)读状态:RS=L,RW=H,E=H 2)写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲 3)读数据:RS=H,RW=H,E=H 4)写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲 驱动函数是根据这几个基本时序来完成的,下面是LCD的几个主要驱动函数(详细见附录): 1)LCD_Write() **功能:LCD写指令/数据 2)LCD_Initial() **功能:LCD初始化 3)GotoXY(unsigned char x, unsigned char y)**功能:字符显示的位置 4)Print(unsigned char *str) **功能:输出字符串到LCD 2、液晶显示模块流程图,如图4.2所示: 图4.2液晶显示模块流程图 4.3 按键识别及处理 本设计中按键采用查询法识别按键,程序简单。本系统中含有四个调整按键,分别命名为SET、UP、DOWN、OUT/STOP。在主函数里面查询SET、OUT/STOP两个按键是否按下,UP、DOWN键的功能由SET键激活。这样设计可以减少CPU的工作量,OUT/STOP为多功能键,当SET键未被按下时,OUT/STOP为响铃停止功能, SET按下时OUT/STOP为退出调整模式的功能被激活。下面简单介绍本设计中键盘扫描程序(以伪代码的形式),详细见附录B中程序清单: /******************************************************************** **键盘程序C语言伪代码 **用伪代码的形式,比程序框图更加直观,可以更加清晰地明确编程思路 **详细程序请参见附录C中的程序清单 ********************************************************************/ Main() {…… //其它程序 while(1) { while(done==1) //模式标志位为1,即为调整模式 keydone(); //进入调整模式,在此激活UP、DOWN、OUT键的功能 //在这个函数中如果OUT被按下时,修改done=0 while(done==0) //模式标志位为0,即为非调整模式 { …… //其它程序 Setkey(); //扫描SET、OUT/STOP //在这个函数中如果SET被按下时,修改done=1 } } } 4.4 温度数据采集 由于DS18B20单线通信功能为分时完成,有严格的时隙概念,因此读\写时序很重要[12]。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)——发ROM功能命令——发存储操作命令——处理数据。 根据单总线操作协议,首先要对DS18B20进行初始化,而初始化有严格的时序控制,如图3.6所示,即总线控制器(TX)发出一个复位脉冲(至少480us的低电平),然后释放总线进入接收状态,总线由5.1K上拉电阻上拉为高电平,探测到I/O引脚上的上升沿后,DS18B20等待15us~60us后,然后发出一个存在脉冲(60us~240us的低电平信号)。下面是几个驱动函数: 1)Init_DS18B20(void) **功能:DS18B20初始化 2)ReadTemp(void) **功能:读取温度值 温度采集模块流程图如图4.3所示: 图4.3温度采集模块流程图 4.5 时间数据采集 串行时钟芯片DS1302的主要组成部分:移位寄存器、控制逻辑、振荡器、实时时钟以及RAM。为了初始化任何的数据传送,把RST置为高电平且把提供地址和命令信息的8位装入到移位寄存器。数据在SCLK的上升沿串行输入。无论是发生读周期还是写周期,也无论传送方式是单字节传送还是多字节传送,开始8位指定40个字节中的那个将被访问。在开始8个时钟周期把命令字装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加最大可达248的数。 DS1302时钟部分子程序主要涉及以下几个主要函数: 1)void DS1302InputByte(unsigned char d) **功能:实时时钟写入一字节(内部函数) 2)unsigned char DS1302OutputByte(void) **功能:实时时钟读取一字节(内部函数 3)Write1302() **功能:DS1302写入数据函数 4)Read1302() **功能:读取DS1302某地址的数 5)void DS1302_GetTime(SYSTEMTIME *Time) **功能:获取时钟芯片的时钟数据到自定义的结构型数组 4.6 闹钟程序 这一部分的实现是采用E2PROM存储器来储存闹钟信息,因为它具有掉电仍能保存数据的特性。所以本设计中把闹钟信息写先写入AT24C02存储器中,然后在程序中读出数据与当前时间进行比较,如果相等则发出闹钟警告。如果要对闹钟值进行修改,可通过几个按键进行,系统能根据用户的设定自动更新闹钟信息,图4.4是闹钟程序的流程图: 图4.4闹钟程序的流程图 4.7 公历转农历的实现 本设计实现通过公历日期计算得到农历日。实现公历转农历一般采用查表法,日查表法是速度最快的一种方法,但51单片机的寻址能力有限,除日查表法外,我们还可以用月查表法和年查表法。最大限度的减小表格所占的程序空间。 对于农历来说,大月为30天,小月为29天,这是固定不变的,这样我们就用1个BIT来表示大小月信息。农历一年,如有闰月为13个月,否则是12个月,所以一年需要13个BIT。闰月在农历中所在的月份并不固定,大部分闰月分布在农历2-8月,但也有少量年份在9月以后,所以要表示闰月的信息,至少要4BIT,在这里我们用4BIT的值来表示闰月的月份,值为0表示本年没有闰月。有了以上信息,还不足以判断公历日对应的农历日,因为还需要一个参照日,我们选用农历正月初一所对的公历日期作参照日,公历日最大为31日,需要5BIT来表示。春节所在的月份不是1月就是2月,用1BIT就够了,考虑到表达方便,我们用2BIT来表示春节月,2BIT的值直接表示月份。这样一年农历信息只用3个字节就全部包括了。 计算公历日对应的农历日期的方法:先计算出公历日离当年元旦的天数,然后查表取得当年春节日期,计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数,以后只要根据大小月及闰月信息,减一月天数,调整农历月份,即可推算出公历日所对应的农历日期。如公历日不到春节日期,农历年比公历年小一年,农历大小月取前一年的信息,农历月从12月向前推算。 根据以上原理及算法,得到如图4.5所示的农历算法程序流程图: 图4.7 公历转农历算法流程图 第5章 系统的调试 调试分为硬件调试和软件调试。 硬件调试主要是检查线路板的焊接是否正确、连接是否正确,各模块之间的数据线是否导通。 软件调试主要有以下两种方法: 1) 将整个联合起来调试,对整个软件的功能进行验证; 2)分开调试,也就是将系统分成独立的小模块,然后分别对这些小模块写入程序调试。这样可以提高调试效率,也容易解决调试中出现的问题。 本系统采用分开调试方法调试了DS18B20和DS1302两个模块,并用LCD显示出了温度以及公历日期、时间,同时也实现了按键的简单调整;但整体调试的时候没有达到预期效果。 总结 论文首先对本设计作了简要描述,随后提出了不同的设计方案,经过论证最后确定该设计采用电源模块、时钟模块、显示模块、键盘接口模块、温度测量模块和闹钟模块共六个模块组成,接着分别从硬件系统和软件系统两方面对基于单片机的电子万年历设计作了详细论述,另外还简要介绍了一下系统的调试。 在整个设计过程中,硬件方面主要设计了AT89S52单片机的最小系统、DS1302接口电路、DS18B20接口电路、闹钟及LCD显示;软件方面借助各个渠道的资料,主要设计了阳历数据读取程序、阳历转阴历程序、温度采集程序、闹铃程序以及LCD显示程序;系统的调试主要是通过一块AT89S52开发板,再借助于Keil、STC以及少许自己搭建的外围电路实现的;再此过程中,分步调试时显示出了阳历的日期及时间,还有实时温度,集中调试时没有达到预期效果。但在此过程中培养了自己的动手能力。 此万年历具有读显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 参考文献 1.张萌.单片机应用系统开发综合实例[M]. 北京:清华大学出版社,2007.7 2.楼然苗.单片机课程设计指导[M]. 北京:北京航空航天大学出版社,2007.7 3.沈德金.MCS-51系列单片机接口电路与应用程序实例[M]. 北京:北京航空航天大学出版社,1991.4 4.朱思荣.51单片机实现公历与农历、星期的转换[Z].当当电子网 5.AT24WC01/02/04/08/16 1K/2K/4K/8K/16K 位串行E2PROM[D].广州周立功单片机有限公司 6.DS1302 Trickle Charge Timekeeping Chip datasheet[D] 7.马忠梅,籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社, 2001年 8.陈明荧. 8051单片机课程设计实训教程[M].北京:清华大学出版社 9.何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003年 10.新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.2 11. 李广弟. 单片机原理及应用[M] 北京航空航天大学出版社,2004年 12.王越明.电子万年历的设计[J].黑龙江科技信息,2004年 13.SCM1602 LCM 使用说明书[DB]长沙:长沙太阳人电子有限公司 14.赵亮. 单片机C语言编程与实例[M] 人民邮电出版社,2003年 15.http://www.mcu51.com 16.http://www.cnki.net 17.http://www.2lic.com 附录A 设计原理图 附录B 源程序 #include #include #define uint unsigned int #define uchar unsigned char sbit DS1302_CLK = P1^2; //实时时钟时钟线引脚 sbit DS1302_IO = P1^1; //实时时钟数据线引脚 sbit DS1302_RST = P1^0; //实时时钟复位线引 sbit AT24C02_WP = P1^4; sbit AT24C02_SCL = P1^5; sbit AT24C02_SDA = P1^6; sbit DS18B20_DQ = P2^3; sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数 sbit Set = P2^4; //模式切换键 sbit Up = P2^5; //加法按钮 sbit Down = P2^6; //减法按钮 sbit out = P2^7; //立刻跳出调整模式按钮 char done,count,temp,flag,up_flag,down_flag; uchar TempBuffer[5],week_value[2]; void show_time(); //液晶显示程序 /***********1602液晶显示部分子程序****************/ sbit LcdRs = P2^0; sbit LcdRw = P2^1; sbit LcdEn = P2^0; sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0. 数据端口 //内部等待函数 unsigned char LCD_Wait(void) { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); LcdEn=0; return DBPort; } //向LCD写入命令或数据 #define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏 #define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) { LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 LcdEn=0; _nop_(); LCD_Wait(); } //设置显示模式************************************************************ #define LCD_SHOW 0x04 //显示开 #define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标 #define LCD_NO_CURSOR 0x00 //无光标 #define LCD_FLASH 0x01 //光标闪动 #define LCD_NO_FLASH 0x00 //光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND, 0x08|DisplayMode); } //设置输入模式************************************************************ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 // default #define LCD_MOVE 0x01 // 画面可平移 #define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) { LCD_Write(LCD_COMMAND, 0x04|InputMode); } void LCD_Initial() { LcdEn=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 } //液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } //将字符输出到液晶显示 void Print(unsigned char *str) { while(*str!='\0') { LCD_Write(LCD_DATA,*str); str++; } } /***********DS1302时钟部分子程序******************/ typedef struct __SYSTEMTIME__ { unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString[11]; unsigned char TimeString[9]; }SYSTEMTIME; ///////////////////////////////////////////////////////////////////////////////定义的时间类型 SYSTEMTIME CurrentTime; #define AM(X) X #define PM(X) (X+12) // 转成24小时制 #define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY 0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C void DS1302InputByte(unsigned char d) /////////////////////////实时时钟写入一字节(内部函数) { unsigned char i; ACC = d; for(i=8; i>0; i--) { DS1302_IO = ACC0; //相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } } unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--) { ACC = ACC >>1; //相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; } return(ACC); } void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据 { DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); // 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; } unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据 { unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); } void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组 { unsigned char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MINUTE); Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK); Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); } /*****************计算当前日期离元旦的天数**************/ unsigned int DaytoNewYear(SYSTEMTIME *time) { unsigned char Mont,Date; unsigned int Yea; int Date1=0,Date2=0; unsigned char i; Yea=(time->Year)+2000; Mont=time->Month; Date=time->Day; if(((Yea%4)||(Yea%100))) Mon[1]=29; i=Mont; while(i-1) { --i; Date1=Date1+Mon[i-1]; } Date1=Date1+Date-1; return Date1; } /*****************查表取得当年春节日期**************/ unsigned char FestYear,FestMonth,FestDay; unsigned char OldYear,OldMonth,OldDay; void GetSprFestDate(SYSTEMTIME *time) { unsigned char i=0; i=Table[(time->Year+2000-1901)*3+2];/* 取第三字节 */ FestYear=time->Year; FestMonth=(i&0x60)>>5; FestDay=i&0x1f; } /*****************计算出春节离元旦的天数**************/ unsigned char Days() { unsigned char Date=0; if(FestMonth==2) Date=31+FestDay-1; else Date=FestDay-1; return Date; } /**********************计算农历***********************/ void OldCal(SYSTEMTIME *time) { int i,k; unsigned char j,m,DoubleMonth; GetSprFestDate(&CurrentTime); i=DaytoNewYear(&CurrentTime); j=Days(); k=i-j+1; for(m=0;m<=3;m++)/* 计算出当年农历大小月表,大月则为三十天,小月二十九天 */ { if((Table[(time->Year+2000-1901)*3]<Year+2000-1901)*3+1]<<(m-4))&0x80) OldMon[m]=30; } m=0; j=0; if(Table[(time->Year+2000-1901)*3+2]&0x80) OldMon[12]=30; if(Table[(time->Year+2000-1901)*3]&0xf0) DoubleMonth=(Table[(time->Year+2000-1901)*3]&0xf0)>>4;/* 闰月月份 */ do { if((DoubleMonth==m)&&(DoubleMonth!=0)) { j++; if(j<2) m=m;//如果有闰月则重复一次月份 else m++; } else m++; OldMonth=m; OldDay=k; k=k-OldMon[m-1]; }while(k>0); OldYear=time->Year; } void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[] { if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22 { Time->DateString[0] = '2'; Time->DateString[1] = '0'; Time->DateString[2] = Time->Year/10 + '0'; Time->DateString[3] = Time->Year%10 + '0'; } else { Time->DateString[0] = ' '; Time->DateString[1] = ' '; Time->DateString[2] = ' '; Time->DateString[3] = ' '; } Time->DateString[4] = '/'; if(hide_month<2) { Time->DateString[5] = Time->Month/10 + '0'; Time->DateString[6] = Time->Month%10 + '0'; } else { Time->DateString[5] = ' '; Time->DateString[6] = ' '; } Time->DateString[7] = '/'; if(hide_day<2) { Time->DateString[8] = Time->Day/10 + '0'; Time->DateString[9] = Time->Day%10 + '0'; } else { Time->DateString[8] = ' '; Time->DateString[9] = ' '; } if(hide_week<2) { week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示 } else { week_value[0] = ' '; } week_value[1] = '\0'; Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符 } void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[]; { if(hide_hour<2) { Time->TimeString[0] = Time->Hour/10 + '0'; Time->TimeString[1] = Time->Hour%10 + '0'; } else { Time->TimeString[0] = ' '; Time->TimeString[1] = ' '; } Time->TimeString[2] = ':'; if(hide_min<2) { Time->TimeString[3] = Time->Minute/10 + '0'; Time->TimeString[4] = Time->Minute%10 + '0'; } else { Time->TimeString[3] = ' '; Time->TimeString[4] = ' '; } Time->TimeString[5] = ':'; if(hide_sec<2) { Time->TimeString[6] = Time->Second/10 + '0'; Time->TimeString[7] = Time->Second%10 + '0'; } else { Time->TimeString[6] = ' '; Time->TimeString[7] = ' '; } Time->DateString[8] = '\0'; } void Initial_DS1302(void) //时钟芯片初始化 { unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) //判断时钟芯片是否关闭 { Write1302(0x8e,0x00); //写入允许 Write1302(0x8c,0x07); //以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x07); Write1302(0x86,0x25); Write1302(0x8a,0x07); Write1302(0x84,0x23); Write1302(0x82,0x59); Write1302(0x80,0x55); Write1302(0x8e,0x80); //禁止写入 } } void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i0;delay--) {for(i=0;i<62;i++) //1ms延时. {;} } } void outkey() //跳出调整模式,返回默认显示 { uchar Second; if(out==0) { mdelay(8); count=0; hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0; Second=Read1302(DS1302_SECOND); Write1302(0x8e,0x00); //写入允许 Write1302(0x80,Second&0x7f); Write1302(0x8E,0x80); //禁止写入 done=0; while(out==0); } } void Upkey()//升序按键 { Up=1; if(Up==0) { mdelay(8); switch(count) {case 1: temp=Read1302(DS1302_SECOND); //读取秒数 temp=temp+1; //秒数加1 up_flag=1; //数据调整后更新标志 if((temp&0x7f)>0x59) //超过59秒,清零 temp=0; break; case 2: temp=Read1302(DS1302_MINUTE); //读取分数 temp=temp+1; //分数加1 up_flag=1; if(temp>0x59) //超过59分,清零 temp=0; break; case 3: temp=Read1302(DS1302_HOUR); //读取小时数 temp=temp+1; //小时数加1 up_flag=1; if(temp>0x23) //超过23小时,清零 temp=0; break; case 4: temp=Read1302(DS1302_WEEK); //读取星期数 temp=temp+1; //星期数加1 up_flag=1; if(temp>0x7) temp=1; break; case 5: temp=Read1302(DS1302_DAY); //读取日数 temp=temp+1; //日数加1 up_flag=1; if(temp>0x31) temp=1; break; case 6: temp=Read1302(DS1302_MONTH); //读取月数 temp=temp+1; //月数加1 up_flag=1; if(temp>0x12) temp=1; break; case 7: temp=Read1302(DS1302_YEAR); //读取年数 temp=temp+1; //年数加1 up_flag=1; if(temp>0x85) temp=0; break; default:break; } while(Up==0); } } void Downkey()//降序按键 { Down=1; if(Down==0) { mdelay(8); switch(count) {case 1: temp=Read1302(DS1302_SECOND); //读取秒数 temp=temp-1; //秒数减1 down_flag=1; //数据调整后更新标志 if(temp==0x7f) //小于0秒,返回59秒 temp=0x59; break; case 2: temp=Read1302(DS1302_MINUTE); //读取分数 temp=temp-1; //分数减1 down_flag=1; if(temp==-1) temp=0x59; //小于0秒,返回59秒 break; case 3: temp=Read1302(DS1302_HOUR); //读取小时数 temp=temp-1; //小时数减1 down_flag=1; if(temp==-1) temp=0x23; break; case 4: temp=Read1302(DS1302_WEEK); //读取星期数 temp=temp-1; //星期数减1 down_flag=1; if(temp==0) temp=0x7;; break; case 5: temp=Read1302(DS1302_DAY); //读取日数 temp=temp-1; //日数减1 down_flag=1; if(temp==0) temp=31; break; case 6: temp=Read1302(DS1302_MONTH); //读取月数 temp=temp-1; //月数减1 down_flag=1; if(temp==0) temp=12; break; case 7: temp=Read1302(DS1302_YEAR); //读取年数 temp=temp-1; //年数减1 down_flag=1; if(temp==-1) temp=0x85; break; default:break; } while(Down==0); } } void Setkey() //模式选择按键 { Set=1; if(Set==0) { mdelay(8); count=count+1; //Setkey按一次,count就加1 done=1; //进入调整模式 while(Set==0); } } void keydone() //按键功能执行 { uchar Second; if(flag==0) //关闭时钟,停止计时 { Write1302(0x8e,0x00); //写入允许 temp=Read1302(0x80); Write1302(0x80,temp|0x80); Write1302(0x8e,0x80); //禁止写入 flag=1; } Setkey(); //扫描模式切换按键 switch(count) {case 1:do //count=1,调整秒 { outkey(); //扫描跳出按钮 Upkey(); //扫描加按钮 Downkey(); //扫描减按钮 if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据 { Write1302(0x8e,0x00); //写入允许 Write1302(0x80,temp|0x80); //写入新的秒数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_sec++; //位闪计数 if(hide_sec>3) hide_sec=0; show_time(); //液晶显示数据 }while(count==2);break; case 2:do //count=2,调整分 { hide_sec=0; outkey(); Upkey(); Downkey(); if(temp>0x60) temp=0; if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x82,temp); //写入新的分数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_min++; if(hide_min>3) hide_min=0; show_time(); }while(count==3);break; case 3:do //count=3,调整小时 { hide_min=0; outkey(); Upkey(); Downkey(); if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x84,temp); //写入新的小时数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_hour++; if(hide_hour>3) hide_hour=0; show_time(); }while(count==4);break; case 4:do //count=4,调整星期 { hide_hour=0; outkey(); Upkey(); Downkey(); if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x8a,temp); //写入新的星期数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_week++; if(hide_week>3) hide_week=0; show_time(); }while(count==5);break; case 5:do //count=5,调整日 { hide_week=0; outkey(); Upkey(); Downkey(); if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x86,temp); //写入新的日数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_day++; if(hide_day>3) hide_day=0; show_time(); }while(count==6);break; case 6:do //count=6,调整月 { hide_day=0; outkey(); Upkey(); Downkey(); if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x88,temp); //写入新的月数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_month++; if(hide_month>3) hide_month=0; show_time(); }while(count==7);break; case 7:do //count=7,调整年 { hide_month=0; outkey(); Upkey(); Downkey(); if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x8c,temp); //写入新的年数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_year++; if(hide_year>3) hide_year=0; show_time(); }while(count==8);break; case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态 Second=Read1302(DS1302_SECOND); Write1302(0x8e,0x00); //写入允许 Write1302(0x80,Second&0x7f); Write1302(0x8E,0x80); //禁止写入 done=0; break; //count=7,开启中断,标志位置0并退出 default:break; } } void show_time() //液晶显示程序 { DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据 TimeToStr(&CurrentTime); //时间数据转换液晶字符 DateToStr(&CurrentTime); //日期数据转换液晶字符 GotoXY(12,1); //液晶字符显示位置 GotoXY(0,1); Print(CurrentTime.TimeString); //显示时间 GotoXY(0,0); Print(CurrentTime.DateString); //显示日期 GotoXY(15,0); Print(week_value); //显示星期 GotoXY(11,0); Print("Week"); //在液晶上显示 字母 week Delay1ms(400); //扫描延时 } //*********************闹钟程序******************************** void Alarm(void) { if((AlarmTime.Hour==CurrentTime.Hour)&&(AlarmTime.Minute== CurrentTime.Minute)) { P1.7=0; } } main() { flag=1; //时钟停止标志 LCD_Initial(); //液晶初始化 Initial_DS1302(); //时钟芯片初始化 up_flag=0; down_flag=0; done=0; //进入默认液晶显示 while(1) { while(done==1) keydone(); //进入调整模式 while(done==0) { show_time(); //液晶显示数据 flag=0; Setkey(); //扫描各功能键 } } } 附录C 公历对应的农历数据表 公历对应的农历数据,每年三字节,格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小,第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小,月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天),第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期 。 code uchar year_code[597] = { 0x04,0xAe,0x53, //1901 0 0x0A,0x57,0x48, //1902 3 0x55,0x26,0xBd, //1903 6 0x0d,0x26,0x50, //1904 9 0x0d,0x95,0x44, //1905 12 0x46,0xAA,0xB9,//1906 15 0x05,0x6A,0x4d, //1907 18 0x09,0xAd,0x42, //1908 21 0x24,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //1924 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x24,0x97,0xB7, //1928 0x04,0x97,0x4A, //1929 0x66,0x4B,0x3e, //1930 0x0d,0x4A,0x51, //1931 0x0e,0xA5,0x46, //1932 0x56,0xd4,0xBA, //1933 0x05,0xAd,0x4e, //1934 0x02,0xB6,0x44, //1935 0x39,0x37,0x38, //1936 0x09,0x2e,0x4B, //1937 0x7C,0x96,0xBf, //1938 0x0C,0x95,0x53, //1939 0x0d,0x4A,0x48, //1940 0x6d,0xA5,0x3B, //1941 0x0B,0x55,0x4f, //1942 0x05,0x6A,0x45, //1943 0x4A,0xAd,0xB9, //1944 0x02,0x5d,0x4d, //1945 0x09,0x2d,0x42, //1946 0x2C,0x95,0xB6, //1947 0x0A,0x95,0x4A, //1948 0x7B,0x4A,0xBd, //1949 0x06,0xCA,0x51, //1950 0x0B,0x55,0x46, //1951 0x55,0x5A,0xBB, //1952 0x04,0xdA,0x4e, //1953 0x0A,0x5B,0x43, //1954 0x35,0x2B,0xB8, //1955 0x05,0x2B,0x4C, //1956 0x8A,0x95,0x3f, //1957 0x0e,0x95,0x52, //1958 0x06,0xAA,0x48, //1959 0x7A,0xd5,0x3C, //1960 0x0A,0xB5,0x4f, //1961 0x04,0xB6,0x45, //1962 0x4A,0x57,0x39, //1963 0x0A,0x57,0x4d, //1964 0x05,0x26,0x42, //1965 0x3e,0x93,0x35, //1966 0x0d,0x95,0x49, //1967 0x75,0xAA,0xBe, //1968 0x05,0x6A,0x51, //1969 0x09,0x6d,0x46, //1970 0x54,0xAe,0xBB, //1971 0x04,0xAd,0x4f, //1972 0x0A,0x4d,0x43, //1973 0x4d,0x26,0xB7, //1974 0x0d,0x25,0x4B, //1975 0x8d,0x52,0xBf, //1976 0x0B,0x54,0x52, //1977 0x0B,0x6A,0x47, //1978 0x69,0x6d,0x3C, //1979 0x09,0x5B,0x50, //1980 0x04,0x9B,0x45, //1981 0x4A,0x4B,0xB9, //1982 0x0A,0x4B,0x4d, //1983 0xAB,0x25,0xC2, //1984 0x06,0xA5,0x54, //1985 0x06,0xd4,0x49, //1986 0x6A,0xdA,0x3d, //1987 0x0A,0xB6,0x51, //1988 0x09,0x37,0x46, //1989 0x54,0x97,0xBB, //1990 0x04,0x97,0x4f, //1991 0x06,0x4B,0x44, //1992 0x36,0xA5,0x37, //1993 0x0e,0xA5,0x4A, //1994 0x86,0xB2,0xBf, //1995 0x05,0xAC,0x53, //1996 0x0A,0xB6,0x47, //1997 0x59,0x36,0xBC, //1998 0x09,0x2e,0x50, //1999 294 0x0C,0x96,0x45,//2000 297 0x4d,0x4A,0xB8, //2001 0x0d,0x4A,0x4C, //2002 0x0d,0xA5,0x41, //2003 0x25,0xAA,0xB6, //2004 0x05,0x6A,0x49, //2005 0x7A,0xAd,0xBd, //2006 0x02,0x5d,0x52, //2007 0x09,0x2d,0x47, //2008 0x5C,0x95,0xBA, //2009 0x0A,0x95,0x4e, //2010 0x0B,0x4A,0x43, //2011 0x4B,0x55,0x37, //2012 0x0A,0xd5,0x4A, //2013 0x95,0x5A,0xBf, //2014 0x04,0xBA,0x53, //2015 0x0A,0x5B,0x48, //2016 0x65,0x2B,0xBC, //2017 0x05,0x2B,0x50, //2018 0x0A,0x93,0x45, //2019 0x47,0x4A,0xB9, //2020 0x06,0xAA,0x4C, //2021 0x0A,0xd5,0x41, //2022 0x24,0xdA,0xB6, //2023 0x04,0xB6,0x4A, //2024 0x69,0x57,0x3d, //2025 0x0A,0x4e,0x51, //2026 0x0d,0x26,0x46, //2027 0x5e,0x93,0x3A, //2028 0x0d,0x53,0x4d, //2029 0x05,0xAA,0x43, //2030 0x36,0xB5,0x37, //2031 0x09,0x6d,0x4B, //2032 0xB4,0xAe,0xBf, //2033 0x04,0xAd,0x53, //2034 0x0A,0x4d,0x48, //2035 0x6d,0x25,0xBC, //2036 0x0d,0x25,0x4f, //2037 0x0d,0x52,0x44, //2038 0x5d,0xAA,0x38, //2039 0x0B,0x5A,0x4C, //2040 0x05,0x6d,0x41, //2041 0x24,0xAd,0xB6, //2042 0x04,0x9B,0x4A, //2043 0x7A,0x4B,0xBe, //2044 0x0A,0x4B,0x51, //2045 0x0A,0xA5,0x46, //2046 0x5B,0x52,0xBA, //2047 0x06,0xd2,0x4e, //2048 0x0A,0xdA,0x42, //2049 0x35,0x5B,0x37, //2050 0x09,0x37,0x4B, //2051 0x84,0x97,0xC1, //2052 0x04,0x97,0x53, //2053 0x06,0x4B,0x48, //2054 0x66,0xA5,0x3C, //2055 0x0e,0xA5,0x4f, //2056 0x06,0xB2,0x44, //2057 0x4A,0xB6,0x38, //2058 0x0A,0xAe,0x4C, //2059 0x09,0x2e,0x42, //2060 0x3C,0x97,0x35, //2061 0x0C,0x96,0x49, //2062 0x7d,0x4A,0xBd, //2063 0x0d,0x4A,0x51, //2064 0x0d,0xA5,0x45, //2065 0x55,0xAA,0xBA, //2066 0x05,0x6A,0x4e, //2067 0x0A,0x6d,0x43, //2068 0x45,0x2e,0xB7, //2069 0x05,0x2d,0x4B, //2070 0x8A,0x95,0xBf, //2071 0x0A,0x95,0x53, //2072 0x0B,0x4A,0x47, //2073 0x6B,0x55,0x3B, //2074 0x0A,0xd5,0x4f, //2075 0x05,0x5A,0x45, //2076 0x4A,0x5d,0x38, //2077 0x0A,0x5B,0x4C, //2078 0x05,0x2B,0x42, //2079 0x3A,0x93,0xB6, //2080 0x06,0x93,0x49, //2081 0x77,0x29,0xBd, //2082 0x06,0xAA,0x51, //2083 0x0A,0xd5,0x46, //2084 0x54,0xdA,0xBA, //2085 0x04,0xB6,0x4e, //2086 0x0A,0x57,0x43, //2087 0x45,0x27,0x38, //2088 0x0d,0x26,0x4A, //2089 0x8e,0x93,0x3e, //2090 0x0d,0x52,0x52, //2091 0x0d,0xAA,0x47, //2092 0x66,0xB5,0x3B, //2093 0x05,0x6d,0x4f, //2094 0x04,0xAe,0x45, //2095 0x4A,0x4e,0xB9, //2096 0x0A,0x4d,0x4C, //2097 0x0d,0x15,0x41, //2098 0x2d,0x92,0xB5, //2099 }; 致谢 在论文完成之际,我的心情万分激动。从论文的选题、资料的收集到论文的撰写编排整个过程中,我得到了许多的热情帮助。其中无不凝聚着导师的心血和汗水,在此本人深表感谢! 首先特别感谢我的毕业设计指导老师刘月峰老师,从论文的修改到最后的定稿,都凝注了指导老师的心血。导师严谨求实和一丝不苟的学风、扎实勤勉和孜孜不倦的工作态度时刻激励着我努力学习,并将鞭策我在未来的工作中锐意进取、奋发努力。导师的指导将使我终生受益。还要对所有授课老师表示深深的谢意!正是他们的教导,才能使我的知识得以丰富,使我的视野得以拓宽,使我的自身修养得以提高!感谢各位到场老师,是你们在百忙之中抽出时间来对我的论文进行指导,你们的意见和建议将是我一生的财富!感谢所有帮助过我的人们! 感谢我的同学和朋友,在我的论文撰写期间给予我工作和生活上的大力支持和帮助。 最后,再次向所有关心我、帮助我、支持我的人们表示深深的谢意! 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权      大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。   作者签名: 二〇一〇年九月二十日   毕业设计(论文)使用授权声明 本人完全了解**学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定)   作者签名: 二〇一〇年九月二十日 基本要求:写毕业论文主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。毕业论文应反映出作者能够准确地掌握所学的专业基础知识,基本学会综合运用所学知识进行科学研究的方法,对所研究的题目有一定的心得体会,论文题目的范围不宜过宽,一般选择本学科某一重要问题的一个侧面。 毕业论文的基本教学要求是: 1、培养学生综合运用、巩固与扩展所学的基础理论和专业知识,培养学生独立分析、解决实际问题能力、培养学生处理数据和信息的能力。2、培养学生正确的理论联系实际的工作作风,严肃认真的科学态度。3、培养学生进行社会调查研究;文献资料收集、阅读和整理、使用;提出论点、综合论证、总结写作等基本技能。 毕业论文是毕业生总结性的独立作业,是学生运用在校学习的基本知识和基础理论,去分析、解决一两个实际问题的实践锻炼过程,也是学生在校学习期间学习成果的综合性总结,是整个教学活动中不可缺少的重要环节。撰写毕业论文对于培养学生初步的科学研究能力,提高其综合运用所学知识分析问题、解决问题能力有着重要意义。 毕业论文在进行编写的过程中,需要经过开题报告、论文编写、论文上交评定、论文答辩以及论文评分五个过程,其中开题报告是论文进行的最重要的一个过程,也是论文能否进行的一个重要指标。 撰写意义:1.撰写毕业论文是检验学生在校学习成果的重要措施,也是提高教学质量的重要环节。大学生在毕业前都必须完成毕业论文的撰写任务。申请学位必须提交相应的学位论文,经答辩通过后,方可取得学位。可以这么说,毕业论文是结束大学学习生活走向社会的一个中介和桥梁。毕业论文是大学生才华的第一次显露,是向祖国和人民所交的一份有份量的答卷,是投身社会主义现代化建设事业的报到书。一篇毕业论文虽然不能全面地反映出一个人的才华,也不一定能对社会直接带来巨大的效益,对专业产生开拓性的影响。但是,实践证明,撰写毕业论文是提高教学质量的重要环节,是保证出好人才的重要措施。 2.通过撰写毕业论文,提高写作水平是干部队伍“四化”建设的需要。党中央要求,为了适应现代化建设的需要,领导班子成员应当逐步实现“革命化、年轻化、知识化、专业化”。这个“四化”的要求,也包含了对干部写作能力和写作水平的要求。 3.提高大学生的写作水平是社会主义物质文明和精神文明建设的需要。在新的历史时期,无论是提高全族的科学文化水平,掌握现代科技知识和科学管理方法,还是培养社会主义新人,都要求我们的干部具有较高的写作能力。在经济建设中,作为领导人员和机关的办事人员,要写指示、通知、总结、 调查报告 行政管理关于调查报告关于XX公司的财务调查报告关于学校食堂的调查报告关于大米市场调查报告关于水资源调查报告 等应用文;要写说明书、广告、解说词等说明文;还要写科学论文、经济评论等议论文。在当今信息社会中,信息对于加快经济发展速度,取得良好的经济效益发挥着愈来愈大的作用。写作是以语言文字为信号,是传达信息的方式。信息的来源、信息的收集、信息的储存、整理、传播等等都离不开写作。 论文种类:毕业论文是学术论文的一种形式,为了进一步探讨和掌握毕业论文的写作规律和特点,需要对毕业论文进行分类。由于毕业论文本身的内容和性质不同,研究领域、对象、方法、表现方式不同,因此,毕业论文就有不同的分类方法。 按内容性质和研究方法的不同可以把毕业论文分为理论性论文、实验性论文、描述性论文和设计性论文。后三种论文主要是理工科大学生可以选择的论文形式,这里不作介绍。文科大学生一般写的是理论性论文。理论性论文具体又可分成两种:一种是以纯粹的抽象理论为研究对象,研究方法是严密的理论推导和数学运算,有的也涉及实验与观测,用以验证论点的正确性。另一种是以对客观事物和现象的调查、考察所得观测资料以及有关文献资料数据为研究对象,研究方法是对有关资料进行分析、综合、概括、抽象,通过归纳、演绎、类比,提出某种新的理论和新的见解。 按议论的性质不同可以把毕业论文分为立论文和驳论文。立论性的毕业论文是指从正面阐述论证自己的观点和主张。一篇论文侧重于以立论为主,就属于立论性论文。立论文要求论点鲜明,论据充分,论证严密,以理和事实服人。驳论性毕业论文是指通过反驳别人的论点来树立自己的论点和主张。如果毕业论文侧重于以驳论为主,批驳某些错误的观点、见解、理论,就属于驳论性毕业论文。驳论文除按立论文对论点、论据、论证的要求以外,还要求针锋相对,据理力争。 按研究问题的大小不同可以把毕业论文分为宏观论文和微观论文。凡届国家全局性、带有普遍性并对局部工作有一定指导意义的论文,称为宏观论文。它研究的面比较宽广,具有较大范围的影响。反之,研究局部性、具体问题的论文,是微观论文。它对具体工作有指导意义,影响的面窄一些。 另外还有一种综合型的分类方法,即把毕业论文分为专题型、论辩型、综述型和综合型四大类: 1.专题型论文。这是分析前人研究成果的基础上,以直接论述的形式发表见解,从正面提出某学科中某一学术问题的一种论文。如本书第十二章例文中的《浅析领导者突出工作重点的方法与艺术》一文,从正面论述了突出重点的工作方法的意义、方法和原则,它表明了作者对突出工作重点方法的肯定和理解。2.论辩型论文。这是针对他人在某学科中某一学术问题的见解,凭借充分的论据,着重揭露其不足或错误之处,通过论辩形式来发表见解的一种论文。3.综述型论文。这是在归纳、总结前人或今人对某学科中某一学术问题已有研究成果的基础上,加以介绍或评论,从而发表自己见解的一种论文。4.综合型论文。这是一种将综述型和论辩型两种形式有机结合起来写成的一种论文。如《关于中国民族关系史上的几个问题》一文既介绍了研究民族关系史的现状,又提出了几个值得研究的问题。因此,它是一篇综合型的论文。 写作步骤:毕业论文是高等教育自学考试本科专业应考者完成本科阶段学业的最后一个环节,它是应考者的 总结 性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际 问题 的能力。从文体而言,它也是对某一专业领域的现实问题或 理论 问题进行 科学 研究 探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。 首先是选择课题。选题是论文撰写成败的关键。因为,选题是毕业论文撰写的第一步,它实际上就是确定“写什么”的问题,亦即确定科学研究的方向。如果“写什么”不明确,“怎么写”就无从谈起。 教育部自学考试办公室有关对毕业论文选题的途径和要求是“为鼓励理论与工作实践结合,应考者可结合本单位或本人从事的工作提出论文题目,报主考学校审查同意后确立。也可由主考学校公布论文题目,由应考者选择。毕业论文的总体要求应与普通全日制高等学校相一致,做到通过论文写作和答辩考核,检验应考者综合运用专业知识的能力”。但不管考生是自己任意选择课题,还是在主考院校公布的指定课题中选择课题,都要坚持选择有科学价值和现实意义的、切实可行的课题。选好课题是毕业论文成功的一半。 第一、要坚持选择有科学价值和现实意义的课题。科学研究的目的是为了更好地认识世界、改造世界,以推动社会的不断进步和发展 。因此,毕业论文的选题,必须紧密结合社会主义物质文明和精神文明建设的需要,以促进科学事业发展和解决现实存在问题作为出发点和落脚点。选题要符合科学研究的正确方向,要具有新颖性,有创新、有理论价值和现实的指导意义或推动作用,一项毫无意义的研究,即使花很大的精力,表达再完善,也将没有丝毫价值。具体地说,考生可从以下三个方面来选题。首先,要从现实的弊端中选题,学习了专业知识,不能仅停留在书本上和理论上,还要下一番功夫,理论联系实际,用已掌握的专业知识,去寻找和解决工作实践中急待解决的问题。其次,要从寻找科学研究的空白处和边缘领域中选题,科学研究。还有许多没有被开垦的处女地,还有许多缺陷和空白,这些都需要填补。应考者应有独特的眼光和超前的意识去思索,去发现,去研究。最后,要从寻找前人研究的不足处和错误处选题,在前人已提出来的研究课题中,许多虽已有初步的研究成果,但随着社会的不断发展,还有待于丰富、完整和发展,这种补充性或纠正性的研究课题,也是有科学价值和现实指导意义的。 第二、要根据自己的能力选择切实可行的课题。毕业论文的写作是一种创造性劳动,不但要有考生个人的见解和主张,同时还需要具备一定的客观条件。由于考生个人的主观、客观条件都是各不相同的,因此在选题时,还应结合自己的特长、兴趣及所具备的客观条件来选题。具体地说,考生可从以下三个方面来综合考虑。首先,要有充足的资料来源。“巧妇难为无米之炊”,在缺少资料的情况下,是很难写出高质量的论文的。选择一个具有丰富资料来源的课题,对课题深入研究与开展很有帮助。其次,要有浓厚的研究兴趣,选择自己感兴趣的课题,可以激发自己研究的热情,调动自己的主动性和积极性,能够以专心、细心、恒心和耐心的积极心态去完成。最后,要能结合发挥自己的业务专长,每个考生无论能力水平高低,工作岗位如何,都有自己的业务专长,选择那些能结合自己工作、发挥自己业务专长的课题,对顺利完成课题的研究大有益处。 致 谢 这次论文的完成,不止是我自己的努力,同时也有老师的指导,同学的帮助,以及那些无私奉献的前辈,正所谓你知道的越多的时候你才发现你知道的越少,通过这次论文,我想我成长了很多,不只是磨练了我的知识厚度,也使我更加确定了我今后的目标:为今后的计算机事业奋斗。在此我要感谢我的指导老师——***老师,感谢您的指导,才让我有了今天这篇论文,您不仅是我的论文导师,也是我人生的导师,谢谢您!我还要感谢我的同学,四年的相处,虽然我未必记得住每分每秒,但是我记得每一个有你们的精彩瞬间,我相信通过大学的历练,我们都已经长大,变成一个有担当,有能力的新时代青年,感谢你们的陪伴,感谢有你们,这篇论文也有你们的功劳,我想毕业不是我们的相处的结束,它是我们更好相处的开头,祝福你们!我也要感谢父母,这是他们给我的,所有的一切;感谢母校,尽管您不以我为荣,但我一直会以我是一名农大人为荣。 通过这次毕业设计,我学习了很多新知识,也对很多以前的东西有了更深的记忆与理解。漫漫求学路,过程很快乐。我要感谢信息与管理科学学院的老师,我从他们那里学到了许多珍贵的知识和做人处事的道理,以及科学严谨的学术态度,令我受益良多。同时还要感谢学院给了我一个可以认真学习,天天向上的学习环境和机会。 即将结束*大学习生活,我感谢****大学提供了一次在**大接受教育的机会,感谢院校老师的无私教导。感谢各位老师审阅我的论文。 毕业论文(设计说明书)撰写规范 毕业设计(论文)是学生在校学习成果的集中体现,毕业论文或毕业设计说明书是学生提交毕业设计(论文)资料中的主要部分。为了提高我校的毕业设计(论文)质量,使毕业论文(设计说明书)在内容和格式上更加统一规范,特编写此规范。 一、论文内容要求 1.毕业论文字数根据专业及课题不同要求在8000字以上,论文内容应完整、准确,层次分明,数据可靠,文字简练,分析透彻,推理严谨,立论正确。毕业设计说明书字数不低于8000字。 2. 论文撰写前应翻译完整的外文文献1~2篇(中文字数不低于3000字),要求翻译的内容与课题相关;撰写与课题内容相关的文献综述2000字以上。 3.论文应采用国家正式公布实施的简化汉字、法定计量单位和国家制图标准。 4.论文采用的术语、符号、代号全文必须统一,并符合规范要求。论文中使用新的专业术语、缩略语、习惯用语,应加以注释。 5.文稿中的插图、照片必须确保能复制或微缩。 二、论文各部分要求 论文内容一般应由十个主要部分组成,依次为:(1)封面,(2)中文摘要,(3)英文摘要,(4)关键字,(5)目录,(6)前言,(7)论文正文,(8)参考文献,(9)附录,(10)致谢。各部分的具体要求如下: 1.封面 采用学校统一的封面格式,封面上填写论文题目、作者姓名、学号、所在院(系)、专业名称、指导教师姓名及完成日期。 论文题目不宜过长,一般不超过25个字。 2.中文摘要 摘要是论文不加注释和评论的简短陈述,具有独立性和自含性,摘要中有数据、有结论,是一篇完整的短文,可以独立使用和引用,论文摘要在写法上一般不分段落,常采用无人称句。摘要中一般不用图表、化学反应式、数学表达式等,不能出现非通用性的外文缩略语或代号,不得引用参考文献。写作论文摘要时应注意能反映出以下几方面的内容:论文所研究的问题及其目的和意义;论文的基本思路和逻辑结构;问题研究的主要方法、内容、结果和结论。论文摘要一般200~400字。 设计说明书的摘要一般为1000~2000字,摘要应该包含论文中的基本信息,应说明本项研究工作的目的和意义、研究方法(实验方法)、结果和结论,重点是结果和结论。注意突出具有创新性的成果和新见解。 3.英文摘要 英文摘要内容应与中文摘要基本对应,要符合英语语法,语句通顺,文字流畅。 4.关键词 关键词是为了文献标引而从论文中选取出来的用以表示全文主题内容信息款目的单词或术语。每篇论文一般选取3~8个关键词。 5.目录 目录是论文的大纲,反映论文的梗概。目录页每行由标题名称和页码组成,包括中英文摘要;前言;主要内容的章、条、款序号和标题;小结;参考文献;注释;附录;可供参考的文献题录、索引等。 6.前言 前言是论文的第一章,是论文评阅人、答辩委员和读者了解论文研究背景和概况的主要篇章。主要目的是向论文评阅人、答辩委员和读者阐述论文中所要研究的问题以及与其有关的背景或对一些事项的说明。前言通常应包括以下四个方面:论文所研究的目标、国内外研究现状以及研究目的和意义;论文使用的理论工具、研究方法及技术路线;论文的基本思路和逻辑结构;论文参考的文献资料、使用的符号、计算公式等需要说明的问题。前言在写法上不分章节,提倡无人称句。 7.论文正文 论文正文是主体,一般由标题、文字叙述、图、表格和公式等五个部分构成。写作形式可因课题性质不同而变化,一般可包括理论分析、数据资料、计算方法、实验和测试方法,经过整理加工的实验结果分析和讨论,与理论计算结果的比较,个人的论点以及本研究方法与已有研究方法的比较。要求实事求是、理论正确、逻辑清楚、层次分明、文字流畅、数据真实、公式推导计算无误。文中若有与导师或他人共同研究的成果,必须明确指出;如果引用他人的结论,必须明确注明出处,并与参考文献一致。 8.参考文献 只列作者直接阅读过、在正文中被引用过的文献资料。参考文献一律放在论文结论后,不得放在各章之后。每条文献的项目必须完整,诸项缺一不可。各类文献的书写格式均应符合国家标准《GB771487文后参考文献著录规则》。论文中引用参考文献时,应在引出处的右上方用方括号标注阿拉伯数字编排的序号,按文中引用出现的顺序列在正文的末尾。特别在引用别人的科研成果时,应在引用处加以说明。文科论文可选用页脚注。 9.附录 一般作为论文主体的补充项目。主要列入正文内过分冗长的公式推导;供查读方便所需的辅助性数学工具或重复性数据表格;由于过分冗长而不宜放置在正文中的计算机程序清单;论文使用的缩写说明;调查、实验材料等。 10.致谢 对于提供各类资助、指导和协助完成研究工作以及提供对论文写作各种工作有利条件的单位及个人表示感谢。致谢应实事求是,真诚客观。 三、编排格式 1.论文封面中题目为小一号黑体字,可以分成1或2行居中打印;作者姓名、学号、所在院(系)、专业名称、指导教师姓名及完成日期等为仿宋—GB2312三号(详见附1)。 2.中文题目、摘要及关键词(详见附2) (1)中文题目以黑体小一号字居中分成1或2行打印。 (2)中文题目下空二行居中打印“摘 要”,采用四号黑体字,摘要内容另起行前空两字,采用小四号宋体字打印。 (3)“关键词”为小四号黑体字,与摘要内容隔开一行,另起一行左对齐,空两字符后跟关键词,每一关键词之间用分号隔开,最后一个关键词后不打标点符号,关键词采用小四号宋体字打印。 3.英文题目、摘要及关键词 论文中的英文一律采用“Times New Roman”字体(详见附3)。 (1)论文英文题目全部采用大写字母,可分成1~3行居中二号字加粗打印。每行左右两边至少留五个字符空格。 (2)英文题目下空二行居中四号加粗打印“ABSTRACT”,再下空一行小四号字打印英文摘要内容,英文摘要与中文摘要相对应。摘要内容每段开头留四个字符空格。 (3)摘要内容后下空一行居左,以小四号加粗打印“KEY WORDS”, 留两字符空格,其后是关键词,采用小四号打印。 4.目录 应将文内的章节标题编排清楚,目录中的章、条一般编排到二级,也可编排到三级(章、条、款),标题应该简明扼要。标题层次一般不应超过四级。“目录”两字用小二号粗黑体,下空两行为章、条、款及其开始页码,以小四宋体、1.3倍行距打印。章、条、款层次代号如下:(详见附4) 1 (章的标题) XXXX…………………………………………………… 1 1.1 (条的标题) XXXX ……………………………………………… 2 1.1.1 (款的标题) XXXX…………………………………………… 3 5.正文 每章的标题以小三号黑体字左起打印;“章”下空一行为“条”的标题,条的标题以四号黑体字左起打印;“条”下一行为“款”的标题,款的标题以小四号黑体字左起打印。换行后打印正文内容,正文用小四号宋体字,行距1.25左右,正文中标题同目录相对应(详见附5)。正文中的标题层次一般不应超过四级,四级以后可单独编号,如编写作(1) (2) (3) …或① ② ③…或a. b. c.…等。正文中用的单位名称的书写可以采用国际通用符号,也可以用中文名称,但全文应统一,不能两种混用。正文中用的量和单位要严格执行GB3100~3102:93有关量和单位的规定。具体要求参阅《常用量和单位》计量出版社,1996。 6.图 图应有编号和图题。图号采用阿拉伯数字分章依序编排,图号后空一格为图题,如“图2-1 ××××”等,图的编号和图题应置于图下方的居中位置,五号黑体字打印。版式为四周环绕型;靠右侧置放(详见附5)。论文中的插图应具有鲜明性,切忌与列表及文字表述重复。插图中的术语、符号、单位等应同正文表述所用保持一致。插图要清楚,坐标比例不要过分放大,同一幅图上不同曲线的点要分别用不同形状标出;图内文字采用小五号宋体字。 7.表 表应有编号和表题。表号采用阿拉伯数字分章依序编排,表号后空一格为表题,如“表2-1 ××××”等,表的编号和表题应置于表上方的居中位置,采用黑体五号字;表内文字符号采用小五号宋体打印,表内必须按规定的符号标注单位;制表一律采用三线制。列表中的参数应标明量和单位的符号(详见附5)。 8.公式 公式一律使用公式编辑器编辑。公式序号采用阿拉伯数字分章依序编排,如“(2-13)”、“(4-5)”等,序号标注于该式所在行(当有续行时,应标注于最后一行)的最右边;公式书写方式应在文中相应位置另起一行居左空四个字符横排,对于较长的公式只可在符号处(+、-、*、/、≤≥等)转行(详见附5)。 9.参考文献 “参考文献”以小四号黑体字左起打印,另起行以五号宋体字列参考文献。参考文献的排列顺序与在正文中的引用顺序一致,著录格式及示例详见附6。 10.正文中的说明性注解 采用随文脚注,用上标形式“①”等数字表示。 11.论文的附录依次为附录1,附录2……编号。附录中的图表公式另编排序号,与正文分开。 四、打印及装订要求 1.论文文稿一律采用白色A4纸标准大小打印,文稿四周应留中空白边缘,以便装订、复制和读者批注。页面设置为上方和左侧分别留边2.5 cm,下方和右侧分别留2.0cm,页眉、页脚:各为1.5、2.0 cm。 2.由统一封面装订成册。顺序为①封面;②中文题目、摘要及关键词;③英文题目、摘要及关键词;④目录;⑤前言;⑥正文(包括结论和参考文献);⑦附录;⑧致谢。 五、其他 1.外文翻译及文献综述的撰写格式可参照执行。 2.工程设计制图国家标准目录见附7。 毕业设计(论文)工作条例内容选编 一、毕业设计(论文)的组织管理 全校毕业设计(论文)工作在主管校长统一领导下进行,实行分级管理,层层负责的办法。 1.教务处作为毕业设计(论文)工作的学校主管部门,其主要职责是: (1)贯彻落实上级主管部门对毕业设计(论文)工作的指导文件和批示精神,并结合学校实际制定相应的管理规定,明确学校毕业设计(论文)工作的整体目标。 (2)负责协调毕业设计(论文)过程中的有关问题,进行毕业设计(论文)工作的宏观指导。 (3)对各学院毕业设计(论文)教学过程中的各个环节进行质量监督和检查,组织评选“校优秀毕业设计(论文)”对学校毕业设计(论文)工作进行总结和表彰。 2.二级学院(系)应成立毕业设计(论文)工作委员会,具体负责本项工作的落实,其主要职责是: (1)贯彻落实学校有关毕业设计(论文)的管理规定,制定学院 工作计划 幼儿园家访工作计划关于小学学校工作计划班级工作计划中职财务部门工作计划下载关于学校后勤工作计划 和实施细则。 (2)审查、汇总毕业设计(论文)题目,安排指导教师。 (3)统一安排、布置学院毕业设计(论文)工作任务。 (4)定期检查毕业设计(论文)工作进度,协调处理院内毕业设计(论文)中的问题,考核检查教师的毕业设计(论文)指导情况。 (5)组织毕业设计(论文)答辩和成绩复查,总结学院毕业设计(论文)工作,并向学校推荐“校优秀毕业设计(论文)”。 二、指导教师职责 指导教师应本着教书育人的宗旨,在对毕业设计(论文)进行业务指导的同时,引导学生养成正确的思维方法、工作作风和严谨治学的科学态度。 1.毕业设计(论文)的指导教师应由具有讲师或讲师以上职称的教师担任。助教、研究生不能单独指导毕业设计(论文),只能协助指导教师工作。副教授以上职称教师参与指导毕业设计(论文)的比例应高于90%。 对于来自外单位,且部分或全部工作需在外单位进行的课题,亦可聘请该单位工程师以上的技术人员担任指导工作。教研室应派专人联系,了解情况,掌握进度。 2.毕业设计(论文)指导教师职责 (1)拟定毕业设计(论文)课题,下达任务书,制定指导计划和工作程序,并严格执行。 (2)根据任务书,与学生共同制定“毕业设计(论文)工作进度计划表”,明确“阶段工作内容”,并采取多种形式检查学生的工作进度和质量,及时解答和处理学生提出的有关问题,原则上每周必须仔细检查一次,并在每一阶段结束时给本阶段工作评定成绩,成绩填入“毕业设计(论文)分阶段评分表”。 (3)指导学生写出开题报告、翻译外文并给予评阅。 (4)指导学生按规范要求正确撰写毕业设计(论文),并在答辩前认真审查学生的毕业论文或设计结果(包括论文正文、实验报告、计算书、或设计说明书、工艺卡、图纸等),并写出毕业设计(论文)的学术评语。 (5)参加毕业设计(论文)答辩。 三、毕业设计(论文)对学生的要求 学生在毕业设计(论文)过程中必须做到: 1.努力学习,刻苦钻研,勤于实践,勇于创新。 2.虚心接受指导教师和工程技术人员的指导。 3.独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则其毕业设计(论文)成绩按不及格处理。 4.严格遵守纪律,毕业设计(论文)期间,无故缺席按旷课处理;缺席时间超过四分之一以上者,不准参加答辩,其成绩按不及格处理。 5.未在规定时间内完成毕业设计(论文)或不按时参加答辩者,其成绩按不及格处理。 四、答辩及成绩评定 答辩工作由各系毕业设计(论文)答辩委员会主持,下设若干答辩小组。答辩委员会由系领导及专家5~7人组成,答辩委员会主任可由分管教学的系主任、教研室主任或学术水平较高的教师担任。成员名单在答辩前二周报院答辩工作委员会审核。 1.答辩委员会的主要职责是 (1)组织并领导答辩小组进行毕业设计(论文)答辩工作; (2)审定学生毕业设计(论文)的最后成绩及评语; (3)完成毕业设计(论文)答辩工作的总结报告。 2.答辩小组的主要职责 (1)答辩前阅读有关毕业设计(论文)资料,了解学生毕业设计(论文)内容及指导教师评语; (2)需事先准备好一定数量的问题,所提问题要有一定的深度和广度; (3)认真听取学生在答辩中的陈述和对问题的回答; (4)依据评分标准初步给定毕业设计(论文)成绩。 3.答辩日期和地点由答辩委员会在一周前向学生正式公布,同时报送教务处,以便组织院有关人员参加、检查答辩工作。 4.答辩程序 (1)学生陈述(约10分钟) (2)答辩小组提出问题 (3)学生回答 (4)答辩小组总评分。每位学生答辩时间控制在30分钟左右。 5.答辩评分标准应从四个方面综合考虑:(1)设计(论文)的性质、难度、分量、综合训练等情况;(2)设计(论文)的质量、价值及有无创造性;(3)答辩中自述和回答问题的正确程度;(4)工作态度。评分具体标准各系可根据学生整体水平和课题特点分别拟定。 6.毕业设计(论文)的成绩评定必须从严掌握。严格按照分阶段评分进行,无前一阶段成绩,不得进入下一阶段评分。答辩不通过,总成绩不能评为合格。最后以五级(优、良、中、及格、不及格)记分登记入册,优秀率一般不高于20%。系级优秀设计(论文)再经院答辩工作委员会审定,评出10%为院级优秀设计(论文)。学院对院级优秀设计(论文)予以表彰,并日后编订成册。 7.毕业设计(论文)不能免修、缓修、只能重做。 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权      大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。   作者签名: 年 月 日   毕业设计(论文)使用授权声明 本人完全了解**学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定)   作者签名: 年 月 日 基本要求:写毕业论文主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。毕业论文应反映出作者能够准确地掌握所学的专业基础知识,基本学会综合运用所学知识进行科学研究的方法,对所研究的题目有一定的心得体会,论文题目的范围不宜过宽,一般选择本学科某一重要问题的一个侧面。 毕业论文的基本教学要求是: 1、培养学生综合运用、巩固与扩展所学的基础理论和专业知识,培养学生独立分析、解决实际问题能力、培养学生处理数据和信息的能力。2、培养学生正确的理论联系实际的工作作风,严肃认真的科学态度。3、培养学生进行社会调查研究;文献资料收集、阅读和整理、使用;提出论点、综合论证、总结写作等基本技能。 毕业论文是毕业生总结性的独立作业,是学生运用在校学习的基本知识和基础理论,去分析、解决一两个实际问题的实践锻炼过程,也是学生在校学习期间学习成果的综合性总结,是整个教学活动中不可缺少的重要环节。撰写毕业论文对于培养学生初步的科学研究能力,提高其综合运用所学知识分析问题、解决问题能力有着重要意义。 毕业论文在进行编写的过程中,需要经过开题报告、论文编写、论文上交评定、论文答辩以及论文评分五个过程,其中开题报告是论文进行的最重要的一个过程,也是论文能否进行的一个重要指标。 撰写意义:1.撰写毕业论文是检验学生在校学习成果的重要措施,也是提高教学质量的重要环节。大学生在毕业前都必须完成毕业论文的撰写任务。申请学位必须提交相应的学位论文,经答辩通过后,方可取得学位。可以这么说,毕业论文是结束大学学习生活走向社会的一个中介和桥梁。毕业论文是大学生才华的第一次显露,是向祖国和人民所交的一份有份量的答卷,是投身社会主义现代化建设事业的报到书。一篇毕业论文虽然不能全面地反映出一个人的才华,也不一定能对社会直接带来巨大的效益,对专业产生开拓性的影响。但是,实践证明,撰写毕业论文是提高教学质量的重要环节,是保证出好人才的重要措施。 2.通过撰写毕业论文,提高写作水平是干部队伍“四化”建设的需要。党中央要求,为了适应现代化建设的需要,领导班子成员应当逐步实现“革命化、年轻化、知识化、专业化”。这个“四化”的要求,也包含了对干部写作能力和写作水平的要求。 3.提高大学生的写作水平是社会主义物质文明和精神文明建设的需要。在新的历史时期,无论是提高全族的科学文化水平,掌握现代科技知识和科学管理方法,还是培养社会主义新人,都要求我们的干部具有较高的写作能力。在经济建设中,作为领导人员和机关的办事人员,要写指示、通知、总结、调查报告等应用文;要写说明书、广告、解说词等说明文;还要写科学论文、经济评论等议论文。在当今信息社会中,信息对于加快经济发展速度,取得良好的经济效益发挥着愈来愈大的作用。写作是以语言文字为信号,是传达信息的方式。信息的来源、信息的收集、信息的储存、整理、传播等等都离不开写作。 论文种类:毕业论文是学术论文的一种形式,为了进一步探讨和掌握毕业论文的写作规律和特点,需要对毕业论文进行分类。由于毕业论文本身的内容和性质不同,研究领域、对象、方法、表现方式不同,因此,毕业论文就有不同的分类方法。 按内容性质和研究方法的不同可以把毕业论文分为理论性论文、实验性论文、描述性论文和设计性论文。后三种论文主要是理工科大学生可以选择的论文形式,这里不作介绍。文科大学生一般写的是理论性论文。理论性论文具体又可分成两种:一种是以纯粹的抽象理论为研究对象,研究方法是严密的理论推导和数学运算,有的也涉及实验与观测,用以验证论点的正确性。另一种是以对客观事物和现象的调查、考察所得观测资料以及有关文献资料数据为研究对象,研究方法是对有关资料进行分析、综合、概括、抽象,通过归纳、演绎、类比,提出某种新的理论和新的见解。 按议论的性质不同可以把毕业论文分为立论文和驳论文。立论性的毕业论文是指从正面阐述论证自己的观点和主张。一篇论文侧重于以立论为主,就属于立论性论文。立论文要求论点鲜明,论据充分,论证严密,以理和事实服人。驳论性毕业论文是指通过反驳别人的论点来树立自己的论点和主张。如果毕业论文侧重于以驳论为主,批驳某些错误的观点、见解、理论,就属于驳论性毕业论文。驳论文除按立论文对论点、论据、论证的要求以外,还要求针锋相对,据理力争。 按研究问题的大小不同可以把毕业论文分为宏观论文和微观论文。凡届国家全局性、带有普遍性并对局部工作有一定指导意义的论文,称为宏观论文。它研究的面比较宽广,具有较大范围的影响。反之,研究局部性、具体问题的论文,是微观论文。它对具体工作有指导意义,影响的面窄一些。 另外还有一种综合型的分类方法,即把毕业论文分为专题型、论辩型、综述型和综合型四大类: 1.专题型论文。这是分析前人研究成果的基础上,以直接论述的形式发表见解,从正面提出某学科中某一学术问题的一种论文。如本书第十二章例文中的《浅析领导者突出工作重点的方法与艺术》一文,从正面论述了突出重点的工作方法的意义、方法和原则,它表明了作者对突出工作重点方法的肯定和理解。2.论辩型论文。这是针对他人在某学科中某一学术问题的见解,凭借充分的论据,着重揭露其不足或错误之处,通过论辩形式来发表见解的一种论文。3.综述型论文。这是在归纳、总结前人或今人对某学科中某一学术问题已有研究成果的基础上,加以介绍或评论,从而发表自己见解的一种论文。4.综合型论文。这是一种将综述型和论辩型两种形式有机结合起来写成的一种论文。如《关于中国民族关系史上的几个问题》一文既介绍了研究民族关系史的现状,又提出了几个值得研究的问题。因此,它是一篇综合型的论文。 写作步骤:毕业论文是高等教育自学考试本科专业应考者完成本科阶段学业的最后一个环节,它是应考者的 总结 性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际 问题 的能力。从文体而言,它也是对某一专业领域的现实问题或 理论 问题进行 科学 研究 探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。 首先是选择课题。选题是论文撰写成败的关键。因为,选题是毕业论文撰写的第一步,它实际上就是确定“写什么”的问题,亦即确定科学研究的方向。如果“写什么”不明确,“怎么写”就无从谈起。 教育部自学考试办公室有关对毕业论文选题的途径和要求是“为鼓励理论与工作实践结合,应考者可结合本单位或本人从事的工作提出论文题目,报主考学校审查同意后确立。也可由主考学校公布论文题目,由应考者选择。毕业论文的总体要求应与普通全日制高等学校相一致,做到通过论文写作和答辩考核,检验应考者综合运用专业知识的能力”。但不管考生是自己任意选择课题,还是在主考院校公布的指定课题中选择课题,都要坚持选择有科学价值和现实意义的、切实可行的课题。选好课题是毕业论文成功的一半。 第一、要坚持选择有科学价值和现实意义的课题。科学研究的目的是为了更好地认识世界、改造世界,以推动社会的不断进步和发展 。因此,毕业论文的选题,必须紧密结合社会主义物质文明和精神文明建设的需要,以促进科学事业发展和解决现实存在问题作为出发点和落脚点。选题要符合科学研究的正确方向,要具有新颖性,有创新、有理论价值和现实的指导意义或推动作用,一项毫无意义的研究,即使花很大的精力,表达再完善,也将没有丝毫价值。具体地说,考生可从以下三个方面来选题。首先,要从现实的弊端中选题,学习了专业知识,不能仅停留在书本上和理论上,还要下一番功夫,理论联系实际,用已掌握的专业知识,去寻找和解决工作实践中急待解决的问题。其次,要从寻找科学研究的空白处和边缘领域中选题,科学研究。还有许多没有被开垦的处女地,还有许多缺陷和空白,这些都需要填补。应考者应有独特的眼光和超前的意识去思索,去发现,去研究。最后,要从寻找前人研究的不足处和错误处选题,在前人已提出来的研究课题中,许多虽已有初步的研究成果,但随着社会的不断发展,还有待于丰富、完整和发展,这种补充性或纠正性的研究课题,也是有科学价值和现实指导意义的。 第二、要根据自己的能力选择切实可行的课题。毕业论文的写作是一种创造性劳动,不但要有考生个人的见解和主张,同时还需要具备一定的客观条件。由于考生个人的主观、客观条件都是各不相同的,因此在选题时,还应结合自己的特长、兴趣及所具备的客观条件来选题。具体地说,考生可从以下三个方面来综合考虑。首先,要有充足的资料来源。“巧妇难为无米之炊”,在缺少资料的情况下,是很难写出高质量的论文的。选择一个具有丰富资料来源的课题,对课题深入研究与开展很有帮助。其次,要有浓厚的研究兴趣,选择自己感兴趣的课题,可以激发自己研究的热情,调动自己的主动性和积极性,能够以专心、细心、恒心和耐心的积极心态去完成。最后,要能结合发挥自己的业务专长,每个考生无论能力水平高低,工作岗位如何,都有自己的业务专长,选择那些能结合自己工作、发挥自己业务专长的课题,对顺利完成课题的研究大有益处。 致 谢 这次论文的完成,不止是我自己的努力,同时也有老师的指导,同学的帮助,以及那些无私奉献的前辈,正所谓你知道的越多的时候你才发现你知道的越少,通过这次论文,我想我成长了很多,不只是磨练了我的知识厚度,也使我更加确定了我今后的目标:为今后的计算机事业奋斗。在此我要感谢我的指导老师——***老师,感谢您的指导,才让我有了今天这篇论文,您不仅是我的论文导师,也是我人生的导师,谢谢您!我还要感谢我的同学,四年的相处,虽然我未必记得住每分每秒,但是我记得每一个有你们的精彩瞬间,我相信通过大学的历练,我们都已经长大,变成一个有担当,有能力的新时代青年,感谢你们的陪伴,感谢有你们,这篇论文也有你们的功劳,我想毕业不是我们的相处的结束,它是我们更好相处的开头,祝福你们!我也要感谢父母,这是他们给我的,所有的一切;感谢母校,尽管您不以我为荣,但我一直会以我是一名农大人为荣。 通过这次毕业设计,我学习了很多新知识,也对很多以前的东西有了更深的记忆与理解。漫漫求学路,过程很快乐。我要感谢信息与管理科学学院的老师,我从他们那里学到了许多珍贵的知识和做人处事的道理,以及科学严谨的学术态度,令我受益良多。同时还要感谢学院给了我一个可以认真学习,天天向上的学习环境和机会。 即将结束*大学习生活,我感谢****大学提供了一次在**大接受教育的机会,感谢院校老师的无私教导。感谢各位老师审阅我的论文。 � EMBED \* MERGEFORMAT ��� PAGE 32 _1306454082.vsd � 调用时钟芯片时间 数据子程序� 农历时间、日期数据 转换成液晶字符� 调用温度采集 子程序 温度数据数据 转换成液晶字符� 显示温度、时间、 日期、星期 公历时间、日期 转换成液晶字符� 调用公历转 农历子程序� _1306698048.vsd � � 当前时间与所定时间是否相等� N 将所定时间写入存储器 Y Y 是否停止闹铃 N 继续响铃� 闹铃是否闹够10s N 停止响铃� 响铃� Y Y _1307252204.vsd � � 程序入口 根据公历年定位表的位置� 从表中取得春节公历日期� 计算出春节离元旦的天数记为N� 计算公历日离元旦的天数记为M� 公历日离春节的天数X=M-N� 公历日在春节后吗?� 农历年=公历年,取农历月信息� 农历年=公历年减1,定位到前一年,取农历月信息� 农历月=1,闰月标志F0=0� 农历月=12,闰月标志F0=0� 取农历月天数Y � 取农历月天数Y � F0取反� 农历月=闰月?� 农历月+1� F0=1?� 农历月-1� F0=1?� X=X-Y� F0取反� X>=Y?� X=X-Y� 农历月=闰月?� 农历日=X+1� X>=Y?� 农历日=Y-X+1� 农历年月日标准化� 子程序出口� Y N N Y N Y Y N Y Y N N Y _1306696613.vsd � 启动温度转换 读取温度寄存器 初始化DS18B20 结束 初始化DS18B20 发跳过读 系列号命令 读取温度值 发跳过读 系列号命令 _1306452270.vsd � � 程序开始 初始化标志位� DS1302初始化� DS18B20初始化� 闹钟模块初始化 模式标志位done = ? 调整模式 =1 =0 闹钟模块� LCD显示模块� 按键扫描模块 LCD1602初始化� _1234567890.vsd � AT89S52� 电源模块� 温度模块 独立按键� 时钟模块 显示模块� 闹钟模块�
本文档为【基于单片机的万年历设计毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
不系舟红枫
从教近30年,经验丰富,教学水平较高
格式:doc
大小:1MB
软件:Word
页数:88
分类:工学
上传时间:2019-01-23
浏览量:39