基于89C51单片机的万年历设计

上传人:1666****666 文档编号:36418382 上传时间:2021-10-31 格式:DOC 页数:20 大小:937KB
返回 下载 相关 举报
基于89C51单片机的万年历设计_第1页
第1页 / 共20页
基于89C51单片机的万年历设计_第2页
第2页 / 共20页
基于89C51单片机的万年历设计_第3页
第3页 / 共20页
点击查看更多>>
资源描述
实习设计报告实习设计报告第 页 共 20 页 目目 录录一、一、 设计目的设计目的 .二、二、任务要求任务要求.三、三、功能说明功能说明.四、四、实时时钟芯片实时时钟芯片 DS1302.4.1 DS1302 主要的性能指标:.4.2 DS1302 的基本组成和工作原理.4.3 DS1302 的寄存器.4.4 DS1302 的复位.五、五、硬件电路设计模块硬件电路设计模块.5.1 电源电路.5.2 控制电路.5.3 LED 显示电路.5.4 DS1302 在系统中的硬件电路.六、六、硬件安装及调试硬件安装及调试.6.1 安装中注意的问题.6.2 布线布局说明.6.2 安装调试中出现的问题:.七、七、软件调试及设计软件调试及设计.1.软件设计思想:.2.程序流程图:(见下页).八、八、设计中存在的问题设计中存在的问题.1.DS1302 工作的稳定性加入辅助电容实现负载匹配.2.乱码显示.九、九、设计总结设计总结.十、十、附录附录.附录一:元器件清单.附录二:系统电路图.附录三:设计 PCB 板图.附录四:万年历实物图.附录五:程序清单.实习设计报告实习设计报告第 页 共 20 页 一、 设计目的通过一个复杂的产品的设计、组装、调试及软件实现,从而将所学的理论知识与实践相结合,进一步巩固专业知识,掌握基本专业技能,切实加强动手能力,通过对实际产品各功能系统的研究,提升对理论知识的认识,两者结合,提高理论指导,解决实际问题的能力 为就业打下坚实的基础。二、 任务要求显示准确的北京时间(年、月、日、时、分、秒,年号只显示最后两位) ,12/24小时显示切换。随时可以调校时间。可整点报时。可掉电储存并记时。允许通过转换功能键转换显示时间或日期。三、 功能说明本设计是基于 89C51 单片机的万年历,特点在于利用 DS1302 计时。采用两个三位共阴数码管,及 7 个功能键。主要能实现时、分、秒显示,年、月、日显示,时、分、月、日调整,闹铃设置。可内置时间初值,也可利用按键调整时间初值。系统默认时间为 2006 年 10 月 21 日 11 时 59 分 50 秒。按键 P1.3、P1.4、 P1.5、P1.6 分别调整时加、时减、分加、分减。按下 P1.1 键,显示切换到日历显示,LED 显示年、月、日,初始值为 06 年 10 月 21日。按键 P1.3、P1.4、 P1.5、P1.6 分别调整月加、月减、日加、日减。P1.7 为设置键,对应一个红色发光二极管,按下 P1.7,设置键启动,红色二极管亮,此时可调整时间日期;再按下 P1.7 键,设置功能关闭,同时红色发光二极管灭,此时P1.3、P1.4、P1.5、P1.6 等调整键失效。P1.0 键为闹铃控制键,默认情况下闹铃关,对应的绿色发光二极管灭,按下 P1.0,闹铃开,同时绿色发光二极管亮,再按一下,闹铃关。闹铃开时,时间跳到设置的闹铃时间时,蜂鸣器响时 1 分钟。实习设计报告实习设计报告第 页 共 20 页 四、实时时钟芯片 DS1302DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和 31 字节静态 RAM,通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供秒分时日日期月年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式,DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线 1RES,复位 2I/O,数据线 3SCLK,串行时钟时钟/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信 DS1302 工作时功耗很低保持数据和时钟信息时功率小于 1mW。DS1302 是由 DS1202 改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应 Vcc1 为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等。4.1 DS1302 主要的性能指标:a)实时时钟具有能计算 2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力。b)31 8 位暂存数据存储 RAMc)串行 I/O 口方式使得管脚数量最少d)宽范围工作电压 2.0 5.5Ve)工作电流 2.0V 时,小于 300nAf)读/写时钟或 RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式g)8 脚 DIP 封装或可选的 8 脚 SOIC 封装根据表面装配h)简单 3 线接口i)与 TTL 兼容 Vcc=5Vj)可选工业级温度范围-40 +85k)与 DS1202 兼容,在 DS1202 基础上增加的特性l)对 Vcc1 有可选的涓流充电能力m)双电源管用于主电源和备份电源供应,备份电源管脚可由电池或大容量电容输入n)附加的 7 字节暂存存储器4.2 DS1302 的基本组成和工作原理DS1302 的管脚排列及描述如下图及表所示实习设计报告实习设计报告第 页 共 20 页 管脚描述X1 X2 32.768KHz 晶振管脚GND 地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚DS1302 内部寄存器CH: 时钟停止位寄存器 2 的第 7 位 12/24 小时标志CH=0 振荡器工作允许 bit7=1,12 小时模式CH=1 振荡器停止 bit7=0,24 小时模式WP: 写保护位寄存器 2 的第 5 位:AM/PM 定义WP=0 寄存器数据能够写入 AP=1 下午模式WP=1 寄存器数据不能写入 AP=0 上午模式TCS: 涓流充电选择 DS: 二极管选择位TCS=1010 使能涓流充电 DS=01 选择一个二极管TCS=其它禁止涓流充电 DS=10 选择两个二极管DS=00 或 11, 即使 TCS=1010, 充电功能也被禁止RS 位电阻典型位实习设计报告实习设计报告第 页 共 20 页 00 没有没有01 R1 2K10 R2 4K11 R3 8K4.3 DS1302 的寄存器DS1302 共有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为BCD 码形式。其日历、时间寄存器及其控制字见表 2。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302 与 RAM 相关的寄存器分为两类,一类是单个 RAM 单元,共 31 个,每个单元组态为一个 8 位的字节,其命令控制字为 COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的 RAM 寄存器,此方式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写) 、FFH(读) 。4.4 DS1302 的复位通过把 输入驱动置高电平来启动所有的数据传送。 输入有两种功能:首先, 接通控制逻辑,允许地址命令序列送入移位寄存器;其次, 提供了终止单字节或多字节数据的传送手段。当 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中置 为低电平,则会终止此次数据传送,并且 I/O 引脚变为高阻态。上电运行时,在 Vcc2.5V 之前, 必须保持低电平。只有在 SCLK 为低电平时,才能将 RST 置为高电平。实习设计报告实习设计报告第 页 共 20 页 五、硬件电路设计模块5.1 电源电路由于 C51 单片机的工作电压是 5V,而我们日常生活中用的电压一般是 220V 的市电,因此我们需要设计一个电源转换电路,电路见下图。该电路可分为变压电路,整流电路,滤波电路,稳压电路。整个电路输入是 220V 电压,输出是 5V 的电压,即为单片机和实时时钟的正常工作电压。1234ABCD4321DCBATitleNumberRevisionSizeA4Date:25-Oct-2006Sheet of File:F:sundanPCB万万万万万.ddbDrawn By:Vin1GND2Vout3U3027805C3014700uC30347uC3020.1uIN1IN2C3040.1uOUTD301D302D303D304D3051N4001T1220V7.5V1N 40011N 40011N 40011N 40011N 4001图 3-2 稳压电源电路5.2 控制电路利用 AT89C51 作为主控制器,在接口充足的情况下,考虑到编程容易,所以外接的 7个按键开关采用独立式按键。P1 口作为键盘接口。P1 口所接电阻起上拉作用,没有键按下时,将 P1 口置高电平。当有按键按下,该口拉为低电平。P1.0 口接的是报警蜂鸣器。实习设计报告实习设计报告第 页 共 20 页 123456ABCD654321DCBATitleNumberRevisionSizeBDate:25-Oct-2006Sheet of File:F:sundanPCB万万万万万.ddbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE /P30TXD11RXD10GND20VCC40U18051Y1C322pC222pVCCS6R210KR11KS2S3S1S4+C110uR31KR41KR51KR61KVCCR71KVCCS5R91KS6S7R81KQ?NPNU?BEL LR101KD4LE DD5LE D 5.3 LED 显示电路该显示部分有 2 个 3 位共阴数码管和两个驱动(74LS07 和 74LS48 组成) 。根据实际经验,虽然在不接驱动的情况下,数码管也可被驱动,但电流太小,亮度不够,因此采用74LS07 驱动数码管位选,用 74LS48 来驱动段选。123456ABCD654321DCBATitleNumberRevisionSizeBDate:25-Oct-2006Sheet of File:F:sundanPCB万万万万万.ddbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10GND20VCC40U18051VCCVCCC4104pVCCP00R18P03P06P05P04P07P02P01R17R16R15R14R13R12R11abfcgdedpabfcgdedpabfcgdeee1d2dp3c4g5b7万8f10万96a11万12dpDS1abfcgdedpabfcgdedpabfcgdeee1d2dp3c4g5b7万8f10万96a11万12dpDS2A1A2A3A1A4A2A3A4A7B1C2D6B14LT3RB15a13b12c11d10e9f15g14GND8VCC16U27448VCC1A11Y22A32Y43A53Y6GND74A94Y85A115Y106A136Y12VCC14U2Y1Y2Y3Y4Y5Y6abcdefgabcdefgabfcdegP20P21P22VCCVCC5.4 DS1302 在系统中的硬件电路DS1302 与 CPU 的连接仅需要三条线,即 SCLK(7) 、I/O(6) 、RST(5) 。DS1302 与 CPU连接的电路原理图如图所示。在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。在双电源系统中提供主电源,在这种运用方式下连接到备份电源,实习设计报告实习设计报告第 页 共 20 页 以便在没有主电源的情况下能保存时间信息以及数据。DS1302 由或两者中的较大者供电。当大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当小于时,DS1302 由供电。123456ABCD654321DCBATitleNumberRevisionSizeBDate:26-Oct-2006Sheet of File:F:sundanPCB万万万万万.ddbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10GND20VCC40U18051Y1C322pC222pVCC1122334455667788DS1302U?Y2C322pC222pB1 P20P21P22P20P21P22R141KR151KR161KVCC六、硬件安装及调试6.1 安装中注意的问题(1)晶体振荡器的接法:尽量要靠近 IC 插座,接地要尽量短,如果 IC 插座即 89C51的接线太长,而晶体振荡器的频率很高,在这种情况下,接线会呈现感性。(2)三极管(9013)极性判别:在安装过程中切记不能将三极管引脚接错,否则不仅得不到设计想要的结果,还可能会烧坏三极管,影响到整个电路的性能。 (3)在安装集成芯片的过成中,注意不要将芯片反接,否则会将芯片烧坏,引起不必要 的损失。(4)在直接接用 220V 的市电时应在电源电路设计中考虑到安全问题,在电路中接入保险丝,以便在电流超出电路板的负荷时能自动断开,不会造成事故。6.2 布线布局说明(1)在 PCB 设计中,布线与布局是一重要步骤:在整个 PCB 中,输入端与输出端的边线应避免相邻平行, 以免产生反射干扰。必要时应加地线隔离,两相邻层的布线要互相垂直,平行容易产生寄生耦合。(2)电源与地线的外理:尽量加宽电源、地线宽度,最好是地线比电源线宽,它们的关系是:地线电源线信号线,通常信号线宽为:0.20.3mm,最经细宽度可达0.050.07mm,电源线为 1.22.5 mm。用大面积铜层作地线用,在印制板上把没被用上的地方都与地相连接作为地线用。(3)大面积导体中连接腿的外理:在大面积的接地(电)中,常用元器件的腿与其连接,对连接腿的处理需要进行综合的考虑,就电气性能而言,元件腿的焊盘与铜面满接为好,但对元件的焊接装配就存在一些不良隐患如:焊接需要大功率加热器。容易造成实习设计报告实习设计报告第 页 共 20 页 虚焊点。所以兼顾电气性能与工艺需要,做成十字花焊盘,称之为热隔离(heat shield)俗称热焊盘(Thermal) ,这样,可使在焊接时因截面过分散热而产生虚焊点的可能性大大减少。(4)数字电路与模拟电路的共地处理:本电路是由数字电路和模拟电路混合构成的。因此在布线时需要考虑它们之间互相干扰的问题,特别是地线上的噪音干扰。数字电路的频率高,模拟电路的敏感度强,对信号线来说,高频的信号线应尽可能远离敏感的模拟电路器件,对地线来说,整个 PCB 对外界只有一个结点,所以必须在 PCB 内部进行处理数、模共地的问题,而在板内部数字地和模拟地实际上应该是分开的,它们之间互不相连,只是在 PCB 与外界连接的接口处(如插头等) ,数字地与模拟地有一点短接。6.2 安装调试中出现的问题:安装完后,各引脚电压正常,电源指示灯亮。进行软件调试过程中,出现以下问题。1)晶振的波形没有出来,原因:芯片的 5 脚虚焊,并且也存在接地问题解决方法:将 5 脚重新再焊一次,并纠正接地后就可以正常的工作。测晶振频率、波形,正确测量结果如下:波形为正弦波,f=11.0592MHz本设计测试时的结果如图 4-2 示图 4-2 晶振测试图2)芯片烧入程序后,程序不执行,检查发现 31 脚 ALE 没有接+5V,更正后,执行正常。实习设计报告实习设计报告第 页 共 20 页 3)有一个数码管的 a 画不亮。经检查发现,a 画的引脚与小数点 dp 的焊点连在一起了,将焊点断开后即正常。4)蜂鸣器没有工作,原因是电路接法错法,原接法如图(a) ,改正后的为(b) ,正确的接法还有图(c) 。 Q?NPNU?BEL LR101KR91KP1.0VCCQ?NPNU?BEL LR101KP1.0VCCQ?NPNU?BELLR101KP1.0VCC (a)错误的 (b)正确的 (c)正确的 七、软件调试及设计1.软件设计思想:第一步:显示功能测试。利用软件逐个显示 LED,从而检查显示电路,确定每个数字所对应的段码值。第二步:按键功能测试。利用软件测试按键部分功能是否第三步:时间显示第四步:时间可调测试第五步:万年历可调测试第六步:程序优化2.程序流程图:(见下页)实习设计报告实习设计报告第 页 共 20 页 开始系统初始化送初值显示LOOP 时钟自动加 1调 KEY_SET调功能键处理P1.2 按下?开设置,调时间设置模块P1.1 按下?P1.7 按下?调闹铃设置切换到日历显示调时间显示P1.7 按下?开设置,调日历设置模块调日历显示,延时 10S,返回 LOOP程序流程图八、设计中存在的问题实习设计报告实习设计报告第 页 共 20 页 1.DS1302 工作的稳定性加入辅助电容实现负载匹配在实际使用中,我们发现 DS1302 的工作情况不够稳定,主要表现在实时时间的传送有时会出现误差,甚至整个芯片停止工作。我们对 DS1302 的工作线路进行了分析。从上图看出,DS1302 的外部电路十分简单,唯一外接的元件是 32768Hz 的晶体。通过实验发现:当外接晶体电路振荡时,DS1302 计时正确;当外接晶体电路停振时,DS1302 计时停止。因此,我们认为 32768Hz 晶体是造成 DS1302 工作不稳定的主要原因。DS1302 时钟脉冲的产生依赖外接晶体与其内部的电容配合。由于 DS1302 在芯片本身集成了 6pF 的电容,所以,为了获得稳定可靠的时钟,必须选用具有 6pF 负载电容的晶体。很多设计者在设计时仅注意晶体的额定频率值,而忽视了晶体的负载电容大小。在这里处理的办法是:先测晶体的负载电容(记为 CI),若 CI6pF,则在晶体的一端增加一串联电容 CS 以产生所需的负载电容 CI,即 1/CI=1/6pF1/CS,通过计算即可得出应增加的辅助电容的大小。如此处理,DS1302 即可起振。2.乱码显示时间显示时,可正常显示;调整时间时,按加键或减键时,偶有乱码出现,经调试仍没有解决问题。九、设计总结通过本次万年历的设计,安装及调试,我觉的我基本上完成了从理论到实践的过度,懂的了如何在实际操作中运用所学的专业知识。我了解了贴片产品的工艺流程,焊接、组装技术也得到了很大的提高,认识到无论是在硬件设计还是在软件设计中,都要细心、耐心,每一个细小的环节都不容马虎,比如硬件检查,有的同学未经检查直接接 220V 电源,结果导致自己的实验板和实验装置一起烧坏。通过实习我学会了理性的去设计、调试,遇到问题不再盲目。十、附录附录一:元器件清单实习设计报告实习设计报告第 页 共 20 页 元器件名称数量元器件名称数量敷铜板 115mmx90mm1三极管 90131实时时钟芯片 DS13021发光二极管1AT89C511470u 电容16 位驱动器 7407147u 电容17448110u 电容13 位共阴 LED222P 电容412M 晶振1104P 电容332.768K 晶振1DIP4017805 稳压管1DIP1611N40015DIP141按键8DIP811K 排阻1220-15 变压器14.7K 排阻113.6V 电池1K 电阻6附录二:系统电路图EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10GND20VCC40U18051Y1C322pC222pVCCVCCC4104pS6R210KR11KS2S3S1S4+C110uR31KR41KR51KR61KVCCVCCVCCP00R18P03P06P05P04P07P02P01R17R16R15R14R13R12R11R71KVCCabfcgdedpabfcgdedpabfcgdeee1d2dp3c4g5b7万8f10万96a11万12dpDS1abfcgdedpabfcgdedpabfcgdeee1d2dp3c4g5b7万8f10万96a11万12dpDS2A1A2A3A1A4A2A3A4S5R91KS6S7R81KA7B1C2D6B14LT3RB15a13b12c11d10e9f15g14GND8VCC16U27448VCC1A11Y22A32Y43A53Y6GND74A94Y85A115Y106A136Y12VCC14U2Y1Y2Y3Y4Y5Y6abcdefgabcdefgabfcdeg1122334455667788DS1302U?Y2C322pC222pB1 PP20P21P22P20P21P22R141KR151KR161KVCCVCCVin1GND2Vout3U3027805C3014700uC30347uC3020.1uIN1IN2C3040.1uOUTD301D3021N4001D303D304D3051N4001Q?NPNU?BELLR101KD4LEDD5LED万万万万 图 4-3 系统电路图实习设计报告实习设计报告第 页 共 20 页 附录三:设计 PCB 板图附录四:万年历实物图附录五:程序清单;本程序实现实时时钟模块 时钟芯片型号:DS1302 实习设计报告实习设计报告第 页 共 20 页 ;ds1302 时钟上升沿输入命令或数据,下降沿输出数据.;/;本程序使用的数码管为共阳极数码管.; 显示的时间:分为 05,秒为 00,然后在这个时间上累加.因数码管有限,只显示分; 和秒.T_CLK Bit P2.2 ;实时时钟时钟线引脚T_IO Bit P2.1 ;实时时钟数据线引脚T_RST Bit P2.0 ;实时时钟复位线引脚;*40h-46h 存放 秒 分 时 日 月 星期 年 second equ 40hminite equ 41hhour equ 42horg 0000hajmp mainorg 0030hmain: ;*主程序设定初值mov dptr,#tab ;送入表格地址mov 40h,#50H ;秒赋初值mov 41h,#59H ;分赋初值mov 42h,#11H ;时赋初值mov 43h,#22H ;日赋初值mov 44h,#10H ;月赋初值mov 45h,#00H ;星期赋初值mov 46h,#06H ;年赋初值clr p1.0 ;闹铃不响CLR P3.5 ;红色指示灯灭,设置禁止,CLR P3.6 ;绿色指示灯灭,闹铃禁止START:lcall set1302 ;调用初值设定子程序;*loop: lcall get1302 ;调用时钟子程序,时钟自动加时AAA: lcall exchange ;调用十六进制转BCD 码子程序 mov r4, #6 ;刷新次数tt1:lcall display ;调用动态扫描子程序 djnz r4,tt1 lcall key_set ;调键盘扫描 JNB P3.5,tt3 ;p3.5 为 1,绿灯亮,开设置 lcall key1tt3: JNB P3.6,loopmov a,41hcjne a,#00h,loopcpl p1.0 ;p3.6 为 1 时,调用闹铃程序AJMP loop NOP NOPKEY1:MOV P1,#0FEH KEY_HOUR_ADD:JB P1.3,KEY_HOUR_SUB MOV A,42H ;小时加一 INC a CJNE A,#24H,HADD MOV A,#00h HADD:MOV 42H,A LJMP START KEY_HOUR_SUB:JB P1.4,KEY_MINI_ADD MOV A,42H ;小时减一 dec a CJNE A,#00H,HSUB MOV A,#24H HSUB:MOV 42H,A LJMP STARTKEY_MINI_ADD:JB P1.5,KEY_MINI_SUB MOV A,41H ;分加一 INC a CJNE A,#60H,MADD MOV A,#00H MADD:MOV 41H,A LJMP STARTKEY_MINI_SUB:JB P1.6,ret_key1 MOV A,41H ;分减一 dec a CJNE A,#00H,MSUB MOV A,#59H MSUB:MOV 41H,A实习设计报告实习设计报告第 页 共 20 页 LJMP START ret_key1: ret NOP ;*按键处理KEY_DATE0:lcall delay10ms ;清抖 JB P1.2,KEY_DATE LJMP KEY_DATE0KEY_time: LJMP LOOP retkey_set:jnb p1.2,key_date0 jb p1.1 ,ss cpl p3.6SS:jb p1.7,ret1 cpl p3.5 ret1:RETkey_set2:jnb p1.2,key_TIME JB p1.7,ret2 cpl p3.5ret2:retKEY_DATE:mov r5,#100lcall set1302 ;调用初值设定子程序 dd0:mov r6,#200dd1:mov r7,#248 LCALL GET1302 LCALL EXCHANGE LCALL DISPLAY2 LCALL KEY_SET2 JNB P3.5,dd2 lcall key2dd2:djnz r7,dd2 djnz r6,dd1 djnz r5,dd0 AJMP loopKEY2:MOV P1,#0FEH JB P1.2, KEY_MONTH_ADD Lcall KEY_TIME KEY_MONTH_ADD:JB P1.3,KEY_MONTH_SUB MOV A,44H ;月份加一 INC A CJNE A,#13H,MOADD MOV A,#00H MOADD:MOV 44H,A LJMP KEY_DATEKEY_MONTH_SUB:JB P1.4,KEY_DATE_ADD MOV A,44H ;月份减一 dec a CJNE A,#00H,MOSUB MOV A,#12H MOSUB:MOV 44H,A LJMP KEY_DATE KEY_DATE_ADD:JB P1.5,KEY_DATE_SUB MOV A,43H ;日加一 INC a CJNE A,#31H,DADD MOV A,#00H DADD:MOV 43H,A LJMP KEY_DATE KEY_DATE_SUB:JB P1.6,ret_key2 MOV A,43H ;日减一 dec a CJNE A,#00H,DSUB MOV A,#30H DSUB:MOV 43H,A LJMP KEY_DATE ret_key2:ret ;* * 十六进制-BCD 码转换exchange:mov a,46hmov b,#10Hdiv ab ;把 40H 高低 4 位分开mov 36h,a ;高 4 位存入 31H 单元mov a,bmov 35h,a ;低 4 位存入 30H 单元mov a,44hmov b,#10Hdiv ab ;把 40H 高低 4 位分开mov 34h,a ;高 4 位存入 31H 单元mov a,b实习设计报告实习设计报告第 页 共 20 页 mov 33h,a ;低 4 位存入 30H 单元mov a,43hmov b,#10Hdiv ab ;把 40H 高低 4 位分开mov 32h,a ;高 4 位存入 31H 单元mov a,bmov 31h,a ;低 4 位存入 30H 单元 ;mov a,42hmov b,#10Hdiv ab ;把 41H 高低 4 位分开mov 30h,a ;高 4 位存入 33H 单元mov a,bmov 29h,a ;低 4 位存入 32H 单元mov a,41hmov b,#10Hdiv ab ;把 41H 高低 4 位分开mov 28h,a ;高 4 位存入 33H 单元mov a,bmov 27h,a ;低 4 位存入 32H 单元mov a,40hmov b,#10Hdiv ab ;把 40H 高低 4 位分开mov 26h,a ;高 4 位存入 31H 单元mov a,bmov 25h,a ;低 4 位存入 30H 单元retNOPNOP;*;年月日显示,时分秒显示,36h,35h; 34h,33h;32h,31h; 30h,29h; 28h,27h; 26h,25h;* *时分秒显示display:mov r7,#100 ;动态扫描次数dis: ;秒数码管低位mov a,25hmovc a,a+dptrmov p2,a ;秒低位段选码送 P0 口clr p0.4;秒数码管低位开显示lcall delay100ussetb p0.4 ;秒数码管低位关显示 ;秒数码管高位mov a,26hmovc a,a+dptrmov p2,a ;秒高位段选码送 P0 口clr p0.3 ;秒数码管高位开显示lcall delay100ussetb p0.3 ;秒数码管高位关显示 ;分数码管低位mov a,27h ;分低位段选码送 P0 口movc a,a+dptrmov p2,a ;分低位段选码送 P0 口clr p0.2 ;分数码管低位开显示SETB P0.0 ;分小数点亮lcall delay100ussetb p0.2 ;分数码管低位关显示CLR P0.0 ;分小数点灭 ;分数码管高位mov a,28hmovc a,a+dptrmov p2,a ;分高位段选码送 P0 口clr p0.5 ;分数码管高位开显示lcall delay100ussetb p0.5 ;分数码管高位关显示 ;时数码管低位mov a,29h ;时低位段选码送 P0 口movc a,a+dptrmov p2,a ;时低位段选码送 P0 口clr p0.6 ;时数码管低位开显示SETB P0.0 ;时小数点亮lcall delay100ussetb p0.6 ;时数码管低位关显示CLR P0.0 ;时小数点灭 ;时数码管高位mov a,30hmovc a,a+dptrmov p2,a ;时高位段选码送 P0 口clr p0.7 ;时数码管高位开显示lcall delay100us实习设计报告实习设计报告第 页 共 20 页 setb p0.7 ;时数码管高位关显示djnz r7,disretdelay100us: mov r5,#50 djnz r5,$ retdelay1s: mov r5,#10 del0:mov r6,#200 del1:mov r7,#248 lcall get1302 ;调用时钟子程序,时钟自动加时 lcall exchange ;调用十六进制转 BCD 码子程序 mov r4, #6 ;刷新次数 ttt: lcall display ;调用动态扫描子程序 djnz r4,ttt del2:djnz r7,del2 djnz r6,del1 djnz r5,del0 retdelay10ms: mov r6,#10 d1:mov r7,#248 djnz r7,$ djnz r6,d1 ret;*年月日显示display2:mov r7,#100 ;动态扫描次数dis2: ;日数码管低位mov a,31hmovc a,a+dptrmov p2,a ;日低位段选码送 P0口clr p0.4 ;日数码管低位开显示lcall delay100ussetb p0.4 ;日数码管低位关显示mov a,32h ;日数码管高位movc a,a+dptrmov p2,a ;日高位段选码送 P0口clr p0.3 ;日数码管高位开显示lcall delay100ussetb p0.3 ;日数码管高位关显示 ;月数码管低位mov a,33h ;月低位段选码送 P0口movc a,a+dptrmov p2,a ;月低位段选码送 P0口clr p0.2 ;月数码管低位开显示SETB P0.0 ;月小数点灭lcall delay100ussetb p0.2 ;月数码管低位关显示CLR P0.0 ;月小数点灭 ;月数码管高位mov a,34hmovc a,a+dptrmov p2,a ;月高位段选码送 P0口clr p0.5 ;月数码管高位开显示lcall delay100ussetb p0.5 ;月数码管高位关显示 ;年数码管低位mov a,35h ;年低位段选码送 P0口movc a,a+dptrmov p2,a ;年低位段选码送 P0口clr p0.6 ;年数码管低位开显示SETB P0.0 ;年小数点亮lcall delay100ussetb p0.6 ;年数码管低位关显示CLR P0.0 ;年小数点灭 ;年数码管高位mov a,36hmovc a,a+dptrmov p2,a ;时高位段选码送 P0 口实习设计报告实习设计报告第 页 共 20 页 clr p0.7 ;时数码管高位开显示lcall delay100ussetb p0.7 ;时数码管高位关显示djnz r7,dis2rettab:DB 00H,10H,80H,90H,40H,50H,0c0H,0d0H,20H,30H;*;子程序名:Set1302;功 能:设置 DS1302 初始时间,并启动计时。;调 用:RTInputByte;入口参数:初始时间:Second,;Minute,Hour,Day,Month,Week.YearL(地址连续);出口参数:无;影响资源:A B R0 R1 R4 R7;*Set1302:CLR T_RSTCLR T_CLKSETB T_RSTMOV B, #8EH ;控制寄存器LCALL RTInputByteMOV B, #00H ;写操作前 WP=0LCALL RTInputByteSETB T_CLKCLR T_RSTMOV R0, #Second;MOV R7, #7 ;秒 分 时 日 月 星期 年MOV R1, #80H ;秒写地址S13021: CLR T_RSTCLR T_CLKSETB T_RSTMOV B, R1 ;写秒 分 时 日 月 星期 年 地址LCALL RTInputByteMOV A, R0 ;写秒数据MOV B, ALCALL RTInputByteINC R0INC R1INC R1SETB T_CLKCLR T_RSTDJNZ R7, S13021CLR T_RSTCLR T_CLKSETB T_RSTMOV B, #8EH ;控制寄存器LCALL RTInputByteMOV B, #80H ;控制,WP=1,写保护LCALL RTInputByteSETB T_CLKCLR T_RSTRET;*;子程序名:Get1302;功 能:从 DS1302 读时间;调 用:RTInputByte,RTOutputByte;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL;出口参数:无;影响资源:A B R0 R1 R4 R7;*Get1302:MOV R0, #Second;MOV R7, #7MOV R1, #81H ;秒地址G13021: CLR T_RSTCLR T_CLKSETB T_RSTMOV B, R1 ;秒 分 时 日 月 星期 年 地址LCALL RTInputByteLCALL RTOutputByteMOV R0, A ;秒INC R0INC R1实习设计报告实习设计报告第 页 共 20 页 INC R1SETB T_CLKCLR T_RSTDJNZ R7, G13021RET;*;功 能:写 1302 一字节 (内部子程序);*RTInputByte:MOV 50h, #8 ;一个字节有八个位,移八次.Inbit1: MOV A, BRRC A ;通过 A 移入 CY.MOV B, AMOV T_IO, C ;移入芯片内.SETB T_CLKCLR T_CLKDJNZ 50h, Inbit1RET;*;功 能:读 1302 一字节 (内部子程序);*RTOutputByte:MOV 50h, #8 ;一个字节有八个位,移八次.Outbit1: MOV C, T_IO ;从芯片内移到 CYRRC A ;通过 CY 移入 A.SETB T_CLKCLR T_CLKDJNZ 50h, Outbit1RET;/end
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 其他分类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!