电子数字闹钟课程设计.doc_第1页
电子数字闹钟课程设计.doc_第2页
电子数字闹钟课程设计.doc_第3页
电子数字闹钟课程设计.doc_第4页
电子数字闹钟课程设计.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

福建工程学院 微机设计应用与实践XXXX学院综合设计报告设计名称: 微机应用设计与实践 设计题目: 电子数字钟的设计 学生学号: 专业班级: 学生姓名: 指导教师(职称): 课题工作时间: 2010/6/20 至 2010/7/30 目 录摘 要- 4 -前 言- 5 -一、设计目的 - 7 -二、设计要求及基本功能- 7 -三、数字钟的系统总体方案与说明- 8 -四、数字钟的硬件设计- 9 -4.1系统结构框图与电路图的设计- 9 -4.2 各单元硬件设计说明- 11 -4.2.1 AT89S51单片机的简介- 12 -4.2.2 LED数码显示器- 15 -4.2.3键盘控制电路- 15 -五、数字钟的软件设计- 18 -5.1地址空间及端口分配- 18 -5.2 软件整体架构分析- 19 -5.2.1总体架构说明:- 19 -5.2.2主程序功能描述及分析、主程序流程图- 21 -5.2.3各子程序功能描述及子程序入口出口、各程序流程图- 22 -六、调试记录及说明:- 34 -总结- 36 -参考文献- 38 -附件(程序清单)- 39 -摘 要随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子数字钟诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。该电子万年历主要采用AT89S51单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示。AT89S51单片机是由Atmel公司推出的,功耗小,电压可选用46V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。关键词:时钟电路;LED动态扫描;单片机AT89S51前 言电子技术和微型计算机的迅速发展促进微型计算机测量和控制技术的迅速发展和广泛应用,单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。单片机由硬件系统与软件系统组成。硬件系统是指构成微机系统的实体与装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。软件系统是微机系统所使用的各种程序的总称,人们通过它对微机进行控制并与微机系统进行信息交换,使微机按照人的意图完成预定的任务。软件系统与硬件系统共同构成完整的单片微型计算机系统,两者相辅相成,缺一不可。数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。一、 设计目的1. 培养设计能力和解决实际问题的能力,增强自学能力,2. 通过设计完整的 单片机系统初步掌握组成系统、编程、调试等能力;3. 通过本电子钟的设计初步了解单片机应用开发研制过程,软件和硬件设计的方法。二、 设计要求及基本功能:本电子定时闹钟是一种基于单片机技术的多功能、多用途的电子产品,有电子时钟、日期显示、定时闹铃等多种功能,本设计产品性能卓越,功能丰富,采用LED显示更加直观,是一个比较实用的电子产品。主要功能:1. 可以显示24小时制“时时-分分-秒秒”,LED显示;2. 可以显示日期,具有万年历功能;3. 可以方便的设定定时时间,修改定时时间,整点报时,闹铃功能,预设定时时间到将发出闹铃声,还可停止闹铃;4. 能够修改时钟时间的时分秒,能够修改日期的年月日。三、 数字钟的系统总体方案与说明设计方案主控电路(89S51)键扫描电路显示驱动(ma7219)LED显示电路按照系统设计功能的要求,初步确定系统由主控模块、显示驱动及显示模块和键盘接口模块共3个模块组成,电路系统构成框图如图所示。 主控芯片使用51系列AT89S51单片机,显示驱动采用MAX7219,MAX7219 是微处理器和共阴极八段八位LED 数码管显示、图条/柱图显示或64 点阵显示接口的小型串行输入/输出芯片。片内包括BCD 译码器、多路扫描控制器、字和位驱动器和88 静态RAM。外部只需要一个电阻设置所有LED 显示器字段电流。MAX7219 和微处理器只需三根导线连接,每位显示数字有一个地址由微处理器写入。允许使用者选择每位是BCD 译码或不译码。显示模块采用普通的共阴极四位一体八段LED数码管。四、 数字钟的硬件设计 4.1系统结构框图与电路图的设计接口电路逻辑图图3 8255与89S51的连接图5 键盘与数码管利用8255并行控制开关量图6 拨动开关、按钮与发光二极管的控制4.2 各单元硬件设计说明本次课程设计的硬件系统主要器件有:89S51单片机,8255A芯片,8个数码管,按键开关,拨键开关,发光二极管,蜂鸣器,以及其他相关器件。本系统中,89C51与两片8255A相连,51单片机程序的运行控制8255A的各端口输入输出、电平的高低进行控制以便更有效地对数码管、发光二极管、开关以及其他外部电路器件进行更有效和合理的控制。4.2.1 AT89S51单片机的简介AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。兼容标准MCS-51指令系统的AT89S51单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系统和引脚兼容。AT89S51单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。P3口除了通用I/O口功能外,还有替代功能,如表5.3所示表5.3 P3口的替代功能引脚符号说明P3.0RXD串行口输入P3.1TXD串行口输出P3.2/INT0外部中断0P3.3/INT1外部中断1P3.4T0T0定时器的外部的计数输入P3.5T1T1定时器的外部的计数输入P3.6/WR外部数据存储器的写选通P3.7/RD外部数据存储器的读选通RST:复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系统复位。 4.2.2 LED数码显示器采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样、清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。综上所述,所以采用了LED数码管作为显示。4.2.3键盘控制电路按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。查询式按键及其接口查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。故这种形式适用于按键数量较少的场合。本设计除了时间设置时,设数值电路外都采用查询式独立按键。矩阵式键盘及其接口矩阵式键盘又称行列式键盘,有n个行线和m个列线,经限流电阻接+5V电源上,按键跨接在行线和列线上,nm行列结构可构成mn个按键,组成一个键盘。与独立式按键相比,mn个按键只占用m+n根I/O口线,因此适用于按键较多的场合。在时间数值设置采用矩阵式键盘。当无键闭合时,相应的I/O之间开路。当有键闭合时,与闭合键相连接的两条I/O口线之间短路。判断有无键按下的方法是:第一步,置列线相关I/O口为输入态,从行线相对应的I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,置行线相关I/O口输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等待近按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。按键开关去抖动问题按键开关在电路中的连接如图所示。按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为510ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。因此必须设法消除抖动的不良后果。键操作和键抖动消除抖动的不良后果的方法有硬、软件两种。为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,在第一次检测到按键按下后,执行一段延时510ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给510ms的延时,待后延抖动消失后才转入该键处理程序。五、 数字钟的软件设计5.1地址空间及端口分配地址空间作用20H赋值循环次数30H存放键盘扫描结果40H存放时的十位和个位41H存放分的十位和个位42H存放秒的十位和个位43H存放闹铃的时的十位和个位44H存放闹铃的分的十位和个位45H存放闹铃的秒的十位和个位67H-6EH日期显示缓存区77H-7EH时间显示缓存区端口用途P3.2定义蜂鸣器实现闹钟PA(8255I)数码管显示控制PB(8255I)数码管选择显示控制PC(8255I)44矩阵键盘接口PA(8255II)8个发光二极管接口PB(8255II)8个独立键盘接口PC(8255II)8个拨钮接口5.2 软件整体架构分析5.2.1总体架构说明:程序总体框图:开始定义显示缓冲单元定时器0工作方式1装载计数初值,定时100ms 定时开始开中断调用报警子程序调用停止闹铃子程序调用设置时间子程序设置循环次数调按键扫描子程序调用显示子程序调用整点报时子程序调用键盘输入子程序调用设置闹铃子程序调用设置日期子程序调用显示日期子程序调用计时子程序是否拨下SW2是否拨下SW3是否拨下SW4是否拨下SW0闹铃时间到是否拨下SW1整点到是否拨下SW5-7结束YYYYYYYYNNNNNNN调用显示子程序总体软件设计说明:在计时开始时各存储器上的内容会随着程序的运行而改变,所以只要对各存储器上的内容进行调用和显示就可以实现时间显示,闹钟显示以及日期的显示。由于数码管的显示特点,在进行调用显示之前,须将各存储器的内容进行转化,即数据的高低位分离,高四位和第四位的数值分别存放在不同的显示缓冲区内,进而进行显示调用。5.2.2主程序功能描述及分析、主程序流程图开始启动定时器按键检测时间显示主程序启动定时后,检测按键,并进行时间显示,循环检测按键。第一片8255(连接发光二极管与开关)的端口取为PA口:FD00H,PB口:FD01H,PC口:FD02H,控制口:FD03H。控制字应使得PA口输出,PB、PC口输出,为89H。第二片8255(连接数码管)的端口地址取为FE00HFE03H,为用PC口控制键盘,控制字取为81H.PA口用于送字段码,PB口用于送字位码。5.2.3各子程序功能描述及子程序入口出口、各程序流程图1. 显示时间子程序:显示程序又包含三个隐含的子程序:延时子程序、拆字子程序、显示子程序。存在时间寄存器中的数值是一个16进制数,需要经过DIV语句,进行拆数,再分别送至数码管数据缓存区。12在数码管中显示为横杆,用来作为时分秒的分隔符。延时子程序:该子程序是为了实现八个七段数码管显示的顺序显示选通时间,2ms的显示时间频率是的显示效果稳定,同时作为按键开关扫描判断去抖动拆字子程序:将空间51h、52h、53h内的秒时分拆成高低字节分配到,30h、31h、33h、34h、36h、37h实现时分秒的显示。显示子程序:将拆分好的高低位时分秒拆分码放入相对应的数码管,调用tab选通相应的七段数码显示时分秒当前数字。开始秒的个位存入77H,十位存入78H秒分离秒分离秒分离秒的个位存入77H,十位存入78H秒的个位存入77H,十位存入78H 其余位赋值12(让其显示-)将77H-78H内容传送至数码管返回2. 计时子程序:该程序功能是使得秒程序走动,走到59后进位分,后变00从新开始计时,分走到59后进位时,分从新开始00计时,时走到23,分走到59,秒走到59后进入重新日期周期计时。重新载入计时初值秒位清0分位加1(41h)分位清0时位加1(40h) 时位清0天位加1(67h)开始重新赋值循环次数20H#28H42h=60秒位加1(42h)R2-1=040h=2441h=60返回NYNNNYYY3. 显示日期子程序:当时每向天增1,都要进行大小月天数判断,当月根据算法计满向年增1开始日位加1(67h)进入月份判断是否为12月是否为闰年年位除于4是否有余数4、6、9、11月67h(日位)=?301、3、5、7、8、10、12月67h(日位)=?3167h=?2867h=?29YNY月位(69h)加1,日位(67h)为1年位(6Bh)加1,月位(69h)日位(67h)为1NY月位(69h)加1,日位(67h)为1月位(69h)加1,日位(67h)为1Y返回NNYN4. 设置时间子程序使用独立键盘设置,实现增1减1功能。开始分增1拨码盘SW2按下时增1秒增1PB2按下PB1按下PB0按下返回NNNNYYYY分减1时减1秒减1PB5按下PB4按下PB3按下NNNYYY5. 报警子程序:把当前时间与设定的闹铃时间比较,当一致时,将p3.2口清零,蜂鸣器报警,直至拨下SW1拨钮,停止响铃开始P3.2清0蜂鸣器工作拨键SW1是否拨动P3.2置1关闭蜂鸣器返回40H=43H(时)41H=44H(分)42H=45H(秒)YYYYNNNN6. 6键盘设置时间:使用键盘设置数值,需要用键盘扫描子程序。开始键盘扫描,改变时位十位SW5拨下PB0按下PB1按下键盘扫描,改变时位个位键盘扫描,改变分位十位SW5拨下PB0按下PB1按下键盘扫描,改变分位个位键盘扫描,改变秒位十位SW5拨下PB0按下PB1按下键盘扫描,改变秒位个位返回YYYYYYNYYNYNNNNNN六、 调试记录及说明:1、系统操作说明书:拨钮SW0:切换闹铃设置PB0设置时,PB1设置分,PB2设置秒拨钮SW1:切换闹铃停止设置当闹铃时,拨上此拨钮,闹铃停止拨钮SW2:切换时间按键设置PB0增1设置时,PB1增1设置分,PB2增1设置秒,PB3减1设置时,PB4减1设置分,PB5减1设置秒拨钮SW3:切换日期显示拨上此拨钮,显示当前日期拨钮SW4:切换日期设置PB0增1设置年,PB1增1设置月,PB2增1设置日拨钮SW5:切换键盘设置时位按住PB0,可以用键盘设置任意值到时的十位,但是由于小时是24进制的,所以此处只能设置0,1,2,当超过2时,输入的任何数都默认为0。按住PB1,用键盘输入任意的0-9到时的个位。拨钮SW6:切换键盘设置分位按住PB0,可以用键盘设置任意值到分的十位,但是由于分钟是60进制的,所以此处只能设置0-5,当超过5时,输入的任何数都默认为0。按住PB1,用键盘输入任意的0-9到分的个位。拨钮SW7:切换键盘设置秒位按住PB0,可以用键盘设置任意值到秒的十位,但是由于秒是60进制的,所以此处只能设置0-5,当超过5时,输入的任何数都默认为0。按住PB1,用键盘输入任意的0-9到秒的个位。2、调试:用一段实验板测试程序,烧到AT89S51芯片中,可以看到数码管循环电量,发光二极管发光正常等,说明实验板是完好的。默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化。在闹铃设置时,本来想蜂鸣器响5s用一个延时程序来实现5s的定时,声音响五秒可以实现,但是,当进入延时程序后,数码管全灭了。解决:将延时程序改成调用显示程序,响铃的时间为显示程序占用的机器周期。LED数码管的断码错乱,原因出于没有认真看清数码管引脚信息。解决:重新排列LED数码管,即可解决出现在的断码或乱码。烧入程序后,LED数码管显示闪动,而且亮度不均匀。解决:首先对调用的延时进行逐渐修改,可以解决显示闪动问题。其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在返回时屏蔽掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。没有考虑到闰年时的情况。解决:首先是将闰年判断程序流程图设计好,之后根据这个流程图编写闰年判断程序,并作为系统程学的一个子程序,在执行主程序时进行调用,最后解决了此问题.程序设计中涉及到大量的运算和子程序调用,地址空间容易产生越界解决:运用合理的调用语句可以解决此问题。总结:这学期开设的单片机课程和此次的设计关联甚大,通过此设计,复习和巩固所学过的知识,可以对所学过的知识进行系统的回顾和总结。但是,在课堂学的只是很基础的指令操作,如何把它联系到实际呢,这就是此次课程设计的目的。课堂的知识是远远满足不了设计的要求的,这就需要我们主动去找寻更多的资料,了解更多的知识,这也在无形的拓展我们的知识面。一个实际的产品,远不如它看起来这么简单,虽然我做的是最简单的数字钟,但是细节的考虑,任何一个功能的实现,都会牵扯出许多的问题,有些是逻辑思维的不严谨,有些是硬件电路的问题,都需要耐心思考,冷静分析。在进行程序调试的时候,由于此次程序相对于平日的联系,算是较长的了,所以要进行分块调试,也是高效的体现。程序在编写的时候,就要进行地址空间的分配,防止程序中的寄存器出现冲突,使系统出现无法预知的错误。即使软件运行是无误的,硬件测试也可能是没有结果的,所以产品的设计,离不开硬件和软件。参考文献:1 张国安微机控制实验与课程设计指导书M北京:电子工业出版社,200382 李江全,曹卫彬,郑瑶,郑重计算机典型测控与串口通信开发软件应用实践M北京:人民邮电出版社,2008.3 李广弟,朱月秀,王秀山.单片机基础M北京:北京航空航天出版社,200174 谢维成,杨加国单片机原理与应用及C51程序设计 M.北京:清华大学出版社,20072- 9 -附件(程序清单) ORG 0000H LJMP MAINMAIN: LCALL DEL MOV DPTR,#0FE03H ;开片选端 MOV A,#89H MOVX DPTR,A MOV DPTR,#0FD03H ;开片选端 MOV A,#8BH MOVX DPTR,A MOV 45H,#10 ; MOV 44H,#0 ;设置初始值 MOV 43H,#0 MOV 6EH,#2 ;预先设置显示缓冲区 MOV 6DH,#0 MOV 6CH,#1 MOV 6BH,#0 MOV 6AH,#0 MOV 69H,#6 MOV 68H,#2 MOV 67H,#8 MOV TMOD,#01H ;设置中断方式 MOV 20H,#28H ;设置中断次数 MOV 40H,#23 ;闹铃缓冲区预先设置时 MOV 41H,#59;分 MOV 42H,#56;秒 SETB ET0 MOV TH0,#0B0H ; 置初值 MOV TL0,#03CH SETB TR0HERE: JNB TF0,HERE ;判断1秒时间是否来到 CLR TF0 LCALL XIANSHI ;调用显示时间子程序 LCALL IT0P ;调用时间增1子程序 LCALL CHANGE1 ;是否进入设置时间子程序 LCALL CHANGE2 ;是否进入显示日期子程序 LCALL CHANGE3 ;是否进入设置日期子程序 LCALL NAOLIN ;设置闹铃时间子程序 LCALL WARNING ;调用是否警报子程序 LCALL STOP ;调用是否停止响铃子程序 LCALL BAOSHI LCALL JIANPAN1;是否使用键盘输入数据LCALL JIANPAN2LCALL JIANPAN3SJMP HERE*计数子程序:*IT0P: PUSH PSW ;进堆栈 PUSH ACC MOV TH0,#0B0H ;重新赋初值 MOV TL0,#03CH DJNZ 20H,RETURN ;循环次数不为0则返回 MOV 20H,#28H ;重新赋值循环次数 MOV A,#01H ;准备增 ADD A,42H ;让秒单元增1 MOV 42H,A ;秒增1 CJNE A,#60,RETURN;秒不超过60则返回 MOV 42H,#00H ;把秒单元清零 MOV A,#01H ;准备增1 ADD A,41H ;让分单元增1 MOV 41H,A ; 分增1 CJNE A,#60,RETURN; 分不超过60则返回 MOV 41H,#00H ;分单元清零 MOV A,#01H ;准备增1 ADD A,40H ; 让时单元增1 MOV 40H,A ;时增1 CJNE A,#24,RETURN ; 时不超过24返回 MOV 40H,#00H ;时清零 MOV A,67H ; 准备让天单元增1 INC A MOV 67H,A ;天增1 AJMP RETURN RETURN:POP ACC ;出堆栈 POP PSW RET *显示时间子程序:*XIANSHI:MOV A,42H ;显示时间子程序 MOV B,#10 ;赋值除数10给B DIV AB MOV 77H,B ;将秒的个位存入77H单元 MOV 78H,A ;将秒的十位存入78H单元 MOV A,41H ;分离分单元的个位和十位 MOV B,#10 ;赋值除数10 DIV AB MOV 07AH,B ;将分的个位存入7AH单元 MOV 07BH,A ;将分的十位存入7BH单元 MOV A,40H ;分离时单元的个位和十位 MOV B,#10 ;赋值除数10 DIV AB MOV 7DH,B ;将时的个位存入7DH单元 MOV 7EH,A ;将时的十位存入7EH单元 MOV 79H,#10 ;赋值12给剩下的数码管让它显示- MOV 7CH,#10LP2:MOV R0,#77H ;用数码管显示77H7EH里的数值子程序MOV R3,#01HLP3:MOV A,R0MOV DPTR,#TBLMOVC A,A+DPTRMOV DPTR,#0FE00H MOVX DPTR,A ;送位码MOV DPTR,#0FE01HMOV A,R3MOVX DPTR,A ;送段码INC R0MOV A,R3RL AMOV R3,ALCALL DELAYJNB ACC.0,LP3 ;控制循环让数码管都显示一遍 RET*设置时间子程序:*CHANGE1:MOV DPTR,#0FD02H ;判断是否进入设置时间子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD1: JNB ACC.2,FD0 ;当拨码盘的第三位为1时进入设置,否则跳出 MOV DPTR,#0FD01H MOVX A,DPTR JNB ACC.2,MIAO ;当按键的第3位按下时进入秒增1子程序 JNB ACC.1,FEN ;当按键的第2位按下时进入分增1子程序 JNB ACC.0,SHI ;当按键的第1位按下时进入时增1子程序 JB ACC.5,JJ1 ;当按键的第6位按下时进入秒减1子程序 LJMP MIAODJJ1: JB ACC.4,JJ2 ;当按键的第5位按下时进入分减1子程序 LJMP FEND JJ2: JB ACC.3,JJ3 ;当按键的第4位按下时进入时减1子程序 LJMP SHIDJJ3: LCALL XIANSHI ;调用显示时间子程序 SJMP CHANGE1 ;返回判断是否进入时间设置子程序FD0: RET*显示日期子程序:*CHANGE2:MOV DPTR,#0FD02H ;判断是否进入显示日期子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD2: JNB ACC.3,FD0 ;当拨码盘第4位为1时进入显示日期 LCALL RIQI ;进入显示日期子程序 SJMP CHANGE2*设置日期子程序:*CHANGE3:MOV DPTR,#0FD02H ;判断是否进入设置日期子程序 MOVX A,DPTR MOV DPTR,#0FD00H MOVX DPTR,AFD7: JNB ACC.4,FD0 ;当拨码盘第5位为1时进入设置日期子程序 MOV DPTR,#0FD01H MOVX A,DPTR JNB ACC.2,TIAN ;当按键第3位按下时天数增1 JNB ACC.1,YUE ;当按键第2位按下是月份增1 JNB ACC.0,NIAN1 ;按键第1位按下时年增1 LCALL RIQI ;显示日期 SJMP CHANGE3MIAO: LCALL DELAY1 ;进入设置秒增1的子程序 MOV A,42H INC AMOV 42H,A ;秒增1 CJNE A,#60,FD0 ;判断是否退出 MOV 42H,#0 ;把秒单元清零 RETFEN: LCALL DELAY1 ;进入设置分增1的子程序 MOV A,41H INC A MOV 41H,A ;分增1 CJNE A,#60,FD0 ;判断是否退出 MOV 41H,#0 ;把分单元清零 RETSHI: LCALL DELAY1 ;进入设置时增1的子程序 MOV A,40H INC A MOV 40H,A ;让时单元增1 CJNE A,#24,FD0 ;判断是否退出 MOV 40H,#0 ;时单元清零 RETTIAN: LCALL DELAY1 ;设置天数增1的子程序 MOV A,68H CJNE A,#3,ED0 ;判断当前月份以便进入不同设置LCALL ED1RETED0: MOV A,67HINC AMOV 67H,A ;天增1CJNE A,#0AH,FD0 ;判断是否退出MOV 67H,#0 ;天个位清零MOV A,68HINC AMOV 68H,A ;天十位增1RETED1: MOV A,67H INC AMOV 67H,A ;天增1 CJNE A,#2,FD0 ;判断是否退出ED2: MOV 67H,#1 ;将天的个位置1 MOV 68H,#0 ;天的十位清零 RETNIAN1: LCALL NIANYUE: LCALL DELAY1 ;进入设置月份增1的子程序 MOV A,6AHCJNE A,#1,ED3 ;判断当前月份是否大于10一便进入不同设置LCALL ED4 ;进入相应设置RETED3: MOV A,69H INC AMOV 69H,A ;月份的个位增1CJNE A,#0AH,ED5;比较判断是否月份是否大于10,大于则继续往下执行MOV 69H,#0 ;清零月份个位MOV A,6AHINC AMOV 6AH,A ;月份十位增1RETED4: MOV A,69H INC AMOV 69H,A ;月份各位增1 CJNE A,#3,ED5 ;比较判断是否退出 MOV 6AH,#0 ;月份十位清零 MOV 69H,#1 ;月份个位置1RETED5: RETNIAN: LCALL DELAY1 ;进入设置年增1的子程序 MOV A,6BH INC AMOV 6BH,A ;年的个位增1CJNE A,#0AH,ED5 ;判断是否退出 MOV 6BH,#0 ;清零年的个位 MOV A,6CHINC AMOV 6CH,A ;年的十位增1CJNE A,#0AH,ED5 ;判断是否退出CLR AMOV 6CH,A ;清零年的十位MOV A,6DH ;INC AMOV 6DH,A ;年的白位增1CJNE A,#0AH,ED5 ;判断是否退出CLR AMOV 6DH,A ;清零年的百位MOV A,6EHINC AMOV 6EH,A ;年的千位增1RETRIQI: MOV A,68H ;进入显示日期子程序 CJNE A,#3,FD4 ;判断当前天数十位以便进入不同显示LCALL FD3 ;进入不同显示FD4: MOV A,6AH CJNE A,#1,FD5 ;判断当前月份的十位以便进入不同显示MOV A,69HCJNE A,#3,FD5 ;判断当前月份的个位,以便进入不同显示LCALL FD6FD5: MOV A,67H CJNE A,#0AH,ES1 ;判断是否退出 CLR A MOV 67H,A ;清零天的个位 MOV A,68H INC AFD3: MOV 68H,A ;增1天的十位 CJNE A,#3,ES1 ;判断是否退出 MOV A,67H CJNE A,#2,ES1 ;判断是否退出 CLR A MOV 67H,#1 ;把天数的个位置1 MOV 68H,#0 ;把天数的十位置0 MOV A,69H INC A MOV 69H,A ;月份增1 CJNE A,#0AH,ES1 ;判断是否退出 MOV 69H,#0 ;清零月份的是个位 MOV 68H,#0 ;清零天数的十位 MOV 67H,#1 ;置1天数的个位 MOV A,6AH INC A MOV 6AH,A ;月份的十位增1FD6: MOV 69H,#1 ;月份的个位置1 MOV 6AH,#0 ;月份 的十位清零MOV 68H,#0 ;天数的十位清零MOV 67H,#1 ;天数的个位置1 MOV A,6BH INC A MOV 6BH,A ;年份的个位增1CJNE A,0AH,ES1 ;判断是否退出CLR AMOV 6BH,A ;清零年的 个位MOV A,6CH INC AMOV 6CH,A ;年的十位增1CJNE A,#0AH,ES1 ;判断是否退出CLR AMOV 6CH,A ;清零年的十位MOV A,6DHINC AMOV 6DH,A ;年的百位增1 CJNE A,#0AH,ES1 ;判断是否退出CLR A MOV 6DH,A ;清零年的百位MOV A,6EHINC AMOV 6EH,A ;年的千位增1ES1: LCALL XIAOYUE ;调用月份天数调整子程序 MOV 7EH,6EH ;准备显示日期 MOV 7DH,6DHMOV 7CH,6CHMOV 7BH,6BHMOV 7AH,6AH MOV 79H,69HMOV 78H,68HMOV 77H,67HLCALL LP2RETXIAOYUE:MOV A,6AH ;进入月份天数调整子程序 CJNE A,#1,CS0 ;判断当前月份的十位以便进入不同调整 MOV A,69H CJNE A,#1,CS4 ;判断当前月份的个位以便进入不同调整 MOV A,68H CJNE A,#3,CS0 ;判断当前天数的十位以便进入不同调整 MOV A,67HCJNE A,#1,CS0 ;判断当前天数的十位以便进入不同调整 MOV 6AH,#1 ;日期调整MOV 69H,#2MOV 68H,#0MOV 67H,#1RETCS0: MOV A,6

温馨提示

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

评论

0/150

提交评论