电子日历和温度表的设计-长安大学单片机课程的设计论文.docx_第1页
电子日历和温度表的设计-长安大学单片机课程的设计论文.docx_第2页
电子日历和温度表的设计-长安大学单片机课程的设计论文.docx_第3页
电子日历和温度表的设计-长安大学单片机课程的设计论文.docx_第4页
电子日历和温度表的设计-长安大学单片机课程的设计论文.docx_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

单片机课程设计论文课程名称:电子日历和温度表的设计专业:电气工程及其自动化 班级:32040901 姓名:乔 红 垒 学号:3204090112 指导教师: 段 晨 东 日期:2011年12月30日 目录摘要.3前言.4方案分析与论证.5硬件设计.6软件流程图.9调试.14软件调试.14硬件调试.15总结.17附录.18元件清单.18程序源代码.19摘要本设计使用STC89C52RC单片机为主要控制器,辅以74LS138译码器、74LS245总线驱动器、温度传感器DS18B20、3x3矩阵键盘以及LED六位数码管显示等电路,本设计是基于51系列的单片机进行的实时日历和时钟显示设计,可以显示年月日时分秒周、实时温度(每秒刷新一次、测量范围为-40+60)信息,具有日历参数(包括日期、时间及周)的手动调整设置的功能,并附带有其他扩充功能。该系统使用单片机的定时器中断方式进行计时,能有效减小了系统误差,再使用译码器进行片选,节省了单片机的I/O口,使用了矩阵键盘进行功能的选择。该系统具有设计简单,结构清晰的特点,经测试,能够较好的实现题目所要求的基本和扩充功能,具有人性化的操作和直观的显示效果。软件方面主要包括日历程序、键盘程序,显示程序、温度程序等。本系统以单片机的汇编语言进行软件设计。所有程序编写完成后,在keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。然后,再下载到实物单片机中进行调试,重复上述过程,直到达到预期的功能。关键词:STC89C52RC单片机、电子日历、时间、温度前言在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近些年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。日历,自从它发明的那天起,就成为人类的朋友。由于日期的变化与时间的变化有着密不可分的联系,因此时钟的准确性对于日期准确性具有重要作用。但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让日历与时钟更好的为人类服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED数码管代替指针显示进而显示时间,减小了计时误差。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。本次设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。实现了日期、时间、温度的功能。同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性,而且系统具有一定的可扩展性。方案分析与论证一、功能要求1、基本要求(不能采用专用芯片):(1)时间显示:年、月、日(各2位)(2)日历参数的手动设置(3)选择传感器,并设计相应的信号处理电路。(4)实现实时温度显示功能(每秒刷新一次),温度测量范围4060。(5)每当月份和年份变化时,声光报警提示。(6)当温度超过38度,或低于零下-10时,声光报警提示。2、扩充功能:(1)防止极性接反,电压不足时,报警提示。(2)显示星期的功能。(3)重要节日提示功能二、方案分析与论证1、单片机芯片的选择方案和论证方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用STC89S52RC,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用STC89S52RC作为主控制系统。2、显示模块选择方案和论证方案一:采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。所以采用了LED数码管作为显示。3、时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。由设计基本要求可知,需选用方案一。4、电路设计最终方案确定综上各方案所述,对此次作品的方案选定: 以单片机STC89S52RC为主控制器,时间数据是由单片机定时计数器提供信号,并通过LED数码管显示出来,并用键盘来完成对当前日期时间的调整。三、硬件设计(1)所需硬件设备:STC89C52RC单片机、74LS138译码器、74LS245总线驱动器、温度传感器DS18B20、3x3矩阵按键以及六位LED数码管、短路块若干,电阻电容若干、MAX232、12MHz晶振、LED指示灯为了实现数码管显示,需要用到74LS138译码器接P1.0-P1.2做片选和74LS245作驱动控制显示内容。STC89C52RC单片机介绍:STC89C52RC提供以下标准功能:8k字节可重擦写Flash闪速存储器、2568字节内部RAM、32个可编程I/O口线、一个6向量两级中断结构,一个全双工串行通信口,片内振荡及时钟电路。同时,STC89C52RC可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。STC89C52RC的引脚封装图如下图所示: 1) 电源及时钟引脚l Vcc:电源接入引脚;l GND:接地引脚;l XTAL1:晶体振荡器接入的一个引脚(采用外部振荡器时,此引脚接地);l XTAL2:晶体振荡器接入的另一个引脚(采用外部振荡器时,此引脚作为外部振荡信号的输入端)。2) 控制线引脚l RST:复位信号输入引脚。图13)并行I/O口引脚l P0.0P0.7:一般I/O口引脚或数据/低位地址总线复用引脚;l P1.0P1.7:一般I/O口引脚l P2.0P2.7:一般I/O口引脚或数据/高位总线引脚;l P3.0P3.7:一般I/O口引脚或第二功能引脚。晶振:在设置STC89C52RC的振荡频率时,我们采用内部时钟方式,。在单片机内部有一振荡电路,只要在单片机XTAL1和XTAL2引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。电容器C1和C2的作用是稳定频率和快速起振,电容值在5-30pF,典型值为30pF。晶振CYS的振荡频率范围为1.2-12MHz,典型值为12MHz和6MHz。本次设计我们选择了11.0592MHz。图二数字温度传感器DS18B20介绍:1、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内5、温范围55125,在-10+85时精度为0.56、可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快图三8、测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。74LS245芯片的介绍:74LS245是我们常用的芯片,用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。*74LS245还具有双向三态功能,既可以输出,也可以输入数据。*当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。图四*当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A传输;(接收)*DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。由于P2口始终输出地址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,/E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得/RD或/PSEN有效时,74LS245输入(P0.iDi),其它时间处于输出(P0.iDi)。74LS138的介绍:74LS138 为3 线8 线译码器, 其工作原理如下:当一个选通端(E3)为高电平,另两个选通端(E1)和/(E2))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。 利用 E1、E2和E3可级联扩展成 24 线译码器若外接一个反相器还可级联扩展成 32 线译码器。 若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。图五MAX232芯片的介绍:MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。图六TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。数码显示管为共阴极数码显示管由P1控制数码管的位,P0控制数码管的段(2)总体接线:图七按图将电路连接并焊好。P0口通过接驱动器连接数码管,用来控制显示内容。P1.0-P1.2通过接译码器和驱动器连接至数码管,用来控制片选以及报警提示。P1.3用来接温度传感器数据口。P2口用来接3*3矩阵键盘。P3.0-P3.1用来接串口,为单片机烧制程序。(3)本实验中,按键对应功能定义如下:KEY7:按下循环显示停止,在KEY4按下后按KEY7可返回至显示;KEY4:六位数码管修改位的切换;KEY1:按下该修改位加一,满十时自动清零。四、软件设计:程序流程图本系统软件设计程序主要分为主程序、键盘程序、日期时间中断程序、日历程序流程图、温度程序。下面分别详细介绍各程序流程图:1、主程序流程图初始化开始报警月份变化否?Y调温度子程序NKEY4键盘程序KEY4按下?有键按下否?YNNFLAG2取反FLAG2=0?调显示子程序N修改显示首地址Y报警温度38或-10?显示的是温度?显示的是温度?3次完否?NNN重装显示首地址Y图八2、键盘程序流程图KEY4释放否?NKEY4按下?有键按下否?YYN片选清零六次完否?片选保持不变NYY修改片选加1N该位为十位?NKEY1按下?显示个位显示十位Y返回主程序N显示为9?显示为十位?YYN显示为9?NY该单元内容加一 Y该单元内容减九该单元内容减九十该单元内容加十N 图九1s到否?3、日期时间中断程序流程图继续计时N秒单元满60否?秒单元内容加一Y定时器重装初值N分单元满60否?分单元加一秒单元清零Y定时器重装初值N时单元满24否?时单元加一分单元清零Y定时器重装初值N月份变化否?调用日历程序天单元加一时单元清零YN年单元加一,月清零月单元加一,天清零月份满13否?YYN图十4、日历程序流程图 2月否?闰年否?NYY2月否?Y4、6、9、11月?N28天N31天29天30天Y图十一5、温度程序流程图18B20存在否?调温度复位子程序返回主程序 N转化温度数据并存储读出温度数据发出读温度命令写入数据跳过ROM匹配发出温度转换命令写入数据Y图十二五、软硬件系统单片机在复位上电后,初始化后开始计时,无按键按下时数码管会在日历、时间、星期与温度之间自动切换显示,当Key7按下时,系统自动循环显示停止,再次按下Key7将恢复自动循环显示;当Key4按下时,数码管显示第一位,当Key4再次按下时数码管将显示下一位,当显示到第六位时再按下Key4将重新显示第一位,以此循环下去;在Key4按下后,当有Key1按下时,若该位显示的是十位,若显示的不为九,单元内容加十,若单元内容在加之前十位为九,则单元内容减九十,若该位显示的是个位,若显示的不为九,则单元内容加一,若为九,则单元内容减九;在Key4按下后,再按Key7系统将返回至显示界面。每当月份变化时,声光报警;每当有节日到来时,LED灯将亮一整天,第二天到来时LED灯熄灭,若第二天仍为节日,继续打开LED灯;当温度高于38度或低于10度时,将进行声光报警。调 试1、 软件调试日期仿真显示如下:显示内容为:11年12月29日图十三(2)时间仿真显示如下:显示内容为:13点36分51秒图十四(3)星期与温度仿真显示如下:显示内容为:星期5,温度为零下3度图十五2、硬件调试(1)日期显示显示内容为11年12月29日图十六(2)时间显示显示内容为12点58分51秒图十七(3)星期与温度的显示显示内容为星期4,温度为25度图十八3、调试出现的问题及解决办法 (1)显示温度时显示始终为0度或85度解决办法:首先检查程序,再看仿真时是否有问题,最后经过检查电路板,发现温度传感器的数据端信号没有送到P1.3,用导线直接把两端连接,运行正常。(2)在Proteus里将程序调试及仿真成功后,写入电路板,发现按键无反应解决办法:检查矩阵键盘程序是否正确,与电路板上的键盘是否一一对应,最终发现电路板上的键盘与原理图上键盘不是对应的,修改矩阵键盘程序,调试之后运行正常。(3)显示时发现数码管显示的不是很清楚解决办法:在下一个代码到来前需先将P0的内容清零,否则将会显示上一个数码管的状态,经软硬件调试后运行正常。(4)关于显示内容与显示方式的说明由于考虑到电子日历的真实性与实用性,本设计添加时间的显示及其手动修改,初始时采用按键切换显示,但考虑到产品的实用性与多功能性,显示方式采用,在正常情况下自动循环显示,按键后将停留此显示不变,再次按键后,将继续循环显示,实现了产品的多功能性。总结通过这次单片机课程设计我受益匪浅,让我明白了理论联系实际的重要性,这次设计不仅巩固了所学单片机理论知识,还培养了我的动手能力以及如何合理的查找资料,利用资料的能力。通过这次课程设计,我学到了很多书本上学不到的东西,也深刻的认识到自己对知识的掌握和运用还远远不足,这次课程设计也锻炼了我独立思考问题的能力以及如何去检测解决问题,提高了我的实际动手能力,积累了一些做课程设计的经验,对我们今后的学习起到启发作用。我认为本次课程设计的不足之处是手动修改不是很方便,由于初始方案想法的确定,最后已经没有时间进行修改了,但我认为采用本设计的修改方法可以更为快捷的设置到任何想要的数字。不方便是因为,在修改的时候不能看到其他的显示部分,只能是一位一位的显示。总体上来说,通过这次课程设计学习,检验了平时对理论的学习,使我进一步熟悉了单片机的结构及工作原理,锻炼了我的动手能力,提高了自学能力,为以后的学习打下了好的开端。在这次设计中我学到了很多,也发现了自己的不足,也难免有错误之处,敬请提出!最后,还要感谢段老师的悉心教导。附录参考文献1段晨东.单片机原理及接口技术.北京:清华大学出版社,20082周润景 郝晓霞.传感器及检测技术.北京:电子工业出版社,20093楼然苗 李光飞.51系列单片机设计实例.北京: 北京航天航空大学出版社,20064高峰.单片微型计算机原理与接口技术.北京:科学出版社,20035何立民.单片机高级教程应用与设计.北京:北京航空航天大学出版社,2000元 件 清 单元器件数量备注电阻31K电阻45.1K电阻28K独石电容60.1uF独石电容230PF电解电容110Uf 25V51单片机实验板189C52芯片1MAX232芯片174LS245芯片274LS138芯片1DS18B201三极管90122PNP二极管IN40011数码管2三位八段 共阴晶振111.0592MHz芯片座6电源座1三脚 5V通信插座1CON232电源适配器1通讯电缆1微型按钮开关10实验插板1单排插针若干双排插针若干短路块若干导线若干电路原理图图十九程序源代码NIANEQU20H;年YUEEQU21H;月DAYEQU22H;日HOUREQU23H;时FENEQU24H;分MIAOEQU25H;秒XQEQU26H;星期WDHEQU27H;温度符号WDZEQU28H;温度值DQBITP1.3;P1.3FLAGBITF0;DS18B20存在标志位FLAG1BIT60H;节日提醒与否标志位FLAG2BIT70H;自动循环显示与否标志位ORG0000HLJMPMAINORG000BH;中断入口地址LJMPZD0;中断ORG0030HMAIN:MOVSP,#60H;设置堆栈MOVTMOD,#01H;定时器0采用工作方式1MOVTH0,#4CHMOVTL0,#00H;装入计50ms的初始值SETBTR0;启动定时器SETBEA;开放CPU中断SETBET0;允许定时器0中断MOV42H,#20;1s需计20次50msMOVMIAO,#50;此下未初始化MOVFEN,#59MOVHOUR,#23MOVDAY,#30MOVYUE,#6MOVWDH,#00HMOVWDZ,#00 MOVNIAN,#11MOVXQ,#4MOVDPTR,#XSMOVP2,#0F0HMOV43H,#3MOV44H,#6MOV4CH,#250MOV4DH,#250MOV4AH,YUE;将月单元内容存于4AH单元中MOVR1,#20H;显示程序的首地址MOV30H,#2MOV31H,#200MOV59H,#3CLRFLAG1;此上为初始化PD:MOVA,R1CJNEA,#NIAN,BUB;判断显示是否为日期MOVA,YUE;判断月份是否变化CJNEA,4AH,BAO;若变化则跳至报警程序BUB:LCALLRE_TEMP;调用温度子程序LCALLTURN;转化温度符号与值存于单元中LCALLPDU;判断是否有键按下JZCX;若无则跳至CXLCALLDL20MS;延时20msLCALLPDU;判断是否有键按下JZCX;若无则跳至CXJNBP2.6,KEY4;判断4键按下否JNBP2.5,KEY7;判断7键按下否KEY7:LCALLSFF;按键释放否CPLFLAG2;将FLAG2取反CX:LCALLCS;调显示子程序JNBFLAG2,QD;为零则循环显示LJMPPD;为一则不循环显示QD:DJNZ31H,PDMOV31H,#200DJNZ30H,PD;循环显示MOV30H,#2INCR1INCR1INCR1;修改显示首地址MOVA,R1CJNEA,#XQ,BD;判断显示是否为星期与温度MOVR1,#XQMOVA,59H;一小时内温度只判断3次JNZPDW;3次未完则调判断温度程序BD:DJNZ43H,PD;地址修改满3次否MOV43H,#3;重新装入值MOVR1,#20H;修改显示首地址为年单元LJMPPDRETBAO:LCALLBJ;调报警子程序DJNZ4DH,BAOMOV4DH,#250MOV4AH,YUE;将变化后的月份存于4AH内LJMPBUB;返回PDW:MOVA,WDHJZGWN;判断温度的正负DWN:MOVA,WDZCJNEA,#10,X0;为负时判断温度值是否大于10X0:JNCBOJ;大于10则报警LJMPBDGWN:MOVA,WDZCJNEA,#38,X1;为整时判断温度值是否大于38X1:JNCBOJ;大于38则报警LJMPBDBOJ:DEC59HMOVR1,#XQ;温度报警LCALLBJLJMPBDKEY4:LCALLSFF;按键4释放否MOVA,R1MOVR0,A;保护显示首地址MOV47H,R0;保护显示首地址MOVR3,#00HMOV4BH,#2;用于判断十位与个位LJMPXHKEY44:LCALLSFF;按键4释放否INCR3;片选加一,显示下一位DJNZ4BH,TTMOV4BH,#2INCR0;修改显示地址TT:DJNZ44H,XH;判断六位数码管显示完否MOV44H,#6MOVR3,#0FFH;R3加一位00HMOVR0,47H;恢复显示首地址LJMPKEY4;重新显示第一位数码管XH:LCALLPDUJZBB;判断是否有键按下LCALLDL20MS;延时20msLCALLPDUJZBBJNBP2.5,KEY47;7键按下否JNBP2.6,KEY44;4键按下否JNBP2.7,KEY1;1键按下否BB:MOVA,4BHCJNEA,#2,GW;判断显示的是十位还是个位MOVA,R3MOVP1,A;赋位选MOVA,R0MOVB,#10DIVABMOVCA,A+DPTR;查表MOVP0,A;显示十位LCALLDELYLJMPXH;继续检查键盘RETGW:MOVA,R3MOVP1,A;获取位选MOVA,R0MOVB,#10DIVABMOVA,B;获取个位MOVCA,A+DPTR;查表MOVP0,A;显示个位LCALLDELYLJMPXH;继续检查键盘RETKEY1:LCALLSFF;按键1释放否MOVA,4BHCJNEA,#2,GWE;判断显示的是十位还是个位MOVA,R0 MOVB,#10DIVAB;获取十位CJNEA,#9,JS;判断十位为九否MOVA,R0SUBBA,#90;十位为九该单元减九十MOVR0,ALJMPXH;继续检查键盘RETJS:MOVA,R0ADDA,#10;十位不为九该单元加十MOVR0,ALCALLDELYLJMPXH;继续检查键盘RETGWE:MOVA,R0MOVB,#10DIVABMOVA,B;获取个位CJNEA,#9,JIA;判断个位为九否MOVA,R0SUBBA,#9;个位为九该单元减九MOVR0,ALCALLDELYLJMPXH;继续检查键盘RETJIA:INCR0;个位不为九该单元加一LJMPXH;继续检查键盘RETKEY47:LJMPPD;7键按下返回至主程序RET; 长调用子程序XS:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,40H;表PDU:MOVA,P2XRLA,#0F0H;键盘扫描子程序RETCS:CLRA;显示子程序MOVR3,#00H;位选赋初值00HMOVR2,#3;显示3个单元DO:JNBFLAG1,DM;判断是否节日提醒MOVP1,#07H;有节日提醒则LED灯亮LCALLDELYDM:MOVP0,#00H;数码管清零MOVP1,A;获取位选状态MOVB,#10LCALLCONT,调显示部分INCR3;获取下一个位MOVA,R3DJNZR2,DO;显示一周否RET;返回CONT:MOVA,R1DIVAB;作除法,单元除以10CJNER1,#WDH,TG;判断是否为温度符号单元ADDA,#10;为零则无显示,为1则显示TG:CJNER1,#XQ,TGO;是否为星期单元ADDA,#10;十位为零则无显示 TGO:MOVCA,A+DPTRMOVP0,A;获取数码管段选LCALLDELYINCR3;获取下一个显示位选MOVA,R3MOVP1,AMOVP0,#00H;数码管清零MOVA,BCJNER1,#WDH,TGU;是否为温度符号单元ADDA,#10;为零则无显示,为1则显示TGU:MOVCA,A+DPTR;查表MOVP0,ACJNER2,#01H,DP;是否显示为最后一个数码管DECR1DECR1;单元重新从第一个开始LCALLDELYRETDP:CJNER1,#WDH,DP00;判断显示是否为WDH单元LCALLDELYINCR1;若是则不加小数点RETDP00:SETBP0.7;若不是则显示小数点LCALLDELYINCR1RETDELY:MOV40H,#10DELY0:MOV41H,#10DELY1:NOPNOPDJNZ41H,DELY1DJNZ40H,DELY0;短延时RETDL20MS:MOV45H,#100DL1:MOV46H,#36DL0:NOPNOPNOPDJNZ46H,DL0DJNZ45H,DL1;延时20ms子程序RETSFF:MOVA,P2XRLA,#0F0HJNZSFFLCALLDL20MSMOVA,P2XRLA,#0F0HJNZSFF;判断按键释放否子程序RETNYR: MOVA,NIAN;日历子程序MOVB,#4DIVAB;年份除以4MOVA,BJZRN;判断平年闰年LJMPPINRN:MOVA,YUE;闰年CJNEA,#2,Y1;为2月否LJMPT29;跳至29天子程序PIN:MOVA,YUE;平年CJNEA,#2,Y1;为2月否LJMPT28;跳至28天子程序Y1:CJNEA,#1,Y3;为1月否LJMPT31;跳至31天子程序Y3:CJNEA,#3,Y4;为3月否LJMPT31;跳至31天子程序Y4:CJNEA,#4,Y5;为4月否MOVA,DAYCJNEA,#31,TT3SETBFLAG1;5月一号节日提醒TT3:LJMPT30;跳至30天子程序Y5:CJNEA,#5,Y6;为5月否LJMPT31;跳至31天子程序Y6:CJNEA,#6,Y7;为6月否MOVA,DAYCJNEA,#31,TT4SETBFLAG1;7月1号节日提醒TT4:LJMPT30;跳至30天子程序Y7:CJNEA,#7,Y8;为7月否LJMPT31;跳至31天子程序Y8:CJNEA,#8,Y9;为8月否LJMPT31;跳至31天子程Y9:CJNEA,#9,Y10;为9月否MOVA,DAYCJNEA,#31,TT2SETBFLAG1;十月一号节日提醒TT2:LJMPT30;跳至30天子程序Y10:CJNEA,#10,Y11;为10月否LJMPT31;跳至31天子程Y11:CJNEA,#11,Y12;为11月否LJMPT30;跳至30天子程序Y12:CJNEA,#12,PIN;为12月否MOVA,DAYCJNEA,#32,TT1SETBFLAG1;1月1号节日提醒TT1:LJMPT31;跳至31天子程T28:MOVA,DAYCJNEA,#29,GO;天满29否MOVDAY,#01H;满29天,则天赋01LJMPJY;跳至加月程序T29:MOVA,DAYCJNEA,#30,GO;天满30否MOVDAY,#01H;满30天,则天赋01LJMPJY;跳至加月程序T30:MOVA,DAYCJNEA,#31,GO;天满31否MOVDAY,#01H;满31天,则天赋01LJMPJY;跳至加月程序T31:MOVA,DAYCJNEA,#32,GO;天满32否MOVDAY,#01H;满32天,则天赋01LJMPJY;跳至加月程序GO:LJMPGOON;定时器重装初值BJ:LCALLCS;调显示子程序MOVP1,#07H;开LED灯LCALLDELYMOVP1,#06H;开蜂鸣器LCALLDELYDJNZ4CH,BJ;循环报警MOV4CH,#250RET; 中断程序ORG0300HZD0:PUSHACC;保护现场PUSHPSWDJNZ42H,GOON;20次50ms完否MOV42H,#20INCMIAO;秒单元加一MOVA,MIAOCJNEA,#60,GOON;秒单元满60否MOVMIAO,#00H;秒单元清零INCFEN;分单元加一MOVA,FENCJNEA,#60,GOON;分单元满60否MOVFEN,#00H;分单元清零INCHOUR;时单元加一MOV59H,#3;温度一小时内报警最多三次MOVA,HOURCJNEA,#24,GOON;时单元满24否MOVHOUR,#00H;时单元清零INCXQ;星期单元加一MOVA,X

温馨提示

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

评论

0/150

提交评论