基于单片机可编程作息时间控制器设计与制作

更新时间:2024-05-24 13:22:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

江西理工大学专科毕业论文

可 编 程 作 息 时 间 控 制 器 设 计 与 制作

摘 要:

本文介绍了一款基于AT89S52单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。论文重点阐述了数字钟硬件中主控制模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作;软件同样采用模块化的设计, 本设计实现了时间与闹钟的修改功能、语音播报功能、年、月、日和星期等的显示功能。并且通过对比实际的时钟,查找出了误差的来源,确定了调整误差的方法,尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。

本次设计过程在硬件与软件方面是进行同步设计。硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。

关键词:

时钟电钟;DS1302;DS18B20;动态扫描;单片机

ABSTRACT

This article describes an AT89S52 microcontroller based digital clock design, through multi-functional digital clock design ideas, detailed description of the system hardware and software realization process. Paper focuses on the digital clock in the main control module hardware, the clock modules, display modules and associated control modules, modular design and production; software as modular design, the design and implementation of the changes of time and alarm functions, voice broadcast function, year, month, day and week, etc. display. And by comparing the actual clock, find out the source of the error, the error of the method of determining the adjustment, as much as possible to reduce errors

Enable the system to achieve a practical digital clock within allowable error.

Hardware mainly by the AT89C52 microcontroller, LED display circuit, and the tune composed of the circuit when the button. In the SCM choice I used the AT89C52 microcontroller, which is suitable for many of the more complex control applications. Monitor the use of two 7SEG--MPX8--CA and a 7SEG--MPX4--CA. 7SEG-MPX8-CA is a total of eight-yang display 7SEG-MPX4-CA is a total of four-yang diode display. In order to more easily control the three monitors, I use three 74HC164 to drive.74HC164 is an 8-bit edge-triggered shift register, serial input data, and parallel output. The software includes calendar program, time to adjust procedures, turn the lunar calendar programs display programs. Programs written in assembly language used in order to more easily adjust the time and the realization of the lunar calendar display. All programming is complete, the wave software debugging,

Key words:

Clock electric clock:DS1302;DS18B20:DYNAMIC ;SCANSCM

江西理工大学专科毕业论文

目 录

摘要??????????????????????????6 ABSTRACT????????????????????????7 前言??????????????????????????10

一. 设计要求与方案探讨 ???????????????????11 1.1 设计目的与意义 ????????????????????????????10 1.2 设计要求 ???????????????????????????????11 1.3 系统基本方案选择探讨 ????????????????????????11 1.3.1主控制芯片的选择方案探讨 ?????????????????????11 1.3.2 时钟芯片的选择方案探讨 ??????????????????????12 1.3. 3 LED显示系统选择方案探讨 ?????????????????????13 二.硬件设计???????????????????????14 2.1系统电路设计框图 ???????????????????????????14 2.2 系统硬件设计概述 ??????????????????????????14 2.3系统主要基本单元电路的设计??????????????????????????14 2.3.1主控制系统电路的设计 ???????????????????????14 2.3.2时钟电路的设计 ???????????????????????????16 2.3.3 LED显示电路的设计 ?????????????????????????? 17 2. 4 系统电路原理说明 ????????????????????????18 三、软件设计 ??????????????????????22 3.1程序流程框图 ?????????????????????????????22 3.2 子程序的设计 ?????????????????????????????24 3.2.1 读、写DS1302子程序 ????????????????????????25 四、硬件与软件调试?????????????????????2 4.1硬件调试 ???????????????????????????????25 4.2软件调试????????????????????????????????27

4.3调试结果分析与结论???????????????????????????29 4.3.1 调试结果分析????????????????????????????29 4.3.2 调试结论??????????????????????????????29 五、论文总结 ???????????????????????30 参考文献?????????????????????????30 附录一:系统电路图??????????????????????31 附录二:系统程序清单 ????????????????????32 致谢 ?????????????????????????50

江西理工大学专科毕业论文

前言

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

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

本文通过对一个能实现按键开关可调整年、月、日、周、时、分、秒,且具有测温功能、定点报时的24小时制的时间系统的设计学习,详细介绍了单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机汇编语言系统的实现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。系统由单片机、独立式按键、时钟芯片、LED数码管、蜂鸣器等部分构成,能实现24小时制年、月、日、周、时、分、秒等时钟显示。同时也可进行年、月、日、周、时、分、秒的校准、定点报时和LED数码管显示。

一、设计要求与方案论证 1.1设计目的与意义

(1)在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,培养动手能力和解决实际问题的经验让学生接触专用时钟芯片DS1302,并会用DS1302芯片开发时钟系统,应用到其他系统中去。熟悉WAVE软件调试程序和仿真. (2)、通过实验提高对单片机的认识;

(3)通过实验提高焊接、布局、电路检查能力; (4)、通过实验提高软件调试能力;

(5) 进一步熟悉和掌握单片机的结构及工作原理。

(6) 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表

关电路参数的计算方法。

(7)通过实际程序设计和调试,逐步掌握系统化程序设计方法和调试技术。 (8) 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。

1.2 设计要求:

① 具有年、月、日、星期、时、分、秒等功能; ② 时间与阴、阳历能够自动关联;

③ 具备年、月、日、星期、时、分、秒校准功能;

1.3 系统基本方案探讨 1.3.1主控制芯片的选择方案探讨:

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作, 与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行硬件与软件调试时,由于对程序的错误修改或对程序的新增功能需要烧入程序时,调试麻烦,并且这样对芯片的多次拔插会对芯片造成一定的损坏。 方案二:

采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,具有3个16位定时器/计数器,8个中断源,同样具有AT89C51的功能,且具有ISP在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

可见AT89S52更能满足各方面的设计要求,减少不必要的麻烦,所以选择采用AT89S52作为主控制系统.

1.3.2时钟芯片的选择方案探讨:

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现

江西理工大学专科毕业论文

的时间误差较大。设计的数字钟误差不能太大,所以不采用此方案。 方案二:

可以采用DS1302时钟芯片, DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,而且精度高 工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。 但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 所以采用DS1302时钟芯片,更加可靠,稳定。

1.3.3显示系统选择方案探讨:

方案一:

采用LED液晶显示屏,液晶显示屏的显示功能强大, 需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示系统(字符或点阵),可显示大量文字,图形,显示多样,清晰可见,但是这次设计显示主要是数字,没有大量文字,图形显示,并且价格昂贵,需要的接口线多,所以在此设计中不会采用LED液晶显示屏. 方案二:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 综上所述,所以采用了LED数码管作为显示。

1.3 电路设计最终方案决定

综上各方案所述,对此次毕业设计的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;数字式温度传感器DS18B20作为温度传感器;LED数码管动态扫描作为显示。

二.硬件设计

2.1 电路设计方案图

LED数码管动态扫描显示系统 AT89S52 主控制模 块 键盘系统

DS1302时钟系统 2.2 系统硬件设计概述

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由时钟芯片DS1302提供,它是一种高性能、低功耗、可靠稳定,带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由21个数码管,74ls138、74ls47译码器等构成。使用LED数码管动态扫描显示方式对数字的显示。

温度采集系统 2.3 系统主要单元电路的设计

2.3.1系统主控制电路的设计

At89s52 是一种低功耗、高性能CMOS8位微控制器,是具有40引脚双列直插芯片,具有 8K 在系统可编程Flash 存储器。与工业80C51 产品指令和引脚完 全兼容。具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口通信 。 有四个I/O口P0,P1,P2,P3,功能如下: 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),具体如下表所示。

本设计系统设计如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示

图-1 主控制系统电路

2.3.2时钟电路的设计

为了实现系统报警计时等功能,此设计采用了DS1302实时时钟芯片 。DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同

步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

图-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在VSS大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。

DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。下图DS1302与89s52的连接图,其中,时钟的显示用LCD。

图-2 DS1302与主控制系统连接电路

2.3.3显示系统电路的设计

如图-5所示,采用LED数码管动态扫描显示,由21个数码管,3-8译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的输出端作为选

江西理工大学专科毕业论文

通位码,每位选择相应的列。74ls47接240Ω限流电阻,再接共行的LED数码管的断码。

图-4 LED

动态扫描显示电路电路

2.4 系统电路原理及说明

(1)单片机AT89S52的工作原理: 1.1引脚功能及结构

具有8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz 、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符等结构与功能。

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.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.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端为高电平,CPU则执行内部程序存储器的指令。 (2) 时钟芯片DS1302的工作原理: 2.1 引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字

节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在VCC>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。 下图为DS1302的引脚功能图:

DS1302封装图

2.2 DS1302的控制字节

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

RAM RD 1 A4 A3 A2 A1 A0 / CK /WR 表-1 DS1302的控制字格式

2.3 数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,

江西理工大学专科毕业论文

其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

为了实现系统报警计时等功能,此设计采用了DS1302实时时钟芯片。DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 2.1 引脚功能及结构 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK始终是输入端。

三、软件设计

3.1.0主程序流程框图

读、写日期、时间 分离日期\\时间\\显示值 显示子程序 初始化 开始

图-A 主程序流程图

定时闹铃子程序 日期、时间修改子程序 农历自动更新子程序 闰月子程 返回 江西理工大学专科毕业论文

3.1.1计算阳历程序流程图

图-B计算阳历程序流程图

3.1.2时间调整程序流程图

图-C 时间调整程序流程图

江西理工大学专科毕业论文

3.1.3阴历程序流程图

图-D 阴历程序流程图 3.2 子程序的设计

3.2.1 读、写DS1302子程序 写1302程序WRITE: CLR SCLK NOP SETB RST NOP

MOV A, 32H MOV R4, #8 WRITE1:

RRC A ;送地址给1302 NOP NOP CLR SCLK

NOP NOP NOP

MOV IO, C NOP NOP NOP SETB SCLK NOP NOP

DJNZ R4, WRITE1 CLR SCLK

NOP

MOV A, 31H MOV R4, #8 WRITE2: RRC A

NOP ;送数据给1302 CLR SCLK NOP NOP

MOV IO, C NOP NOP NOP

SETB SCLK NOP NOP

DJNZ R4, WRITE2 CLR RST RET

;读1302程序 READ: CLR SCLK

NOP

NOP

MOV IO, C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP

DJNZ R4, READ1 MOV R4, #8 READ2: CLR SCLK

NOP ;从1302中读出数据 NOP

NOP

MOV C, IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP

DJNZ R4, READ2 MOV 31H, A CLR RST RET

NOP SETB RST NOP

MOV A, 32H MOV R4, #8 READ1:

RRC A ;送地址给1302

四. 软件硬件联调 4.1硬件调试

本系统已符合设计基本要求,即可以实现24小时方式;可使用按键开关可

现时、分调整。

除了满足这些基本要求外,本系统还做了一些创新:

通过功能按键开关KEY1进入可进入时间校准系统。KEY2控制秒的校准,KEY3控制分的校准,KEY4控制时的校准。每次一有校准按键按下时,系统会发出不同的声响,以提示用户目前正在校准的是时、分、秒的哪一种。校准完成后仍然是通过功能按键KEY1返回时钟显示。

通过更改主程序中定时器的定时初值,可实现不同样式的数字钟显示方式。通过实验测得以下参数如表2所示(程序中定时参数CYCLE在以下简称C): C (ms) 数码管显示方式 0?C?1 1?C?30 30?C 静态 闪烁 拉幕式

江西理工大学专科毕业论文

最后电子万年历的电路系统较大,对整个电路线路检查一次,逐步去检查每个线路端点,看接线牢固不牢固,可见对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。

在本成电子万年历的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,

涉及DS1302与CPU的连接时要注意,DS1302与CPU的连接时,在硬件调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。具有3-4线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2μA (典型值),省电模式时小于1μA,工作电压为2.4V~3.3V,显示清晰。

4.2软件调试

电子成年历是多功能的数字钟,可以看当前日期(阴、阳历),时间,还有温度的仪器。电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的系统子程序的修改,一步一步的完成,最终解决了软件。

一. 烧入程序后,看LED数码管能否稳定显示,而且亮度均匀。再通过按键

来更改时间是否成功,就是能否修改时间,能就成功。

二. 修改时间、日期时没有农历没有自动对应上。把不相关的程序暂时屏

蔽,地农历的子程序独立调试,如发现在调用农历自动更新时,对十进制和十六进制处理不好,所以会造成错乱。最后把相应的十进制进行修改,使得可以与十六进制对应,这样就行了。

4.3调试结果分析与结论

4.3.1 调试结果分析

(1).在调试中遇到发光二极管、LED数码管为不显示时,首先使用试测仪对电路进行调试,观察是否存在漏焊,虚焊,或者元件损坏;或是软件上有什么问题,有什么错误等。

(2).LED 数码管显示不正常,还有亮度不够,首先使用试测仪对电路进行调试,观察电路是否存在短路现象。查看烧写的程序是否正确无误,对程序进行认真修改。 4.3.2 调试结论

在本设计中,为了设计的顺利进行,我在实验箱上进行了部分调试,因为

电路太复杂,在实验箱上不可能整体电路进行调试。调试后,我就自己焊接了一个试验板进行调试。以确保最后能很好的完成其各部分功能。

最后经过多次的反复调试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.

江西理工大学专科毕业论文

五、论文总结

在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。我从资料的收集中,掌握了很多单片机、LED显示屏的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机、LED显示屏的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。

脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次论文中学了很多很多东西,这是最重要的。

参考文献

1刘勇 编 数字电路 电子工业出版社 2004

2陈正振 编 电子电路设计与制作 广西交通职业技术学院信息工程系 2007 3杨子文 编 单片机原理及应用 西安电子科技大学出版社 2006 4王法能 编 单片机原理及应用 科学出版社 2004

5张友德、赵志英等 编 单片微型机原理、应用与实验 上海:复旦大学出版 2003第四版

6钱晓揭. 16/32位微机原理、汇编语言及接口技术[M].机械工程出版社 2005年 7吴金. 8051单片机实践与应用[M].清华大学出版社,2002年

8谢自美.电子线路设计?试验?测试(第二版)[M].华中科技出版社 2002年

9张疑坤,陈善久,裘雪红.单片微型计算机原理及应用[M].西安电子科技大出版 社2003年

10马忠梅编著《单片机的C语言应用程序设计》北京航空航天大学出版社,1999年

11王幸之编著 《单片机应用系统抗干扰技术》北京航空航天大学出版社,2000年

12]赵茂泰.智能仪器原理及应用.电子工业出版社,2004:100-156

2010年4月10日

附录二:系统电路图

江西理工大学专科毕业论文

附录二:系统程序清单

程序如下: CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 Year DATA 66H MONTH DATA 65H WEEK DATA 64H DAY DATA 63H HOUR DATA 62H MINTUE DATA 61H SECOND DATA 60H

ORG 0000H LJMP START ORG 001BH LJMP INTT1

START: ; LCALL ZJ SETB EA

MOV SCON, #00H ; 方式0

MOV TMOD, #10H ;式1

MOV TL1, #00H

初值 串行输出,计数器1,方 MOV TH1, #00H MOV 32H, #8EH

MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H, #90H

MOV 31H, #0A6H ;1302充电,充电电流1.1MA LCALL WRITE

;主程序~~~~~~~~~~~~~~~~~~~~~ MAIN1:

MOV 32H,#8DH ;读出年 LCALL READ MOV year, 31H

MOV 32H,#8BH ;读出星期 LCALL READ MOV week, 31H

MOV 32H,#89H ;读出月 LCALL READ MOV month, 31H

MOV 32H,#87H ;读出日 LCALL READ MOV day, 31H

MOV 32H, #85H ;读出小时 LCALL READ MOV hour, 31H

MOV 32H,#83H ;读出分钟 LCALL READ

MOV MINTUE, 31H

MOV 32H,#81H ;读出秒 LCALL READ MOV second, 31H

;~~~~~~~~~~~~分离缓存~~~~~~~~ MOV R0,year ;年分离,送显示缓存

LCALL DIVIDE MOV 7BH, R1 MOV 4BH, R1 MOV 7CH, R2 MOV 4CH, R2 MOV 78H, week MOV 48H, week

MOV R0,month ;月分离,送显示缓存

LCALL DIVIDE MOV 79H, R1 MOV 49H, R1 MOV 7AH, R2 MOV 4AH, R2

MOV R0,day ;日分离,送显示缓存

LCALL DIVIDE MOV 76H, R1 MOV 46H, R1 MOV 77H, R2 MOV 47H, R2

MOV R0,hour ;小时分离,送显示缓存

LCALL DIVIDE MOV 74H, R1 MOV 44H, R1 MOV 75H, R2

MOV 45H, R2

MOV R0,mintue ;分钟分离,送显示缓存

LCALL DIVIDE MOV 72H, R1 MOV 42H, R1 MOV 73H, R2 MOV 43H, R2

MOV R0,second ;秒分离,送显示缓存

LCALL DIVIDE MOV 70H, R1 MOV 40H, R1 MOV 71H, R2 MOV 41H, R2 CLR EA LCALL TOUTOU SETB EA LCALL DISPLAY

LCALL GENGXIAN ;更新农历程序

JNB P0.1, SETG111 JNB F0, SSS

SETB P0.4 ;非闰月,则p0.4清零,指示灯亮 LJMP MAIN1 SETG111: LJMP SETG SSS:

CLR P0.4 ;闰月,则p0.4置位,指示灯不亮 LJMP MAIN1

;~~~~~~~~~~~~~~ 温度 TOUTOU:

江西理工大学专科毕业论文

LCALL CHUSHI LCALL RDTEMP MOV A, TEMPL ANL A, #11110000B MOV TEMPL, A MOV A, TEMPH ANL A, #00000111B ORL A, TEMPL SWAP A MOV 25H, A MOV A, 25H MOV B, #64H DIV AB MOV A, B MOV B, #0AH DIV AB SWAP A ORL A, B MOV 10H, A RET CHUSHI: LCALL RESET MOV A, #0CCH LCALL WRITE111 MOV A, #4EH LCALL WRITE111 MOV A, #CONFIG12 LCALL WRITE111 RET RDTEMP: LCALL RESET MOV A, #0CCH LCALL WRITE111 MOV A, #44H LCALL WRITE111

LCALL DL1MS LCALL RESET MOV A, #0CCH LCALL WRITE111 MOV A, #0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL, A LCALL ERAD111 MOV TEMPH, A RET RESET: LA: SETB DAT MOV 52H, #200 LB: CLR DAT DJNZ 52H, LB SETB DAT MOV 52H, #30 LC:

DJNZ 52H, LC CLR C ORL C, DAT JC LB MOV 58H, #80 LD:

ORL C, DAT JC LP DJNZ 58H, LD SJMP LA LP:

MOV 52H, #250 LF:

DJNZ 52H, LF

RET WRITE111: MOV 53H, #8 W51HA: SETB DAT MOV 54H, #8 RRC A CLR DAT W52HA:

DJNZ 54H, W52HA MOV DAT, C MOV 54H, #30 W53HA:

DJNZ 54H, W53HA DJNZ 53H, W51HA SETB DAT RET ERAD111: CLR EA MOV 58H, #8 RD1A: CLR DAT MOV 54H, #6 NOP SETB DAT RD2A:

DJNZ 54H, RD2A MOV C, DAT RRC A MOV 55H, #30 RD3A:

DJNZ 55H, RD3A DJNZ 58H, RD1A SETB DAT RET

;

~~~~~~~~~~~~~~~~~~~~~ SETG : SETB TR1 SETB ET1 MOV 32H, #8EH

MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H, #80H

MOV 31H,#80H ;1302停止振荡

LCALL WRITE

GWAIT: ~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.1, GWAIT SETG1:

LCALL DISPLAY JNB P0.1, SETG2 JNB P0.2, GADDYEAR JNB P0.3, JIANYEAR AJMP SETG1 GADDYEAR:

MOV R7,66H ;年加一 LCALL ADD1 MOV 66H, A

CJNE A, #51H, GADDYEAR1 MOV 66H, #00H AJMP GADDYEAR1 JIANYEAR:

MOV R7,66H ;年减一 LCALL JIAN1 MOV 66H, A

CJNE A, #00H, GADDYEAR1 MOV 66H, #51H

江西理工大学专科毕业论文

GADDYEAR1:

MOV 32H,#8CH ;年值送人1302 MOV 31H, 66H LCALL WRITE MOV R0, 66H

LCALL DIVIDE ;年分离送显示缓存

MOV 4BH, R1 MOV 7BH, R1 MOV 4CH, R2 MOV 7CH, R2

WAITT1: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2, WAITT1 JNB P0.3, WAITT1 AJMP SETG1 SETG2:

SETB 0AH ;调月时闪标志 GWAIT2:

LCALL DISPLAY JNB P0.1, GWAIT2 SETG3:

LCALL DISPLAY JNB P0.1, SETG4 JNB P0.2, GADDMONTH JNB P0.3, JIANMONTH AJMP SETG3 GADDMONTH:

MOV R7,65H ;月加一 LCALL ADD1 MOV 65H, A

CJNE A, #13H, GADDMONTH1 MOV 65H, #01H AJMP GADDMONTH1 JIANMONTH:

MOV R7,65H ;月减一 LCALL JIAN1 MOV 65H, A

CJNE A, #00H, GADDMONTH1 MOV 65H, #12H GADDMONTH1:

MOV 32H,#88H ;月值送人1302 MOV 31H, 65H LCALL WRITE MOV R0, 65H

LCALL DIVIDE ;月分离,送显示缓存

MOV 79H, R1 MOV 49H, R1 MOV 7AH, R2 MOV 4AH, R2

WAITT2: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2, WAITT2 JNB P0.3, WAITT2 AJMP SETG3 SETG4:

SETB 0BH ;调日时闪标志 GWAIT4:

LCALL DISPLAY JNB P0.1, GWAIT4 SETG5:

LCALL DISPLAY JNB P0.1, SETG6 JNB P0.2, GADDDAY JNB P0.3, JIANDAY AJMP SETG5 GADDDAY:

MOV R7,63H ;日加一 LCALL ADD1

MOV 63H, A

CJNE A, #32H, GADDDAY1 MOV 63H, #01H JIANDAY:

MOV R7,63H ;日减一 LCALL JIAN1 MOV 63H, A

CJNE A, #00H, GADDDAY1 MOV 63H, #31H GADDDAY1:

MOV 32H,#86H ;日值送人1302 MOV 31H, 63H LCALL WRITE MOV R0, 63H

LCALL DIVIDE ;日分离,送显示缓存

MOV 76H, R1 MOV 46H, R1 MOV 77H, R2 MOV 47H, R2 WAITT3:

;~~~~~~~~~~~~~~~~~~~~

LCALL

DISPLAY

JNB P0.2, WAITT3 JNB P0.3, WAITT3 AJMP SETG5 SETG6:

SETB 0CH ;调星期时闪标志 GWAIT6:

LCALL DISPLAY JNB P0.1, GWAIT6 SETG7:

LCALL DISPLAY JNB P0.1, SETG8 JNB P0.2, GADDWEEK

JNB P0.3, JIANWEEK AJMP SETG7 GADDWEEK:

MOV R7,64H ;星期加一 LCALL ADD1 MOV 64, A

CJNE A, #07H, GADDWEEK1 MOV 64H, #00H AJMP GADDWEEK1 JIANWEEK:

MOV R7,64H ;星期减一 LCALL JIAN1 MOV 64H, A

CJNE A, #00H, GADDWEEK1 MOV 64H, #06H GADDWEEK1:

MOV 32H, #8AH

MOV 31H,64H ;星期值送人1302

LCALL WRITE MOV R0, 64H

LCALL DIVIDE ;星期值分离送显示缓存

MOV 48H, R1 MOV 78H, R1 NOT

WAITT4: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY

JNB P0.2, WAITT4 JNB P0.3, WAITT4 AJMP SETG7 SETG8:

SETB 0DH ;调小时时闪标志 GWAIT8:

LCALL DISPLAY

江西理工大学专科毕业论文

JNB P0.1, GWAIT8 SETG9:

LCALL DISPLAY JNB P0.1, SETG10 JNB P0.2, GADDHOUR JNB P0.3, JIANHOUR AJMP SETG9 GADDHOUR:

MOV R7,62H ;小时加一 LCALL ADD1 MOV 62H, A

CJNE A, #24H, GADDHOUR1 MOV 62H, #00H AJMP GADDHOUR1 JIANHOUR:

MOV R7,62H ;小时减一 LCALL JIAN1 MOV 62H, A CJNE A,

#00H, GADDHOUR1

MOV 62H, #23H GADDHOUR1:

MOV 32H,#84H ;小时值送人1302

MOV 31H, 62H LCALL WRITE MOV R0, 62H

LCALL DIVIDE ;小时值分离送显示缓存 MOV 74H, R1 MOV 44H, R1 MOV 75H, R2 MOV 45H, R2

WAITT5: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY

JNB P0.2, WAITT5 JNB P0.3, WAITT5 AJMP SETG9 SETG10:

SETB 0EH ;调分时候闪标志 GWAIT10: LCALL DISPLAY JNB P0.1, GWAIT10 SETG11:

LCALL DISPLAY

JNB P0.1, SETGOUT JNB P0.2, GADDMINTUE JNB P0.3, JIANMINTUE AJMP SETG11 GADDMINTUE:

MOV R7,61H ;分钟加一 LCALL ADD1

MOV 61H, A

CJNE

A,

#60H,

GADDMINTUE1 MOV 61H, #00H AJMP GADDMINTUE1 JIANMINTUE:

MOV R7,61H ;分钟减一 LCALL JIAN1 MOV 61H, A CJNE

A,

#00H,

GADDMINTUE1 MOV 61H, #59H GADDMINTUE1:

MOV 32H,#82H ;分钟值送人1302

MOV 31H, 61H LCALL WRITE

MOV R0, 61H

LCALL DIVIDE ;分钟值分离送显示缓存

MOV 72H, R1 MOV 42H, R1 MOV 73H, R2 MOV 43H, R2 WAITT6:

LCALL DISPLAY JNB P0.2, WAITT6 JNB P0.3, WAITT6 AJMP SETG11 SETGOUT: LCALL DISPLAY JNB P0.1, SETGOUT LCALL GENGXIAN MOV 32H, #80H

MOV 31H,#00H ;1302晶振开始振荡

LCALL WRITE MOV 32H, #8EH

MOV 31H,#80H ;禁止写入1302

LCALL WRITE CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH

CLR ET1 ;关闪中断 CLR TR1

LJMP MAIN1

;;闪动调时程序~~~~~~~~~~~~~~~~ INTT1: PUSH ACC PUSH PSW GFLASH: CPL 0FH

JB 0FH, GFLASH1 MOV 7CH,4CH ;全部显示 MOV 7BH, 4BH MOV 7AH, 4AH MOV 79H, 49H MOV 78H, 48H MOV 77H, 47H MOV 76H, 46H MOV 75H, 45H MOV 74H, 44H MOV 73H, 43H MOV 72H, 42H MOV 71H, 41H MOV 70H, 40H GFLASHOUT: POP PSW POP ACC RETI GFLASH1:

JB 0AH,GFLASH2 ;调年闪 MOV 7CH, #0FH MOV 7BH, #0FH AJMP GFLASHOUT GFLASH2:

JB 0BH,GFLASH3 ;调月闪 MOV 7AH, #0FH MOV 79H, #0FH

江西理工大学专科毕业论文

AJMP GFLASHOUT GFLASH3:

JB 0CH,GFLASH4 ;调日闪 MOV 77H, #0FH MOV 76H, #0FH AJMP GFLASHOUT GFLASH4:

JB 0DH,GFLASH5 ;调星期闪 MOV 78H, #0FH AJMP GFLASHOUT GFLASH5:

JB 0EH,GFLASH6 ;调小时闪 MOV 75H, #0FH MOV 74H, #0FH AJMP GFLASHOUT GFLASH6:

MOV 73H,#0FH ;调分钟闪 MOV 72H, #0FH AJMP GFLASHOUT ;加

~~~~~~~~~~~~~~~~~~~~~~~~~

ADD1:

MOV A, R7 ADD A, #1 DA A RET ;

~~~~~~~~~~~~~~~~~~~~~~~~~ JIAN1: MOV A, R7 DEC A

CJNE A, #4FH, KK1 MOV A, #49H

KK1:

CJNE A, #3FH, KK2 MOV A, #39H KK2:

CJNE A, #2FH, KK3 MOV A, #29H KK3:

CJNE A, #1FH, KK4 MOV A, #19H KK4:

CJNE A, #0FH, KK5 MOV A, #09H KK5: RET ;分

~~~~~~~~~~~~~~~~~~~~~~~~~

DIVIDE:

MOV A, R0 序

ANL A, #0FH MOV R1, A MOV A, R0 SWAP A

ANL A, #0FH MOV R2, A RET 序

;写

1302

~~~~~~~~~~~~~~~~~~~~~~~~~~

WRITE: CLR SCLK NOP SETB RST

NOP

MOV A, 32H MOV R4, #8 WRITE1:

RRC A ;送地址给1302 NOP NOP CLR SCLK NOP NOP NOP

MOV IO, C NOP NOP NOP SETB SCLK NOP NOP

DJNZ R4, WRITE1 CLR SCLK NOP

MOV A, 31H MOV R4, #8 WRITE2: RRC A

NOP ;送数据给1302 CLR SCLK NOP NOP

MOV IO, C NOP NOP NOP SETB SCLK NOP

NOP

DJNZ R4, WRITE2 CLR RST RET ;读

1302

~~~~~~~~~~~~~~~~~~~~~~~~~

READ: CLR SCLK NOP NOP SETB RST NOP

MOV A, 32H MOV R4, #8 READ1:

RRC A ;送地址给1302 NOP

MOV IO, C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP

DJNZ R4, READ1 MOV R4, #8 READ2: CLR SCLK

NOP ;从1302中读出数据

江西理工大学专科毕业论文

NOP NOP

MOV C, IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP

DJNZ R4, READ2 MOV 31H, A CLR RST RET

;BCD码转换为10进制程序~~~~~ BCD_10: MOV A, R0 ANL A, #0FH

MOV R1,A ;高位×10, 加低位 MOV A, R0 SWAP A

ANL A, #0FH MOV B, #10 MUL AB ADD A, R1 MOV R0, A RET

;查一年数据程序~~~~~~~~~~~~~~~~

CHECKMONTH: LCALL BCD_10

;农历和公历为同一年,

;NEW此时R2中的值为FFH时,R3有值,否则为0 NEW: NOP M1:

MOV A,R2 ;R2减一月天数 CLR C

SUBB A, #29 MOV R1, A MOV A, R6 JB ACC.6, SM11 MOV A, R2 CLR C SUBB A, #30 MOV R1, A SM11: JC SM12

MOV A,R1 ;R2减1月天数,够减

MOV R2,A ;转二月 AJMP M2 SM12:

CJNE R3,#00H,M13 ;R2减1月天数 LJMP Y1 ;不够减,判R3为0否 M13:

MOV A,R2 ;不为0,R3加到R2中

ADD A,R3 ;再让一月减 MOV R2,A ;还不够,则

转Y1

MOV R3, #00H AJMP M1 M2:

CLR C ;R2减一月天数,够减

MOV A,R2 ;转三月 SUBB A, #29 MOV R1, A MOV A, R6 JB ACC.5, M21 MOV A, R2 CLR C

SUBB A, #30 MOV R1, A M21: JC M22

MOV A,R1 ;R2减2月天数,够减 MOV R2, A AJMP MM2 M22:

CJNE R3,#00H,M23 ;R2减2月天数

LJMP Y2 ;不够减,判,R3为0否 M23:

MOV A,R2 ;不为0,R3加到R2中

ADD A,R3 ;再让二月减 MOV R2,A ;还不够,则转Y2

MOV R3, #00H AJMP M2 MM2:

LCALL CHECKRE ;查2月,如果不

为闰月

CJNE A,#02H,M3 ;转3月 RM2:

MOV A, R4 ANL A, #0FH JNZ RM21 MOV A, R2 CLR C

SUBB A, #30 MOV R1, A AJMP RM22 RM21:

MOV A, R2 CLR C

SUBB A, #29 MOV R1, A RM22: JC RM23

MOV A,R1 ;R2减闰2月天数,够减

MOV R2,A ;转3月 AJMP M3 RM23:

CJNE R3,#00H,RM24 ;R2减闰2月天数

LJMP RY2 ;不够减,判,R3为0否 RM24:

MOV A,R2 ;不为0,R3加到R2中

ADD A,R3 ;再让闰2月减 MOV R3,#00H ;还不够,则转RY2

SUBB A, #30

江西理工大学专科毕业论文

MOV R1, A M121:

CJNE R3,#00H,M122 ;R2减12月天数

LJMP Y12 ;不够减,判,R3为0否 M122:

MOV A,R2 ;不为0,R3加到R2中

ADD A,R3 ;再让12月减

MOV R2,A ;还不够,则转Y12

MOV R3, #00H LJMP M12 Y1:

MOV A, R2

MOV R0,A ;R2中为日的值 LCALL D_BCD MOV 56H, A MOV 57H, #01H CLR F0 ;非闰月 LJMP S_PLAY Y2:

CJNE R2, #00H, Y21 MOV A,R6 ;R2中为0,则为前一个月

MOV 56H,#29H ;的的最后一天 JB ACC.6, Y22 MOV 56H, #30H Y22:

MOV 57H, #01H CLR F0 LJMP S_PLAY Y21:

MOV A, R2

MOV R0,A ;R2中为日的值 LCALL D_BCD MOV 56H, A MOV 57H, #02H CLR F0 LJMP S_PLAY RY2:

CJNE R2,#00H,RY21

MOV 56H,#29H ;R2中为0,则为前一个月

MOV A,R6 ;的的最后一天 JB ACC.5, RY22 MOV 56H, #30H RY22:

MOV 57H, #02H CLR F0 LJMP S_PLAY RY21:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #02H SETB F0 ;闰月 LJMP S_PLAY Y3:

CJNE R2, #00H, Y31 LCALL CHECKRE ;查前一个月是否为闰月

CJNE A, #02H, Y32 MOV 56H,#29H ;前一个月是闰月

MOV A, R4

ANL A,#0FH ;R2中为0,则为前

一个月

JNZ Y33 ;的的最后一天

MOV 56H, #30H MOV 57H, #02H SETB F0 LJMP S_PLAY Y33:

MOV 57H, #02H SETB F0 LJMP S_PLAY Y32:

MOV 56H,#29H ;前一个月不是闰月

MOV A, R6 JB ACC.5, Y34 MOV 56H, #30H Y34:

MOV 57H, #02H CLR F0 LJMP S_PLAY Y31:

MOV A, R2

MOV R0,A ;R2中为日的值 LCALL D_BCD MOV 56H, A MOV 57H, #03H CLR F0 LJMP S_PLAY RY3:

CJNE R2, #00H, RY31

MOV 56H, #29H MOV A, R6

JB ACC.4,RY32 ;R2中为0,则

为前一个月

MOV 56H,#30H ;的的最后一天 RY32:

MOV 57H, #03H CLR F0 LJMP S_PLAY RY31:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #03H SETB F0 LJMP S_PLAY Y4:

CJNE R2, #00H, Y41

LCALL CHECKRE ;查前一个月是否为闰月

CJNE A, #03H, Y42

MOV 56H,#29H ;前一个月是闰月

MOV A,R4 ;R2中为0,则为前一个月

ANL A,#0FH ;的最后一天 JNZ Y43 MOV 56H, #30H MOV 57H, #03H SETB F0 LJMP S_PLAY Y43:

MOV 57H, #03H

SETB F0 LJMP S_PLAY Y42:

MOV 56H,#29H ;前一个月不是闰

江西理工大学专科毕业论文

MOV A, R6 JB ACC.4, Y44

MOV 56H, #30H Y44:

MOV 57H, #03H CLR F0 LJMP S_PLAY Y41:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #04H CLR F0 LJMP S_PLAY RY4: CJNE R2, #00H, RY41

MOV 56H,#29H ;R2中为0,则为前一个月

MOV A,R6 ;的的最后一天 JB ACC.2, RY42 MOV 56H, #30H RY42:

MOV 57H, #04H CLR F0 LJMP S_PLAY RY41:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #04H SETB F0

LJMP S_PLAY Y5:

CJNE R2, #00H, Y51

LCALL CHECKRE ;查前一个月是否为闰月

CJNE A, #04H, Y52 MOV 56H,#29H ;前一个月是闰月 MOV A,R4 ;R2中为0,则为前一个月

ANL A,#0FH ;的最后一天 JNZ Y53

MOV 56H, #30H MOV 57H, #04H SETB F0 LJMP S_PLAY Y53:

MOV 57H, #04H SETB F0

LJMP S_PLAY Y52:

MOV 56H,#29H ;前一个月不是闰月

MOV A, R6 JB ACC.2, Y54 MOV 56H, #30H Y54:

MOV 57H, #04H CLR F0 LJMP S_PLAY Y51:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #05H

CLR F0 LJMP S_PLAY RY5:

CJNE R2, #00H, RY51 MOV 56H,#29H ;R2中为0,则为前一个月

MOV A,R6 ;的最后一天 JB ACC.1, RY52 MOV 56H, #30H RY52:

MOV 57H, #05H CLR F0 LJMP S_PLAY RY51:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #05H SETB F0 LJMP S_PLAY Y6:

CJNE R2, #00H, Y61 LCALL CHECKRE ;查前一个月是否为闰月

CJNE A, #05H, Y62

MOV 56H,#29H ;前一个月是闰月

MOV A,R4 ;R2中为0,则为前一个月

ANL A,#0FH ;的最后一天 JNZ Y63 MOV 56H, #30H MOV 57H, #05H SETB F0

LJMP S_PLAY Y63:

MOV 57H, #05H SETB F0 LJMP S_PLAY Y62:

MOV 56H,#29H ;前一个月不是闰月

MOV A, R6 JB ACC.1, Y64 MOV 56H, #30H Y64:

MOV 57H , #05H CLR F0 LJMP S_PLAY Y61:

MOV A,R2 ;R2中为日的值 MOV R0, A LCALL D_BCD MOV 56H, A MOV 57H, #06H CLR F0 LJMP S_PLAY RY6:

CJNE R2, #00H, RY61

MOV 56H,#29H ;R2中为0,则为前一个月

MOV A,R6 ;的最后一天 JB ACC.0, RY62 MOV 56H, #30H RY62:

MOV 57H, #06H CLR F0 LJMP S_PLAY RY61:

本文来源:https://www.bwwdw.com/article/tsw7.html

Top