单片机实时日历设计1303103079(共34页)_第1页
单片机实时日历设计1303103079(共34页)_第2页
单片机实时日历设计1303103079(共34页)_第3页
单片机实时日历设计1303103079(共34页)_第4页
单片机实时日历设计1303103079(共34页)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE 3 PAGE 38第一章 概述(i sh)单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成(guchng)的一个小而完善的计算机系统。1.1 单片机介绍(jisho) 单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统

2、更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。 早期的单片机都是8位或4位的。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器。现代人类生活中所用的几乎每件电子和机械

3、产品中都会集成有单片机。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多。1.2 单片机历史 单片机诞生于20世纪70年代末,经历了SCM、MCU两大阶段。 SCM即单片微型计算机(Sing

4、le Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。 MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。在发展MCU方面,最著名的厂家当数Philips公司。 Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。 1971年Intel公司研制出世界(shji)上第一个4位的微处理器,标志

5、着第一代微处理器问世,微处理器和微机时代从此开始。1971年11月,Intel推出MCS-4微型计算机系统,其中4004包含2300个晶体管,尺寸规格为3mm4mm,计算性能(xngnng)远远超过当年的ENIAC。 1972年4月,霍夫等人开发出第一个8位微处理器Intel 8008。由于8008采用的是P沟道MOS微处理器,因此仍属第一代微处理器。1973年intel公司研制出8位的微处理器8080;1973年8月,霍夫等人研制出8位微处理器Intel 8080,以N沟道MOS电路取代了P沟道,第二代微处理器就此诞生。主频2MHz的8080芯片(xn pin)运算速度比8008快10倍,可

6、存取64KB存储器,使用了基于6微米技术的6000个晶体管,处理速度为0.64MIPS(Million Instructions Per Second )。 1975年4月,MITS发布第一个通用型Altair 8800,带有1KB存储器,这是世界上第一台微型计算机。1976年Intel公司研制出MCS-48系列8位的单片机,这也是单片机的问世。Zilog公司于1976年开发的Z80微处理器,广泛用于微型计算机和工业自动控制设备。当时,Zilog、Motorola和Intel在微处理器领域三足鼎立。20世纪80年代初,Intel公司在MCS-48系列单片机的基础上,推出了MCS-51系列8位高

7、档单片机。MCS-51系列单片机无论是片内RAM容量,I/O口功能,系统扩展方面都有了很大的提高。 1.3 单片机的应用领域 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: (1).在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点。(2)在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管芯片等。(3)在计算机网络和通信领域中的应用现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信。(4)单片机在医用设备领域中的应用 单片机在

8、医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。(5)在各种大型电器中的模块化应用 某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,就需要复杂的类似于计算机的原理。第二章 设计方案论证(lnzhng)2.1 功能(gngnng)要求(1)、能显示(xinsh)年、月、日、时、分、秒、星期(2)、能对时间进行手动修正(3)、采用24小时制(4)、使用LED显示时间参数(5)、上电后,电子钟显示“2010年 1月 1日”“1时 1分 1秒 星期1”对时,分,秒,日,月,年高位为0时

9、做消隐处理,只显示单个数字以增强其可读性。2.2 单片机芯片的选择方案和论证方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具

10、有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。2.3 显示模块选择方案和论证方案一:采用(ciyng)LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。方案(fng n)二:采用点阵(din zhn)式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:采

11、用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少,所以采用了LED数码管作为显示。2.4 时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA

12、。2.5 电路设计最终方案确定综上各方案所述,对此次作品的方案选定: 以单片机AT89S52为主控制器,时间数据是通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。第三章 主控制器和外围(wiwi)器件3.1 AT89S52单片机AT89S52是一种低功耗、高性能CMOS 8位微控制器,使用 ATMEL 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全(wnqun)兼容。并具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,

13、全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。3.2 DS1302芯片(xn pin)介绍低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重

14、要意义。采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询

15、等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。 DS1302的性能(xngnng)特性:(1)实时时钟(shzhng),可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;(2)用于高速数据暂存的318位RAM;(3)最少引脚的串行I/O;(4)2.55.5V 电压(diny)工作范围;(5)2.5V时耗电小于300nA;(6)用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;(7)简单的3线接口;(8)可选的慢速充电(至VCC1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的

16、串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于

17、VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。DS1302数据操作原理DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。DS1302的管脚图如图3-1所示,表3-1为各引脚的功能。 表3-1 DS1302

18、引脚功能表引脚号引脚名称功能1VCC2主电源2,3X1,X2振荡源,外接32768HZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源DS1302的控制字如图3-1所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据(shj)写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。 7 6 5 4 3 2 1 01RAMCKA4A3A2A1A

19、0R0W图3-1 控制(kngzh)字节的含义为了提高对32个地址的寻址能力(地址/命令位15逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始(kish)。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图3-2所示。SCLKKRSTI/O571357210246046R/CA2A3A0A1R/

20、WA41DATAI/ODATAI/OBYTE图3-2数据(shj)读写程序DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放(cnfng)的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3-2,其中奇数为读操作,偶数为写操作。表3-2 片内时钟(shzhng)数据寄存器寄存器命令码数据范围寄存器中各位的内容名称地址写读76543210秒00H80H81H0059CH秒数据分01H82H83H00590分数据时02H84H85H0112或002312/24010/AP时数据日03H86H87H0128,2930,3100日数据月04H88H89H0112000月数据星期

21、05H9AH8BH010700000星期数据年06H8CH8DH0099年数据多字节读写BEHBFH3.3 DS1302 的应用实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超级电容(10万F以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100F就可以保证1小时的正常走时)。DS1302在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间。

22、DS1302的时钟电路如图3-3所示。图3-3 DS1302时钟(shzhng)电路3.4 数码管LEDLED显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点就发光。控制(kngzh)相应的管导通,就能显示出对应字符。各段LED显示器需要由驱动电路驱动。在七段LED显示器中,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。3.5 译码器74HC13874HC138译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线A0、A1、A2不同的高低电平组合来控制Y0

23、Y7的输出状态,其中4和5为使能地端,与8引脚共同接地,当接高电平时Y0到Y7输出高电平。6号脚为使能端,为高电平时有效。74HC138封装如图3-4。当需要级联时只需要改变使能端信号引脚即可,连接(linji)方法简单。 图3-4 74HC138封装图3.6 锁存器74LS24474ls244由2组、每组四路输入、输出构成。每组有一个控制端G,由控制端的高或低电平决定(judng)该组数据被接通还是断开。74LS244为3态8位缓冲器,一般用作总线驱动器。74LS244没有(mi yu)锁存的功能。地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。8086/8088数

24、据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。当微处理器与存储器交换信号时,首先由CPU发出(fch)存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。 锁存器是一个很普通的时序电路。一般的,它在时钟上升沿或者下降沿来的时候锁存输入,然后产生输出,在其他的时候输出都不跟随输入变化,这就是所谓边缘触发的D触发器。第四章 硬件设计4.1 电路设计框图AT89S52主控制模块DS1302时钟模块LED数码管动态扫描显示模块键盘模块复位电路时钟电路图4-1电路设计框图4.2 系统概述本电路是由AT89S52

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

26、直接影响着整个系统(xtng)的可靠性,所以合理的安排电路能提高电子产品的性能。4.3 电源(dinyun)设计 在这里因设计(shj)分工和侧重点不同,电源模块用通用的5v变压器。4.4 单片机的复位电路图4-2手动复位(f wi)电路在系统运行的过程中,有时可能对系统需要进行复位,为了避免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路(dinl)。如图4-2所示。只需使开关闭合,在RST端就会出现一定时间的高电平信号,从而使单片机实现复位。4.5 单片机系统(xtng)的晶振电路单片机必须在时钟的驱动下才能工作。MCS-51系列单片机内部都有一个时钟振荡电路,只需外接晶振源,就能

27、产生一定频率的时钟信号。图4-3是内部时钟工作电路图。图4-3单片机内部晶振电路(dinl)连接图4.6 主电路设计主电路的功能是完成年、月、日、星期、时、分、秒之间的转换, 再送往LED显示,并且接受键盘操作(cozu),对日期和时间进行校正。电路原理图如图4-4所示,显示部分用P0口做为输出数据接到LED数码管a到h,并接74ls244做为各段的驱动。用P3口的低3位接译码器的A0,A1,A2端,用P3.3,P3.4,P3.5分别接译码器的使能端,通过(tnggu)控制P3口来控制LED的动态扫描。单片机的18和19引脚接12MHZ的晶振,并接两个22PF的电容同时接地,单片机复位端接一极

28、性电容并连接到电源处,在极性电容的负极接10K的电阻,并连接至地做为放电用。本设计用到四个独立式键盘分别接到P1口的低4位,用P1口的P1.4,P1.5,P1.6接日历时钟的使能端和时钟端及数据输入输出口,并在日历时钟上接32.768KHZ的晶振,并接两个22PF的电容终端和地相连,各芯片的电源部分分别接到有开关式电源产生的5V电源上,芯片的接地端都接在公共地上。设计采用动态显示,轮流扫描各个LED使之显示相应的数型码,当扫描频率大于人眼所能识别的频率时就看不到闪烁现象。动态显示的亮度不如静态显示,但静态显示占用的I/O口资源较多,往往用移位寄存器74LS164等来扩充其I/O口不足的情况,当

29、显示位数较多时,这样势必增加硬件开销,增大成本,不利于开阔市场。图4-4电路(dinl)原理图第五章 软件设计在整体设计和硬件(yn jin)设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整应用程序,与硬件相结合完成相应功能。5.1 主程序设计(chn x sh j)主程序才用模块化设计,流程图如图5-1所示。首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用显示子程序显示数据,最后又转到键盘程序来回循环。对定时器T0初始化时,首先置初值,CPU开中断,定时器T0开中断,

30、并且开始计数,而对定时器T1初始化时,首先置初值,定时器T1关中断,并且停止计数,只有收到命令时才能产生中断。寄存器的初始化主要是初始化执行程序时用到的部分RAM空间,防止程序执行时带来混乱。开始初始化T0并开中断初始化T1并关中断寄存器初始化标志位初始化初始化时间调键盘子程序调日历子程序调显示子程序结束图5-1程序(chngx)流程图5.2 键盘(jinpn)子程序设计有键按下,调用10ms延时程序(chngx),再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序。通过判断K1按下次数来判断是调时还是定时。连按K1键8次时则返回到原来界面。判断键值为1时调秒状态

31、,对应的秒低位闪烁,2时调分状态分闪烁,3时调时状态时闪烁,4时调日状态日闪烁,5时调月状态月闪烁,6时调年状态年闪烁,7时调星期状态星期闪烁。K2为加1键,K3为减1键,K4为总返回键,只有按下K1为8才返回,而通过按下K4键即可返回。由于键盘流程图非常复杂,在此只表示秒,如图5-2。N开始 有键按下?延时10msK2按下?K3按下?K4按下?K1按下?调显示K1为0?键值加1Y调显示有键按下?键值清0标志位清0返回回 NNNYNYN下1YYY下31键值为1?调显示秒闪烁秒标志位置1K2按下?K3按下?秒减1秒数据送DS1302秒加13YNYY键值为?N。图5-2 键盘子程序流程图5.3 日

32、历(rl)时钟子程序设计DS1302与CPU的连接需要(xyo)三条线,即SCLK(7)、I/O(6)、RST(5)。日历时钟DS1302的读写需要初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送是低位在先。读写都是16位数据高8位是地址低8位是数据,在读写时要严格遵从(zncng)其读写时序,否则读写将会失效。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果(rgu)在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.

33、5V之前,RST必须(bx)保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,这一点我们要一定注意。当RST置为高电平时,在串行时钟的SCLK的上升沿,DS1302从I/O端口读入一位数据,8个串行时钟脉冲就可以读入一字节的数据。在串行时钟的下降沿,DS1302向I/O端口输出一位数据,8个串行时钟脉冲就可以输出一字节的数据。RST置1开 始发送1位命令码命令码8位送完?写一位数据数据写完?RST置0(a)时钟写结 束开 始RST置1发送1位命令码命令码8位送完?读一位数据数据读完?RST置0结 束(b) 时钟读图5-3 日历时钟的写和读NYYYYNNN5.4 显示(xinsh)子

34、程序设计本设计(shj)的显示部分具有消隐和闪烁功能,当时分秒等高位为0时显示消隐, 此时在读时间时更加明了,但低位不能显示消隐。闪烁功能也是本设计的一个难点,本设计采用8个位标志位,其中一个标志位通过用定时器0产生一个周期大约为每秒1.5次,使闪烁时效果达到最好。此时定时器采用定时中断的工作方式,这样可以充分利用CPU资源(zyun)。另外7个标志位是时分秒等的位标志位,当秒标志位置1时即秒开闪烁,与用中断产生的标志位相结合,即在一个周期内为0时此时消隐为1时开显示,这样就使在调时间时对应的位闪烁。第六章 系统调试单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可

35、运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。 以下是本次设计所有的程序:ZHUAN BIT 50H;闪烁标志位辅助标志位ZHUAN1 BIT 51H;年开闪烁的标志位ZHUAN2 BIT 52H;月开闪烁的标志位ZHUAN3 BIT 53H;日开闪烁的标志位ZHUAN4 BIT 54H;时开闪烁的标志位ZHU

36、AN5 BIT 55H;分开闪烁的标志位ZHUAN6 BIT 56H;秒开闪烁的标志位ZHUAN7 BIT 57H;星期开闪烁的标志位ORG 0000HLJMP START ;开始并初始化ORG 000BH ;定时/计数T0中断LJMP ZDUANORG 001BH ;定时/计数T1中断LJMP ZDUAN2ZDUAN:MOV TH0,#00H ;使ZHUAN由正到负周期大约为1.5MOV TL0,#00HDJNZ R7,ZDUAN1 ;循环指令CPL ZHUAN ;闪烁标志位求反MOV R7,#3ZDUAN1:RETI ;中断返回ZDUAN2:MOV TH1,#0FCHMOV TL1,#43

37、HCPL P3.0RETIORG 0100HSTART:MOV SP,#70H;设堆栈MOV TMOD,#11H ;T0,TI工作(gngzu)方式1MOV TH0,#00HMOV TL0,#00HMOV TH1,#0FCHMOV TL1,#43HSETB EA;开放(kifng)CPUSETB ET0;开放(kifng)T0中断SETB TR0;启动T0工作CLR ZHUAN1;初始化标志位CLR ZHUAN2CLR ZHUAN3CLR ZHUAN4CLR ZHUAN5CLR ZHUAN6CLR ZHUAN7MOV R7,#3MOV 5FH,#00H;初始化寄存器MOV 30H,#01H;时

38、间赋初始值MOV 31H,#01HMOV 32H,#01HMOV 33H,#01HMOV 34H,#01HMOV 35H,#01HMOV 36H,#10HSETB P1.4;启动设置写保护寄存器MOV A,#10001110B;命令字节,07H寄存器写ACALL WBYTEMOV A,#00H;允许写数据字节ACALL WBYTECLR P1.4;RST=0,停止传送MOV R0,#30H ;数据存放首地址MOV R2,#8;写8个字节SETB P1.4;启动连续写8个字节MOV A,#0BEH;设多字节写命令字LCALL WBYTECHUSHI:MOV A,R0;取数据LCALL WBYTE

39、;写一个字节INC R0DJNZ R2,CHUSHI ;循环写8个字节主程序MAIN:LCALL JIAN;调键盘子程序LCALL RILI;调日历时钟程序LCALL XIAN;调显示程序SJMP MAIN键盘程序JIAN:MOV P1,#0FFH;初始MOV A,P1CPL AJNZ JI1;判键按下LJMP JIAN4JI1:LCALL DELAY;调延时CPL AJNZ JI2LJMP JIAN4JI2:JNB P1.1,JIAN3;判K2键为0转JNB P1.2,JIAN3;判K3键为0转JIAN0:MOV P1,#0FFHJNB P1.3,JIAN3;判K4键为0转JNB P1.0,

40、JIAN1;判K1键为0转LJMP JIANXJIAN1:LCALL DELAY;调延时去抖动(dudng)JB P1.0,JIANX;为1就是(jish)键抖动JIAN11:LCALL XIAN;调显示(xinsh)JNB P1.0,JIAN11;判键K1松开MOV A,5FHADD A,#1;寄存器加1MOV 5FH,ACJNE A,#8,JIANXLJMP JIAN3JIANX:MOV A,5FHCJNE A,# 1,JIA1;比较转移指令A不等于#时,转移LJMP TIAOM;转调秒子程序JIA1:MOV A,5FHCJNE A,#2,JIA2LJMP TIAOF;转调分子程序JIA2

41、:MOV A,5FHCJNE A,#3,JIA3LJMP TIAOS;转调时子程序JIA3:MOV A,5FHCJNE A,#4,JIA4LJMP TIAOR;转调日子程序JIA4:MOV A,5FHCJNE A,#5,JIA5LJMP TIAOY;转调月子程序JIA5:MOV A,5FHCJNE A,#6,JIA6LJMP TIAON;转调年子程序JIA6:LJMP TIAOX;转调星期子程序JIAN3:CLR ZHUAN1;标志位清0CLR ZHUAN2CLR ZHUAN3CLR ZHUAN4CLR ZHUAN5CLR ZHUAN6CLR ZHUAN7MOV 5FH,#00HJIAN2:L

42、CALL XIAN;调显示子程序MOV A,P1 CPL AJNZ JIAN2JIAN4:RET调秒TIAOM:SETB ZHUAN6 ;秒闪烁标志位置1LCALL XIANJNB P1.1,MIAOZ;加转移JNB P1.2,MIAOJ;减转移LJMP JIAN0MIAOZ:LCALL DELAY;调延时去抖动JNB P1.1,MIAOZ1LJMP JIAN0MIAOZ1:LCALL XIANJNB P1.1,MIAOZ1;判键K2松开MOV A,30H;取秒数据ADD A,#1;加1DA A;十进制调整指令MOV 30H,A;送回秒寄存器CJNE A,#60H,MIAOZ2MOV 30H,

43、#00H;秒值过60为0LJMP MIAOZ2MIAOJ:LCALL DELAY;调延时去抖动(dudng)JNB P1.2,MIAOJ1LJMP JIAN0MIAOJ1:LCALL XIANJNB P1.2,MIAOJ1;判键K3松开(sn ki)MOV A,30H;取秒数据(shj)MOV B,#10HDIV AB;A除以BMOV 61H,B;数据个位放到61HMOV B,#10MUL AB;A乘以BADD A,61H;不带进位加法DEC A;A减1MOV B,#10DIV ABSWAP AADD A,BMOV 30H,ACJNE A,#96H,MIAOZ2MOV 30H,#59HMIAO

44、Z2:MOV A,30HANL A,#0FH;分离低四位MOV 40H,A;存数据到寄存器MOV A,30HSWAP A;半字节交换ANL A,#0FHMOV 41H,A;存数据到寄存器SETB P1.4;启动设置写保护寄存器MOV A,10001110B;命令字节,寄存器07HACALL WBYTEMOV A,#00H;允许写数据字节ACALL WBYTECLR P1.4;停止传送SETB P1.4;启动写MOV A,#80H;秒写命令字节LCALL WBYTEMOV A,30H;写秒数据到DS1302LCALL WBYTELCALL XIANLJMP JIAN0RET调分TIAOF:CLR

45、 ZHUAN6;清秒标志位SETB ZHUAN5;置分标志位LCALL XIANJNB P1.1,FENZ;加转移JNB P1.2,FENJ;减转移LJMP JIAN0FENZ:LCALL DELAY;调延时去抖动JNB P1.1,FENZ1LJMP JIAN0FENZ1:LCALL XIANJNB P1.1,FENZ1;判键K2松开MOV A,31H;取秒数据ADD A,#1;加1DA A ;十进制调整指令MOV 31H,A;送回分寄存器CJNE A,#60H,FENZ2MOV 31H,#00H;值过60为0LJMP FENZ2FENJ:LCALL DELAY;调延时去抖动(dudng)JN

46、B P1.2,FENJ1LJMP JIAN0FENJ1:LCALL XIANJNB P1.2,FENJ1;判键K3松开(sn ki)MOV A,31H;取秒数据(shj)MOV B,#10HDIV AB;A除以BMOV 62H,B;数据个位放到62HMOV B,#10MUL AB;A乘以BADD A,62H;不带进位加法DEC A;A减1MOV B,#10DIV ABSWAP AADD A,BMOV 31H,ACJNE A,#96H,FENZ2MOV 31H,#59HFENZ2:MOV A,31HANL A,#0FH;分离低四位MOV 42H,A ;存数据到寄存器MOV A,31HSWAP A

47、;半字节交换ANL A,#0FHMOV 43H,A;存数据到寄存器SETB P1.4;启动设置写保护寄存器MOV A,10001110B;命令字节,寄存器07HACALL WBYTEMOV A,#00H;允许写数据字节ACALL WBYTECLR P1.4;停止传送SETB P1.4;启动写MOV A,#82H;分写命令字节ACALL WBYTEMOV A,31H;写分数据到DS1302ACALL WBYTEACALL XIANLJMP JIAN0RET调时TIAOS:CLR ZHUAN5;相同,后面略SETB ZHUAN4LCALL XIANJNB P1.1,SHIZJNB P1.2,SHI

48、JLJMP JIAN0SHIZ:LCALL DELAY+JNB P1.1,SHIZ1LJMP JIAN0SHIZ1:LCALL XIANJNB P1.1,SHIZ1MOV A,32HADD A,#1DA AMOV 32H,ACJNE A,#24H,SHIZ2MOV 32H,#00HLJMP SHIZ2SHIJ:LCALL DELAYJNB P1.2,SHIJ1LJMP JIAN0SHIJ1:LCALL XIANJNB P1.2,SHIJ1MOV A,32HMOV B,#10HDIV ABMOV 63H,BMOV B,#10MUL ABADD A,63HDEC AMOV B,#10DIV ABS

49、WAP AADD A,BMOV 32H,ACJNE A,#96H,SHIZ2MOV 32H,#23HSHIZ2:MOV A,32HANL A,#0FHMOV 44H,AMOV A,32HSWAP AANL A,#0FHMOV 45H,ASETB P1.4MOV A,10001110BACALL WBYTEMOV A,#00HACALL WBYTECLR P1.4SETB P1.4MOV A,#84HACALL WBYTEMOV A,32HACALL WBYTEACALL XIANLJMP JIAN0RET调日TIAOR:CLR ZHUAN4SETB ZHUAN3LCALL XIANJNB P1

50、.1,RIZJNB P1.2,RIJLJMP JIAN0RIZ:LCALL DELAYJNB P1.1,RIZ1LJMP JIAN0RIZ1:LCALL XIANJNB P1.1,RIZ1MOV A,33HADD A,#1DA AMOV 33H,ACJNE A,#32H,RIZ2MOV 33H,#00HLJMP RIZ2RIJ:LCALL DELAYJNB P1.2,RIJ1LJMP JIAN0RIJ1:LCALL XIANJNB P1.2,RIJ1MOV A,33HMOV B,#10HDIV ABMOV 64H,BMOV B,#10MUL ABADD A,64HDEC AMOV B,#10D

51、IV ABSWAP AADD A,BMOV 33H,ACJNE A,#96H,RIZ2MOV 33H,#31HRIZ2:MOV A,33HANL A,#0FHMOV 46H,AMOV A,33HSWAP AANL A,#0FHMOV 47H,ASETB P1.4MOV A,10001110BACALL WBYTEMOV A,#00HACALL WBYTECLR P1.4SETB P1.4MOV A,#86HLCALL WBYTEMOV A,33HLCALL WBYTELCALL XIANLJMP JIAN0RET调月TIAOY:CLR ZHUAN3SETB ZHUAN2LCALL XIANJN

52、B P1.1,YUEZJNB P1.2,YUEJLJMP JIAN0YUEZ:LCALL DELAYJNB P1.1,YUEZ1LJMP JIAN0YUEZ1:LCALL XIANJNB P1.1,YUEZ1MOV A,34HADD A,#1DA AMOV 34H,ACJNE A,#13H,YUEZ2MOV 34H,#01HLJMP YUEZ2YUEJ:LCALL DELAYJNB P1.2,YUEJ1LJMP JIAN0YUEJ1:LCALL XIANJNB P1.2,YUEJ1MOV A,34HMOV B,#10HDIV ABMOV 65H,BMOV B,#10MUL ABADD A,65

53、HDEC AMOV B,#10DIV ABSWAP AADD A,BMOV 34H,ACJNE A,#00H,YUEZ2MOV 34H,#12HYUEZ2:MOV A,34HANL A,#0FHMOV 48H,AMOV A,34HSWAP AANL A,#0FHMOV 49H,ASETB P1.4MOV A,10001110BACALL WBYTEMOV A,#00HACALL WBYTECLR P1.4SETB P1.4MOV A,#88HLCALL WBYTEMOV A,34HLCALL WBYTELCALL XIANLJMP JIAN0RET调年TIAON:CLR ZHUAN2SETB

54、ZHUAN1LCALL XIANJNB P1.1,NIANZJNB P1.2,NIANJLJMP JIAN0NIANZ:LCALL DELAYJNB P1.1,NIANZ1LJMP JIAN0NIANZ1:LCALL XIANJNB P1.1,NIANZ1MOV A,35HADD A,#1DA AMOV 35H,ALJMP NIANZ2NIANJ:LCALL DELAYJNB P1.2,NIANJ1LJMP JIAN0NIANJ1:LCALL XIANJNB P1.2,NIANJ1MOV A,35HMOV B,#10HDIV ABMOV 66H,BMOV B,#10MUL ABADD A,66

55、HDEC AMOV B,#10DIV ABSWAP AADD A,BMOV 35H,ACJNE A,#96H,NIANZ2MOV 35H,#99HNIANZ2:MOV A,35HANL A,#0FHMOV 4AH,AMOV A,35HSWAP AANL A,#0FHMOV 4BH,ASETB P1.4MOV A,10001110BACALL WBYTEMOV A,#00HACALL WBYTECLR P1.4SETB P1.4MOV A,#8CHLCALL WBYTEMOV A,35HLCALL WBYTELCALL XIANLJMP JIAN0RET调星TIAOX:CLR ZHUAN1SET

56、B ZHUAN7LCALL XIANJNB P1.1,XQZJNB P1.2,XQJLJMP JIAN0XQZ:LCALL DELAYJNB P1.1,XQZ1LJMP JIAN0XQZ1:LCALL XIANJNB P1.1,XQZ1MOV A,38HADD A,#1DA AMOV 38H,ACJNE A,#08H,XQZ2MOV 38H,#01HLJMP XQZ2XQJ:LCALL DELAYJNB P1.2,XQJ1LJMP JIAN0XQJ1:LCALL XIANJNB P1.2,XQJ1MOV A,38HMOV B,#10HDIV ABMOV 67H,BMOV B,#10MUL AB

57、ADD A,67HDEC AMOV B,#10DIV ABSWAP AADD A,BMOV 38H,ACJNE A,#00H,XQZ2MOV 38H,#07HXQZ2:SETB P1.4MOV A,10001110BACALL WBYTEMOV A,#00HACALL WBYTECLR P1.4SETB P1.4MOV A,#8AHLCALL WBYTEMOV A,38HLCALL WBYTELCALL XIANLJMP JIAN0RET时钟(shzhng)程序RILI:CLR P1.4NOPCLR P1.5NOPSETB P1.4;启动(qdng)连续读MOV A,#0BFH ;设多字节(z

58、 ji)读命令MOV R1,#8WRITE1:CLR P1.5RRC A ;右移位NOPMOV P1.6,C ;写一位到DS1302SETB P1.5;写上升沿有效DJNZ R1,WRITE1;循环送8位MOV R0,#30H;数据存放首地址MOV R2,#8READ0:MOV R3,#8;读一个字节8位READ1:CLR P1.5;读下降沿有效NOPMOV C,P1.6SETB P1.5RRC ADJNZ R3,READ1;循环(xnhun)读8位MOV R0,A;存入30H开始(kish)的单元INC R0DJNZ R2,READ0;循环(xnhun)读8位CLR P1.4;停止传送MOV

59、 A,35H ;星期与年存放数据交换XCH A,36HMOV 35H,AMOV R3,#6MOV R0,#30HMOV R1,#40HLOOP:MOV A,R0;分离ANL A,#0FHMOV R1,A;底4位放到40H开始的单元INC R1MOV A,R0SWAP AANL A,#0FHMOV R1,A;高4位放到41HINC R0INC R1;后面依次放DJNZ R3,LOOP;放到年为止MOV 38H,36H;放星期到38HMOV 4CH,#00HMOV 4DH,#02HRET显示程序XIAN:MOV DPTR,#TAB ;设置函数表指针MOV P3,#08H;片选年第4位MOV P0,

60、#5BH;年千位为2LCALL DELAY;延时显示MOV P3,#09H;片选年第3位MOV P0,#3FH;年百位为0LCALL DELAY;延时显示MOV P3,#0AH;片选年第2位MOV A,4BH;取年十位数据MOVC A,A+DPTR;取显示的数型码 MOV P0,A;显示年十位数据LCALL DELAYMOV P3,#0BH;片选年第1位JNB ZHUAN1,XIA1JNB ZHUAN,XIA1MOV P0,#00HLJMP XIA2XIA1:MOV A,4AH;取年个位数据MOVC A,A+DPTR;取显示的数型码MOV P0,A;显示年个位数据XIA2:LCALL DELA

温馨提示

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

评论

0/150

提交评论