基于单片机的万年历毕业设计开题报告

时间:2024.4.5

banner1

  毕业设计开题报告

        题    目 基于单片机控制的电子万年历的设计 

学生姓名        陶  梅                   

学    号     200814110230                

系    别    物理与电子信息工程系               

专    业    电子信息科学与技术           

届    别        20## 届                  

指导教师        蒋纯志                   

职    称        副教授                   

20##年1028

注:此表由学生本人填写,一式三份,一份留系里存档,指导教和学生本人各保存一份。


第二篇:基于单片机的电子万年历毕业设计论文(很全--免费下载)


陕西理工学院

毕业设计论文

论文题目:电子时钟

学    院:                                          

专    业:                        

班    级:                         

学    号:                          

指导教师:                         

20##年      月    日

目 录                                                                  

摘要 ….…………………………………………………………………….……………3

绪论 …….….……………………………………………………………….……………5

第1章  设计要求与方案论证…….………….………………………………7

1.1 引言…….……………………………………………………………….……………7

1.2 功能要求.…………………………..……………………………….………………7

1.3方案论证…….………………………………………………………..………………7

第2章  系统硬件电路设计 …….…………………………….………………11

2.1 电路设计…….………………………………………………………….…………11

2.2 系统硬件概述…….……………………………………………………………15

2.3主要单元电路的设计…….………………………………………………………15

第3章  系统的软件设计…….………………………………….……………22

3.1程序设计…….……………………………………………………………………22

3.2程序设计流程图…….……………………………………………………………22

第4章  结束语…….….………………………………………….……………24

附录一(电路原理图)…… ……………………………………..……………

附录二(程序清单)…….…………………………………………………………27

摘要

随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间,能够了解与人类密切相关的信息,比如星期、日期等,电子时钟诞生了,它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
  该电子时钟主要采用STC89C52RC单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示。STC89C52RC单片机是由Atmel公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外,该电子时钟还具有时间校准等功能。
  

关键词:时钟电路; 时钟芯片DS1302;LED动态扫描; 单片机STC89C52RC;

绪论

    随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。

二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步……  

我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。

本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。
  除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片微机制成电子电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。STC89C52RC是由ATMEL公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。
  

本文介绍了基于STC89C52RC单片机设计的电子时钟。

首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义;接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LED显示及其驱动方法,并在此基础上实现了时钟基本电路的设计;然后使用单片机C语言进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。

第1章 设计要求与方案论证

1.1 引言

    本文提出了一种基于STC89C52RC单片机的时钟设计方案,本方案以STC89C52RC单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LED显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

1.2功能要求

本电子时钟能动态显示年、月、日、星期、小时、分钟、秒

1.3方案论证

1.3.1 技术可行性

 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。
  单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:
   1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。
  2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。
   3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。
  4、有优异的性能、价格比。

1.3.2 单片机的选择

方案一:采用传统的STC89C52RC作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。

方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash ROM,可以擦除1000次以上,数据保存10年。

由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。

1.3.3 显示模块的选择                     

方案一:使用液晶显示屏显示时间数字。 液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。

方案二:使用传统的LED数码管显示。 数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少。

        根据以上的论述,采用方案二。在本系统中,我们采用了八段四位一体数码管串口的动态显示。

1.3.4 键盘模块的选择

在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。

        方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。

        方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。

        根据以上的论述,因本系统需要的按键不多,日期加1键,月数加1键,年数加1键,分数加1键,时数加1键,时间/日期切换键,要求简单。所以采用方案一独立式键盘。

1.3.5总体方案论证与选择

按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列STC89C52RC单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.5~5.5V电源,再2.5V时耗电小于300nA),而且DS1302可以编程选择多种充电电流来为后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用普通的共阳极四位一体八段LED数码管。

第二章    系统硬件电路设计

2.2系统硬件概述

2.2.1 主控制器STC89C52RC

     STC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。

    主要特性如下:

●  增强型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意选择,指令代码完全兼容传统8051单片机。

●  工作电压:5.5V~3.3V

●  工作频率范围:0~44MHz。

●  用户应用程序空间为8K字节

●  片上集成512字节RAM

●  通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

●  ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。

●  具有EEPROM功能

●  具有看门狗功能

●  共3个16位定时器/计数器。及定时器T0、T1、T2

●  外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒

●  通用异步串行口(UART),还可用定时器实现多个UART

●  工作温度范围:-40~+85度(工业级)/0~75度(商业级)

●  PDIP封装

2.2.2时钟电路DS1302

    DS1302的性能特性:

●  实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较;

●  用于高速数据暂存的31*8位RAM;

●  最少引脚的串行I/O;

●  2.5~5.5V电压工作范围;

●  2.5V时耗小于300nA;

●  用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;

●  简单的三线接口;

●  可选的慢速充电(至Vcc1)的能力。

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如表所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

表2.1  DS1302控制字


      

 DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。

时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。

    AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。

    DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。

2.3主要单元电路的设计

2.3.1显示电路

显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。年月日、时分秒、报警共需要24位数码显示,用8位数码管以按键切换的方式来显示。考虑到一次扫描24位数码管显示时会出现闪烁情况,故采用动态扫描,可将数码管数量减少至8位,显示时采用串行口输出段码。

                   

2.3.2键盘接口

键盘在单片机系统中是一个很重要的部件。为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。

键盘可分为编码和非编码键盘两种。编码键盘采用硬件线线路来实现键盘编码,每按下一个键,键盘能自动生成按键代码,键数较多,而且还具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用的键盘就属于这种。非编码键盘仅提供按键开关工作状态,其他工作由软件完成,这种键盘键数较少,硬件简单,一般在单片机应用系统中广泛使用。此处主要介绍该类非编码键盘及其与MCS—51型单片机的接口。

2.3.2.1按键开关去抖动问题

按键开关在电路中的连接如图所示。按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。因此必须设法消除抖动的不良后果。

图2.3 键操作和键抖动

消除抖动的不良后果的方法有硬、软件两种。

为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,在第一次检测到按键按下后,执行一段延时5~10ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后才转入该键处理程序。

2.3.2.2查询式按键及其接口

按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。故这种形式适用于按键数量较少的场合。

2.3.2.3矩阵式键盘及其接口

矩阵式键盘又称行列式键盘,有n个行线和m个列线,经限流电阻接+5V电源上,按键跨接在行线和列线上,n×m行列结构可构成mn个按键,组成一个键盘。与独立式按键相比,mn个按键只占用m+n根I/O口线,因此适用于按键较多的场合。

当无键闭合时,相应的I/O之间开路。当有键闭合时,与闭合键相连接的两条I/O口线之间短路。判断有无键按下的方法是:第一步,置列线相关I/O口为输入态,从行线相对应的I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,置行线相关I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等待近按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。

2.3.2.4键盘扫描控制方式

在单片机应用系统中,对键盘的处理工作仅是CPU工作内容的一部分,CPU还要进行数据处理、显示和其他输入输出操作,因此键盘处理工作既不能占用CPU太多时间,又需要CPU对键盘操作及时作出响应。CPU对键盘处理控制的工作方式有以下几种:

1. 程序控制扫描方式

程序控制扫描方式是在CPU工作空余,调用键盘扫描子程序,响应键输入信号要求。

2. 定时控制扫描方式

定时控制扫描方式是利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描,并在有键闭合时转入该键的功能子程序。

3. 中断控制扫描方式

中断控制扫描方式是利用外部中断源,响应输入信号。当无按键按下时,CPU执行正常工作程序。当有按键按下时,CPU立即产生中断。在中断服务子程序中扫描键盘,判断是哪一个键被按下,然后执行该键的功能子程序。这种控制方式克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。图即工作于中断方式的矩阵式键盘接口电路。在初始化时P1.4~P1.7置输出0,P1.0~P1.3置为输入态,P1.0~P1.3分别接至与门各输入端。当有键闭合时=0,CPU中断后,在中断服务子程序中,再完成键识别和键功能处理。

               

    图2.4 工作于中断方式的矩阵式键盘接口电路

2.3.3时钟电路

2.3.3.1 DS1302工作方式简介及数据操作原理

DS1302可以对年、月、日、星期、时、分、秒进行计时, 且具有闰年补偿功能, 工作电压宽达2.5~5.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33x8的用于临时性存放数据的RAM寄存器。DS1302是的DS1202升级产品, 与DS1202兼容, 但增加了主电源/后背电源双电源引脚, 同时提供了对后背电源进行涓细电流充电的能力。

DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24<小>时或带AM/PM的12小时格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。


DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较打大者供电。当Vcc2>(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2<Vcc1时,DS1302由Vcc1供电。

                            图2.5  DS1302

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

DS1302的控制字如图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。


DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如下表所示,其中奇数为读操作,偶数为写操作。

表2.3  DS1302控制字

                       

时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。

    AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(20~23h)。

    DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。

第3章 系统的软件设计(3.1 程序设计)

电子时钟的程序主要包括3个方面的内容:一是DS1302从单片机中读取数据进行计数,二是利用按键进行时间的调整,三是单片机中读取DS1302中的数据驱动LED数码管显示时间。STC89C52RC单片机主要I/O口的分配:P10、P11、P12分别接时钟芯片的SCLK、I/O、RST引脚,P13、P14、P15、P16接四个独立按键。

              

主程序流程图

时间调整程序流程图

第4章 结束语

20##年3月,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了一个多月的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。

我不会忘记这难忘的几个月的时间。毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手用protel 99设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。我从资料的收集中,掌握了很多单片机及其接口应用的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。

脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成毕业论文。在此我要向司老师致以最衷心的感谢和敬意。

程序

//main.c//

#include<reg51.h>

#define uint  unsigned int

#include"ds1302.h"

#include"key.h"

#include"bell.h"

sbit k4=P1^3;

char k=0;

char shi,fen,miao,nian,yue,ri;

char baojingshi=0x00,baojingfen=0x06,baojingmiao=0x00;

void sjdisplay();

void rqdisplay();

void baojingdisplay();

void delay(uint ms);

void display(char shu,char wei);

char table[]={0xc0,0xf9,0xa4,0xb0,

             0x99,0x92,0x82,0xf8,

             0x80,0x90,0x88,0x83,

             0xc6,0xa1,0x86,0x8e};

void main()

{

    

   ds1302_write(0x80,0x55);

   ds1302_write(0x82,0x45);

   ds1302_write(0x84,0x00);

        ds1302_write(0x8c,0x11);

   ds1302_write(0x88,0x10);

   ds1302_write(0x86,0x07);

   

   

   while(1)

   {

        if(k4==0)

          {

             delay(5);

           if(k4==0)

            {

              while(k4==0);

                k++;

             if(k==3)

               {

                 k=0;

               }

            }

          }

        if(k==0)

     sjdisplay();

        if(k==1)

        rqdisplay();

        if(k==2)

        baojingdisplay();

        if((shi==baojingshi)&&(fen==baojingfen)&(miao==baojingmiao))

     {

        didi(10);

     }

    

     key();

   }

}

void sjdisplay()

{

        shi=ds1302_read(0x85);//hour

     fen=ds1302_read(0x83);//minites

     miao=ds1302_read(0x81);//second

     display((shi>>4)&0x07,0);

     display(shi&0x0f,1);

    

     display((fen>>4)&0x07,3);

     display(fen&0x0f,4);

    

     display((miao>>4)&0x07,6);

     display(miao&0x0f,7);

}

void rqdisplay()

{

   nian=ds1302_read(0x8d);//nian

   yue=ds1302_read(0x89);//yue

   ri=ds1302_read(0x87);//ri

   display((nian>>4)&0x07,0);

   display(nian&0x0f,1);

   display((yue>>4)&0x07,3);

   display(yue&0x0f,4);

   display((ri>>4)&0x07,6);//0000 0111

   display(ri&0x0f,7);

}

void baojingdisplay()

{

 

  display((baojingshi>>4)&0x07,0);

  display(baojingshi&0x0f,1);

    

  display((baojingfen>>4)&0x07,3);

  display(baojingfen&0x0f,4);

  display((baojingmiao>>4)&0x07,6);

  display(baojingmiao&0x0f,7);

}

void delay(uint ms)

{

   uint i,j;

   for(i=ms;i>0;i--)

     for(j=124;j>0;j--);

}

void display(char shu,char wei)

{

   P0=table[shu];

   P2=~(1<<wei);

   delay(3);

   P2=0xff;

}

//main.c//

               // Ds1302.c//

#include<reg51.h>

#define uchar unsigned char

#define uint  unsigned int

sbit rst=P1^2;

sbit dat=P1^1;

sbit clk=P1^0;

void ds1302_write(char comm,char dat1)

{

   char temp,t;

   rst=0;

   clk=0;

   rst=1;

   temp=comm;

   for(t=0;t<8;t++)

   {

     if(temp&0x01)

        dat=1;

     else dat=0;

     clk=1;

     temp=(temp>>1);

     clk=0;

    

   }

   temp=dat1;

   for(t=0;t<8;t++)

   {

     if((temp&0x01)==1)//0000 0001

        dat=1;

     else dat=0;

     clk=1;

     temp=temp>>1;

     clk=0;

  

   }

rst=0;

  

}

uchar ds1302_read(char comm)

{

   char temp,t;

   rst=0;

   clk=0;

   rst=1;

   temp=comm;

   for(t=0;t<8;t++)

   {

     if(temp&0x01)

        dat=1;

     else dat=0;

     clk=1;temp=temp>>1;

     clk=0;}

temp=0;//00000000

   for(t=0;t<8;t++)

   {

     temp=temp>>1;

     if(dat==1)

        temp=temp|0x80;

     else temp=temp&0x7f;

     clk=1;

    

     clk=0;

   }

   rst=0;

   return temp;

}

//Ds1302.c//

//Key.c//

#include<reg51.h>

#define char signed char

#define uint  unsigned int

sbit mode=P1^4;

sbit add=P1^5;

sbit sub=P1^6;

char mod=0;

extern void delay(uint ms);

extern char shi,fen,nian,yue,ri;

extern char baojingshi,baojingfen;

extern char ds1302_read(char);

extern void ds1302_write(char,char);

void key()

{

     

      shi=ds1302_read(0x85);

      fen=ds1302_read(0x83);

      if(mode==0)

      {

           delay(5);

           if(mode==0)

           {

                 while(mode==0);

                 mod++;

                 if(mod==8)

                 {

                      mod=0;

                 }

           }

      }

      if(add==0)

      {

           delay(5);

           if(add==0)

           {

                 while(add==0);

                 if(mod==1)

                 {

                     

                      shi=(((shi>>4)&0x03)*10+(shi&0x0f))+1;

                      if(shi==24)

                      {

                            shi=0;

                      }

                      ds1302_write(0x84,((shi/10)<<4)+((shi%10)&0x0f));//hour

                 }

                 else if(mod==2)

                 {

                     

                      fen=(((fen>>4)&0x07)*10+(fen&0x0f))+1;

                      if(fen==60)

                      {

                            fen=0;

                      }

                      ds1302_write(0x82,((fen/10)<<4)+((fen%10)&0x0f));

                 }

           else if(mod==3)

            {

              nian=(((nian>>4)&0x0f)*10+(nian&0x0f))+1;

                      if(nian==99)

                      {

                            nian=1;

                      }

                      ds1302_write(0x8c,((nian/10)<<4)+((nian%10)&0x0f)); 

            }

          else if(mod==4)

           {

              yue=(((yue>>4)&0x01)*10+(yue&0x0f))+1;

                      if(yue==13)

                      {

                            yue=1;

                      }

                      ds1302_write(0x88,((yue/10)<<4)+((yue%10)&0x0f));

           }

         else if(mod==5)

           {

              if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12))

                 { 

                   ri=(((ri>>4)&0x03)*10+(ri&0x0f))+1;

                               if(ri>=32)

                               {

                                     ri=1;

                               }

                 }

              if((yue==4)||(yue==6)||(yue==9)||(yue==11))

                 {

                    ri=(((ri>>4)&0x03)*10+(ri&0x0f))+1;

                          if(ri>=31)

                         { ri=1;  }

                 }

                if(yue==2)

                    {

                        ri=(((ri>>4)&0x03)*10+(ri&0x0f))+1;

                             if(ri>=29)

                             { ri=1;  }

                    } 

                      ds1302_write(0x86,((ri/10)<<4)+((ri%10)&0x0f));

           }

        else if(mod==6)

           {

             baojingshi=(((baojingshi>>4)&0x01)*10+(baojingshi&0x0f))+1;

                      if(baojingshi==24)

                      {

                            baojingshi=0;

                      }

                       ds1302_write(0x88,((baojingshi/10)<<4)+((baojingshi%10)&0x0f));

           }

         else if(mod==7)

           {

              baojingfen=(((baojingfen>>4)&0x01)*10+(baojingfen&0x0f))+1;

                      if(baojingfen==60)

                      {

                            baojingfen=0;

                      }

                       ds1302_write(0x88,((baojingfen/10)<<4)+((baojingfen%10)&0x0f));

           }

      

       

           }

      }

      if(sub==0)

      {

           delay(5);

           {

                 if(sub==0)

                 {

                      while(sub==0);

                      if(mod==1)

                      {

                            shi=(((shi>>4)&0x03)*10+(shi&0x0f))-1;

                            if(shi==-1)

                            {

                                 shi=23;

                            }

  ds1302_write(0x84,((shi/10)<<4)+((shi%10)&0x0f));

                           

                      }

                      else if(mod==2)

                      {

                            fen=(((fen>>4)&0x07)*10+(fen&0x0f))-1;

                            if(fen==-1)

                            {

                                 fen=59;

                            }

                           

                            ds1302_write(0x82,((fen/10)<<4)+((fen%10)&0x0f));

                      }

              else if(mod==3)

               {

                  nian=(((nian>>4)&0x0f)*10+(nian&0x0f))-1;

                 if(nian==0)

                            {

                                 nian=99;

                            }

                           

                            ds1302_write(0x8c,((nian/10)<<4)+((nian%10)&0x0f));

               }

              else if(mod==4)

               {

                   yue=(((yue>>4)&0x01)*10+(yue&0x0f))-1;

                   if(yue==0)

                            {

                                 yue=12;

                            }

                           

                            ds1302_write(0x88,((yue/10)<<4)+((yue%10)&0x0f));//yue

               }

              else  if(mod==5)

               {

                   if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12))

                     { 

                       ri=(((ri>>4)&0x03)*10+(ri&0x0f))-1;

                                if(ri==0)

                           

                                   { ri=31;}

                     }

                  if((yue==4)||(yue==6)||(yue==9)||(yue==11))

                    {

                        ri=(((ri>>4)&0x03)*10+(ri&0x0f))-1;

                       if(ri==0)

                         { ri=30;  }

                    }

                  if(yue==2)

                     {

                             ri=(((ri>>4)&0x03)*10+(ri&0x0f))-1;

                           if(ri==0)

                             { ri=28;  }

                     } 

                        ds1302_write(0x86,((ri/10)<<4)+((ri%10)&0x0f));

               }

             else if(mod==6)

           {

              baojingshi=(((baojingshi>>4)&0x01)*10+(baojingshi&0x0f))-1;

                      if(baojingshi==-1)

                      {

                            baojingshi=23;

                      }

                       ds1302_write(0x88,((baojingshi/10)<<4)+((baojingshi%10)&0x0f));

           }

         else if(mod==7)

           {

              baojingfen=(((baojingfen>>4)&0x01)*10+(baojingfen&0x0f))-1;

                      if(baojingfen==-1)

                      {

                            baojingfen=59;

                      }

                       ds1302_write(0x88,((baojingfen/10)<<4)+((baojingfen%10)&0x0f));

           }

              

                 }

           }

      }

     

     

     

}

//Key.c//

//Bell.c//

#include<reg51.h>

#define uint unsigned int

sbit beep=P3^7;

extern void delay(uint);

void didi(uint cnt)

{

      uint t;

      for(t=cnt;t>0;t--)

      {

           beep=0;

           delay(100);

           beep=1;

           delay(200);

      }

}

//Bell.c//

//Ds1302.h//

void ds1302_write(char comm,char dat1);

char ds1302_read(char comm);

//Ds1302.h//

//Key.h//

void key();

//key.h//

//Bell.h//

void didi(uint cnt);

//Bell.h//

更多相关推荐:
基于单片机数字温度计开题报告

云南大学旅游文化学院毕业设计论文开题报告课题名称基于单片机数字温度计设计院系云南大学旅游文化学院信科系专业电子信息工程学号学生姓名指导教师职称助教题目类型应用研究20xx年12月6日一选题依据二研究设计实施方案...

基于单片机的数字温度计设计开题报告

大学综合性设计实验开题报告学生专业同组人指导老师20xx年4月1国内外现状及研究意义随着科技的不断发展现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长而如何准确而又迅速的获得这些参数就需要受制于现...

开题报告基于单片机的电子体温计的设计

本科毕业设计论文开题报告题目基于单片机的电子温度计的设计课题类型设计实验研究论文学生姓名学号专业班级学院电气工程学院指导教师薛树功开题时间20xx年3月日20xx年3月12日一毕业设计论文内容及研究意义价值设计...

开题报告基于DS18B20数字温度计的设计--

XXXX大学综合电子课程设计开题报告设计项目基于DS18B20的数字温度计的设计指导教师XX专业班级XX级电子信息工程项目负责人XXX项目组成员XXX制表信息与计算机工程学院电子信息系20xx年6月23日一立论...

基于单片机的数字温度计设计

攀枝花学院专业基础综合实验报告基于单片机的数字温度计设计摘要在日常生活及工农业生产中经常要检测温度传统的方式是采用热电偶或热电阻其硬件电路和软件调试比较复杂制作成本较高近年来随着科技的飞速发展单片机的应用正不断...

基于单片机的数字温度计设计开题报告(封杰)

苏州市职业大学毕业设计开题报告

基于单片机数字温度计开题报告

毕业设计论文开题报告课题名称院系专业学号学生姓名指导教师职称基于单片机数字温度计设计20xx年9月6日一选题依据二研究设计实施方案三前期工作四研究基础条件五指导教师意见六开题小组意见七系意见

基于单片机的家用热水器控制器的设计开题报告

毕业论文设计论文题目系部名称学生姓名指导教师开题报告基于单片机的家用热水器控制器的设计信息工程系专业班级自动081学号20年月日毕业论文设计开题报告毕业论文设计开题报告458911112131415

毕业设计—基于单片机数字温度计

毕业设计报告论文报告论文题目基于单片机的数字温度计设计作者所在系部作者所在专业作者所在班级作者姓名作者学号指导教师姓名完成时间20xx年6月10日业学院教务处制工业学院摘要论文所介绍的数字温度计使用AT89S5...

基于单片机数字温度计开题报告

毕业设计论文开题报告课题名称基于单片机数字温度计设计院系专业学号学生姓名指导教师职称20xx年9月6日一选题依据二研究设计实施方案三前期工作四研究基础条件五指导教师意见六开题小组意见七系意见

基于at89c52单片机的数字电压表设计开题报告

岭南师范学院本科生毕业设计论文开题报告1指导教师审阅并接受二级学院和学校检查2

基于单片机的温度传感器设计 开题报告

天津理工大学本科毕业设计开题报告

基于单片机的数字温度计设计开题报告(21篇)