华中科技大学
毕 业 设 计(论 文)
题 目: 单片机 院 (系): 机电学部
专 业:
班 级: 2
学生姓名: **
导师姓名: 刘老师
职称: 导师
华中科技大学 XXXXXXX毕业论文
摘要
本设计是基于51系列的单片机进行的实时日历和时钟显示设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。
实时日历和时钟显示的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89S52单片机,LED显示电路,以及调时按键电路等组成,系统通过LED显示数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括时钟程序、键盘程序,显示程序等。本系统以单片机的汇编语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。
关键词:AT89S52; DS1302; LED
II
华中科技大学 XXXXXXX
毕业论文
目录
1概述............................................................................................................................. 2 2设计方案论证............................................................................................................. 3
2.1功能要求.......................................................................................................... 3 2.2方案确定.......................................................................................................... 3 3主控制器和外围器件................................................................................................. 5
3.1AT89S52单片机 .............................................................................................. 5 3.2DS1302时钟芯片 ............................................................................................ 5 3.3数码管LED ..................................................................................................... 9 3.4译码器74HC138 ............................................................................................. 9 3.5锁存器74LS244 ............................................................................................ 10 4硬件设计................................................................................................................... 10
4.1电路设计框图................................................................................................ 10 4.2系统概述........................................................................................................ 10 4.3电源设计........................................................................................................ 11 4.4单片机的复位电路........................................................................................ 11 4.5单片机系统的晶振电路................................................................................ 11 4.6主电路设计.................................................................................................... 12 5软件设计................................................................................................................... 13
5.1主程序设计.................................................................................................... 13 5.2键盘子程序设计............................................................................................ 14 5.3日历时钟子程序设计.................................................................................... 17 5.4显示子程序设计............................................................................................ 19 6系统调试................................................................................................................... 19
6.1软件调试........................................................................................................ 19 6.2硬件调试........................................................................................................ 20 7结论........................................................................................................................... 21 致谢.............................................................................................................................. 23 参考文献...................................................................................................................... 24
1
华中科技大学 XXXXXXX
毕业论文
1概述
在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。
2
华中科技大学 XXXXXXX
毕业论文
本文设计的日历和时钟的显示广泛用于小型智能家用电子产品,如电子钟。利用单片机进行控制,实时时钟芯片DS1302进行记时,外加掉电存储电路和显示电路,可实现时间的调整和显示。电子钟既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。
2设计方案论证
2.1功能要求
1、能显示年、月、日、时、分、秒、星期 2、能对时间进行手动修正 3、采用24小时制 4、使用LED显示时间参数
5、上电后,电子钟显示“2010年 1月 1日” “1时 1分 1秒 星期1”
对时,分,秒,日,月,年高位为0时做消隐处理,只显示单个数字以增强其可读性。
2.2方案确定
2.2.1单片机芯片的选择方案和论证
方案:
采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
所以选择采用AT89S52作为主控制系统.
3
华中科技大学 XXXXXXX
毕业论文
2.2.2显示模块选择方案和论证
方案一:
采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。 方案二:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
2.2.3时钟芯片的选择方案和论证
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.
2.2.4电路设计最终方案确定
综上各方案所述,对此次作品的方案选定: 以单片机AT89S52为主控制器,时间数据是通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。
4
华中科技大学 XXXXXXX
毕业论文
3主控制器和外围器件
3.1AT89S52单片机
AT89S52是一种低功耗、高性能CMOS 8位微控制器,使用 ATMEL 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。并具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
3.2DS1302时钟芯片
3.2.1DS1302芯片介绍
低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义。
采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。 DS1302的性能特性
5
华中科技大学 XXXXXXX
毕业论文
·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数; ·用于高速数据暂存的31×8位RAM; ·最少引脚的串行I/O; ·2.5~5.5V 电压工作范围; ·2.5V时耗电小于300nA;
·用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式; ·简单的3线接口;
·可选的慢速充电(至VCC1)的能力。
DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。
DS1302数据操作原理
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
6
华中科技大学 XXXXXXX
毕业论文
U31234Vcc2X1X2GNDDS1302Vcc1SCLKI/ORST8765 图3-1 DS1302管脚图
如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC >=2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的管脚图如图3-1所示,表3-2为各引脚的功能。
DS1302的控制字如图3-3所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。
图3-3 控制字节的含义
为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图3-4所示。 SCLKRST
7 ≈ ≈ 华中科技大学 XXXXXXX
毕业论文
I/O ≈ R/W A0 A1 A2 A3 A4 R/C 1 ≈
0 1 2 345670124567DATA I/O BYTE DATA I/O BYTE
图3-4数据读写程序
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3-5,其中奇数为读操作,偶数为写操作。 寄存器 命令码 读 81H 83H 85H 数据范围 00~59 00~59 01~12 或00~23 01~28,29 30,31 01~12 01~07 00~99 — 寄存器中各位的内容 7 CH 0 12/ 24 0 0 0 6 5 秒数据 分数据 0 10/ AP 时数据 4 3 2 1 0 名称 地址 写 秒 分 时 00H 01H 02H 80H 82H 84H 日 月 03H 04H 86H 88H 9AH 8CH BEH 87H 89H 8BH 8DH BFH 0 日数据 0 0 0 0 月数据 0 0 星期数据 星期 05H 年 06H 年数据 — 多字节读写 表3-5 片内时钟数据寄存器
3.2.2DS1302 的应用
实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超级电容(10万μF以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100μF就可以保证1小时的正常走时)。DS1302在第一次加电后,需进行初始化操作。初始
8
华中科技大学 XXXXXXX
毕业论文
化后就可以按正常方法调整时间。
3.3数码管LED
LED显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点就发光。控制相应的管导通,就能显示出对应字符。各段LED显示器需要由驱动电路驱动。在七段LED显示器中,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。
静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU不在去访问它,因为各笔画段借口具有锁存功能,显示的内容也不会消失。
动态显示是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。静态显示有并行输出和串行输出两种方式。在本系统中数码管使用共阴极接法而且是用动态显示。
3.4译码器74HC138
74HC138译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线A0、A1、A2不同的高低电平组合来控制Y0~Y7的输出状态,其中4和5为使能地端,与8引脚共同接地,当接高电平时Y0到Y7输出高电平。6号脚为使能端,为高电平时有效。74HC138封装如图3-7。当需要级联时只需要改变使能端信号引脚即可,连接方法简单。
图
3-7
9
华中科技大学 XXXXXXX
毕业论文
74HC138封装图
3.5锁存器74LS244
74ls244由2组、每组四路输入、输出构成。每组有一个控制端G,由控制端的高或低电平决定该组数据被接通还是断开。
图3-8 74LS244引脚图
4硬件设计
4.1电路设计框图
LED数码管动态扫描显示模块 键盘模块 主控制复位电路 时钟电路 AT89S52 模块 DS1302时钟模块
4.2系统概述
本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,
10
华中科技大学 XXXXXXX
毕业论文
具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由15个数码管,74Hs138、74ls244构成。使用动态扫描显示方式对数字的显示。
4.3电源设计
在这里因设计分工和侧重点不同,电源模块用通用的5v变压器。
4.4单片机的复位电路
图4-2手动复位电路
在系统运行的过程中,有时可能对系统需要进行复位,为了避免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路。如图4-2所示。这种电路的设计,在系统的运行过程中需要复位时,只需使开关闭合,在RST端就会出现一定时间的高电平信号,从而使单片机实现复位。
4.5单片机系统的晶振电路
单片机必须在时钟的驱动下才能进行工作。MCS-51系列单片机内部都有一个时钟振荡电路,只需外接晶振源,就能产生一定频率的时钟信号送到单片机的内部的各个单元,决定单片机的工作速度。图4-3就是内部时钟工作方式的电路图,这是一种常用的方式。这种方式是外界振荡源,本设计就采用这种外接晶振
11
华中科技大学 XXXXXXX
毕业论文
的方法。电路中的两个电容的作用有两个:一是帮助振荡器起振(C1 C2的值大,起振的速度慢;反之,速度快。);二是对振荡器的频率起到微调的作用(C1 C2的值大,频率略有减少,反之,频率略有提高)。C1 C2的值采用30pF。
图4-3单片机内部晶振电路连接图
4.6主电路设计
主电路的功能是完成年、月、日、星期、时、分、秒之间的转换, 再送往LED显示,并且接受键盘操作,对日期和时间进行校正。
电路原理图如图4-4所示,显示部分用P0口做为输出数据接到LED数码管a到h,并接74ls244做为各段的驱动(为了简化电路图在此用了8个上拉电阻代替74ls244)。用P3口的低3位接译码器的A0,A1,A2端,用P3.3,P3.4,P3.5分别接译码器的使能端,通过控制P3口来控制LED的动态扫描。单片机的18和19引脚接12MHZ的晶振,并接两个22PF的电容同时接地,单片机复位端接一极性电容并连接到电源处,在极性电容的负极接一10K的电阻,并连接至地做为放电用。本设计用到四个独立式键盘分别接到P1口的低4位,用P1口的P1.4,P1.5,P1.6接日历时钟的使能端和时钟端及数据输入输出口,并在日历时钟上接一32.768KHZ的晶振,并接两个22PF的电容终端和地相连,各芯片的电源部分分别接到有开关式电源产生的+5V电源上,芯片的接地端都接在公共地上,在这里接电源部分就不再一一详述。
设计采用动态显示,轮流扫描各个LED使之显示相应的数型码,当扫描频率大于人眼所能识别的频率时就看不到闪烁现象。动态显示的亮度不如静态显示,但静态显示占用的I/O口资源较多,往往用移位寄存器74LS164等来扩充其I/O口不足的情况,当显示位数较多时,这样势必增加硬件开销,增大成本,不利于
12
华中科技大学 XXXXXXX
毕业论文
开阔市场。本设计的突出之处在于硬件电路简单,大大减少了硬件开销,这样又势必增加了软件开发的难度,但降低了成本有利于市场的开阔。
图4-4电路原理图
5软件设计
软件的设计是设计控制系统的应用程序。其任务是在整体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整应用程序,与硬件相结合完成相应功能。
5.1主程序设计
主程序才用模块化设计,流程图如图5-1所示。
从上面主程序看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用显示子程序显示数据,最后又转到键盘程序来回循环。
初始化部分主要有初始化定时器部分和和一些寄存器、标志位、初始化时间等。
13
华中科技大学 XXXXXXX
毕业论文
对定时器T0初始化时,首先置初值,CPU开中断,定时器T0开中断,并且开始计数,而对定时器T1初始化时,首先置初值,定时器T1关中断,并且停止计数,只有收到命令时才能产生中断。
开始 初始化T0并开中断 初始化T1并关中断 寄存器初始化 标志位初始化 初始化时间 调键盘子程序 调日历子程序 调显示子程序 结束 图5-1程序流程图
寄存器的初始化主要是初始化执行程序时用到的部分RAM空间,防止程序执行时带来混乱。
标志位初始化是对时间调整时判断是调分还是调时等而专设的位标志,初始化过程中标志位全部置0,即开始时是处于显示状态,而不是调整状态,这一点在程序中相当明了。
初始化时间是开机时显示的时间,并通过调用日历时钟的写程序来完成时间的置初值。
5.2键盘子程序设计
多功能键盘程序的设计是本设计的难点,也是完成本设计的重点,当有键按下时,调用10ms延时程序,再判断是否有键按下无则返回,若有先调用显示程 序再判断是否松开,否则再转到显示程序,这样避免了在按键松开之前能正常显示。其中K1键功能最多,通过判断K1键按下的次数来判断是调时间还是定时,并对对应的位置闪烁。本键盘深度为7级,即连续按下K1键8次时则返回到原来界面。当判断键值为1时则为调秒状态,对应的秒低位闪烁,为2时为调分状态并分闪烁,为3时为调时状态并时闪烁,为4时为调日状态并日闪烁,为5
14
华中科技大学 XXXXXXX
毕业论文
时为调月状态并月闪烁,为6时为调年状态并年闪烁,为7时为调星期状态并星期闪烁。 K2为加1键,K3为减1键,K4为总返回键,即在调时见时不用只有按下K1键值为8才返回,而通过按下K4键即可返回。由于键盘流程图非常复杂,在此只表示秒,如图5-2所示,其余略。
15
华中科技大学 XXXXXXX
毕业论文
开始 有键按下? 延时10ms N Y K2按下? Y N K3按下? 调显示 Y 有键按下? N K4按下? Y 键值清0 N K1按下? N 标志位清0 Y 调显示 返回K1为0? Y N 键值加1 下页3 下页1
16
华中科技大学 XXXXXXX
毕业论文
图5-2 键盘子程序流程图 秒数据送 DS1302 K2按下? 1 3 键值为1? Y 秒标志位置N 键值为? 调显示 秒闪烁 Y 。。。。。。。。。。。。。。。。。。。。。。。 N K3按下? Y 秒减秒加。。。。。。。。。。。。
5.3日历时钟子程序设计
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。日历时钟DS1302的读写需要初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送是低位在先。读写都是16位数据高8位是地址低8位是数据,在读写时要严格遵从其读写时序,否则读写将会失效。
17
华中科技大学 XXXXXXX
毕业论文
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,这一点我们要一定注意。
当RST置为高电平时,在串行时钟的SCLK的上升沿,DS1302从I/O端口读入一位数据,8个串行时钟脉冲就可以读入一字节的数据。在串行时钟的下降沿,DS1302向I/O端口输出一位数据,8个串行时钟脉冲就可以输出一字节的数据。
显示子程序设计电子产品是否实用其中显示占了很重要的地位,很多数人都渴
求用视觉效果好,范围广,直观明了,LED符合以上的要求,但相应的硬件设计相对复杂。
开 始 开 始 RST置1 RST置1 发送1位命令码 N 发送1位命令码 N 8位送完? Y 写一位数据 8位送完? Y 读一位数据 数据写完? Y RST置0 N 数据读完? Y RST置0 N 结 束 (a)时钟写
结 束 (b) 时钟读
图5-3 日历时钟的写和读
18
华中科技大学 XXXXXXX
毕业论文
5.4显示子程序设计
本设计的显示部分具有消隐和闪烁功能,当时分秒等高位为0时显示消隐, 此时在读时间时更加明了,但低位不能显示消隐。闪烁功能也是本设计的一个难点,本设计采用8个位标志位,其中一个标志位通过用定时器0产生一个周期大约为每秒1.5次,使闪烁时效果达到最好。此时定时器采用定时中断的工作方式,这样可以充分利用CPU资源。另外7个标志位是时分秒等的位标志位,当秒标志位置1时即秒开闪烁,与用中断产生的标志位相结合,即在一个周期内为0时此时消隐为1时开显示,这样就使在调时间时对应的位闪烁。
6系统调试
单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和硬件相结合系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物图的硬件组装与调试,这样就给开发者在提供了方便。
6.1软件调试
本设计是在Proteus软件和Wava6000软件相结合调试的,完全用仿真软件在PC机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。
目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。
整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。
19
华中科技大学 XXXXXXX
毕业论文
经过多次修改程序最后调试出来理想的效果,如图6-1所示
图6-1 Proteus仿真
用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以在PC机上开发和调试。调试和修改完毕后可以直接使用编程器将软件固化在目标系统ROM中,然后投入运行。
6.2硬件调试
焊接电路板如图6-2所示
单片机应用系统的硬件调试和软件调试是分不开的,许多硬件故障在软件调试时才能发现,但通常要先排除系统中明显的硬件故障。调试工作可以分为四步:
线路检查:根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。
电源调试:样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。调试的方法有两种:一种是断开样机稳压电源的输出端,检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载
20
华中科技大学 XXXXXXX
毕业论文
能力(用假负载)。确保电源无故障并性能符合设计要求。
通电检查:在确保电源良好前提下,接通电源。最好在电源与其余电路之间串接一个电流表。若接通后电流很大,必须立即切断电源。电源大得超出正常范围,说明电路中有短路或故障。通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。
如图6-2 焊接电路板
检查芯片的逻辑关系是否出错:加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。
本设计特点突出,性价比高,适合于家庭挂历,有很高应用价值。
7结论
硬件系统关系到所要设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以我们要有动手的好习惯。
软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU利用资源,具有执行效率高等优点,本设计用到定时器中断以减少对CPU的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。
21
华中科技大学 XXXXXXX
毕业论文
在这次设计中我学到了很多,也发现了自己的不足,也难免有错误之处,敬请提出!
22
华中科技大学 XXXXXXX
毕业论文
致谢
本文研究与设计的八路多功能抢答器采用了通用的电子元器件,利用AT89S51单片机及外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。计分接收的单片机部分利用汇编语言编写。设计时,首先通过在线编程,然后具体安装,仿真,完全实现了设计功能。
本设计中,利用常规的单片机扫描识别的方法。通过硬件电路的具体应用和系统的仿真研究得出,本设计不仅安装简单、成本低,更重要的是工作性能稳定,是一个实用、创新型的工程设计。
由于采用汇编语言设计电路,所以本设计在编程成功后,硬件电路基本上不需要调试就可正常使用。即使在设计完毕交给用户使用后,对系统的功能改进或升级也只是通过改写程序来完成,极大地方便了用户或设计者对电路更新。
回头再看看该设计,还可以将设计的扩展功能增强:1、可以设计声控装置,在主持人说开始时,系统自动完成清零并开始计时的功能。2、在主持人读题的过程中,禁止抢答,可以在主持人控制的开关上另接一个与其一样的电路,即可实现“违规者可见”的功能,即在主持人读题时如果有人违反比赛规定抢先按动按钮,显示器可以显示是哪个参赛队抢先,便于作出相应的处理。如果提供相应的器材及时间上的宽限,一定可以完成上述扩展功能,进一步完善作品。
经过这半个学期的努力,在老师和同学的帮助下终于彻底的做完了毕业设计的所有工作。通过这次的毕业设计,我能运用已学的知识解决我在设计中遇到的问题,使自己的动手能力和思考问题的能力得到了很大的提高。在做设计的过程中我查阅了很多的资料,并认真的阅读这些与我的设计相关的资料,从而我的专业涵养得到了提高,知识的储备量也有所增加。在做设计时,我复习了很多专业课的知识,这使得我的专业知识在离校之前得到了巩固。我认为这是我在整个设计工程中得到的最好的回报。
整个设计通过了软件和硬件上的调试、仿真。我想这对于自己以后的学习和工作都会有很大的帮助的。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有
23
华中科技大学 XXXXXXX
毕业论文
些问题不但要深入地理解,而且要不断地更正以前的错误思维。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
但是,通过这次设计我也发现自己的很多不足之处。在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的工作和学习中得到改善。而且,通过这次设计,我懂得了学习的重要性,学会了坚持和努力,这将为以后的学习做出了最好的榜样!同时,该设计也有不足之处,缺少了答题计分等功能。我将会在以后的学习中继续学习。
!
参考文献
[01]何宏主编.单片机原理与接口技术.北京:国防工业出版社.2006.07
24
华中科技大学 XXXXXXX
毕业论文
[02]杨西明,朱骐主编.单片机编程与应用入门.北京:机械工业出版社.2004.06 [03]先锋工作室编著.单片机程序设计实例.北京:清华大学出版社.2003.01 [04]谢宜仁主编.单片机实用技术问答.北京:人民邮电出版社.2003.02
[05]孙江宏,李良玉等编著.Protel99电路设计与应用.北京:机械工业出版社.2004.07 [06]房小翠,王金凤编著.单片机实用系统设计技术.北京:国防工业出版社.1999.06 [07]秦曾煌主编.电工学(电子技术).北京:高等教育出版社,2004
[08]何立民.单片机高级教程应用与设计.北京:北京航空航天大学出版社,2000 [09]刘国荣单片微型计算机技术.北京:机械工业出版社,1996 [10]王迎旭.单片机原理与应用.北京:机械工业出版社,2004
[11]于永权.ATMEL89系列单片机应用技术.北京:北京航空航天大学出版社,2001 [12]高峰.单片微型计算机原理与接口技术.北京:科学出版社,2003 [13]各种网络教程及其他
25
华中科技大学 XXXXXXX
毕业论文
附录
附录Ⅰ硬件电路图
26
华中科技大学 XXXXXXX
毕业论文
附录Ⅱ主程序源代码
ZHUAN BIT 50H ;闪烁标志位辅助标志位 ZHUAN1 BIT 51H ;年开闪烁的标志位 ZHUAN2 BIT 52H ;月开闪烁的标志位 ZHUAN3 BIT 53H ;日开闪烁的标志位 ZHUAN4 BIT 54H ;时开闪烁的标志位 ZHUAN5 BIT 55H ;分开闪烁的标志位 ZHUAN6 BIT 56H ;秒开闪烁的标志位 ZHUAN7 BIT 57H ;星期开闪烁的标志位
ORG 0000H
LJMP START ;开始并初始化 ORG 000BH ;定时/计数T0中断 LJMP ZDUAN
ORG 001BH ;定时/计数T1中断 LJMP ZDUAN2
ZDUAN:MOV TH0,#00H ;使ZHUAN由正到负周期大约为1.5即当开闪烁时 每秒大约闪烁1.5次环境 MOV TL0,#00H
DJNZ R7,ZDUAN1 ;循环指令 CPL ZHUAN ;闪烁标志位求反 MOV R7,#3
ZDUAN1:RETI ;中断返回
ZDUAN2:MOV TH1,#0FCH MOV TL1,#43H CPL P3.0 RETI
27
华中科技大学 XXXXXXX
毕业论文
28
华中科技大学 XXXXXXX
毕业论文
ORG 0100H
START:MOV SP,#70H ;设堆栈 MOV TMOD,#11H ;T0,TI工作方式1 MOV TH0,#00H MOV TL0,#00H MOV TH1,#0FCH MOV TL1,#43H
SETB EA ;开放CPU SETB ET0 ;开放T0中断 SETB TR0 ;启动T0工作 CLR ZHUAN1 ;初始化标志位 CLR ZHUAN2 CLR ZHUAN3 CLR ZHUAN4 CLR ZHUAN5 CLR ZHUAN6 CLR ZHUAN7 MOV R7,#3
MOV 5FH,#00H ;初始化寄存器 MOV 30H,#01H ;时间赋初始值 MOV 31H,#01H MOV 32H,#01H MOV 33H,#01H MOV 34H,#01H MOV 35H,#01H MOV 36H,#10H
SETB P1.4 ;启动设置写保护寄存器
MOV A,#10001110B ;命令字节,07H寄存器写 ACALL WBYTE
29
华中科技大学 XXXXXXX
毕业论文
MOV A,#00H ;允许写数据字节 ACALL WBYTE
CLR P1.4 ;RST=0,停止传送 MOV R0,#30H ;数据存放首地址 MOV R2,#8 ;写8个字节
SETB P1.4 ;启动连续写8个字节 MOV A,#0BEH ;设多字节写命令字 LCALL WBYTE
CHUSHI:MOV A,@R0 ;取数据 LCALL WBYTE ;写一个字节 INC R0
DJNZ R2,CHUSHI ;循环写8个字节 ;主程序
MAIN:LCALL JIAN ;调键盘子程序 LCALL RILI ;调日历时钟程序 LCALL XIAN ;调显示程序 SJMP MAIN
;键盘程序
JIAN:MOV P1,#0FFH ;初始 MOV A,P1 CPL A
JNZ JI1 ;判键按下 LJMP JIAN4
JI1:LCALL DELAY ;调延时 CPL A JNZ JI2 LJMP JIAN4
30
华中科技大学 XXXXXXX
毕业论文
JI2:JNB P1.1,JIAN3 ;判K2键为0转 JNB P1.2,JIAN3 ;判K3键为0转 JIAN0:MOV P1,#0FFH
JNB P1.3,JIAN3 ;判K4键为0转 JNB P1.0,JIAN1 ;判K1键为0转 LJMP JIANX
JIAN1:LCALL DELAY ;调延时去抖动 JB P1.0,JIANX ;为1就是键抖动 JIAN11:LCALL XIAN ;调显示 JNB P1.0,JIAN11 ;判键K1松开 MOV A,5FH
ADD A,#1 ;寄存器加1 MOV 5FH,A CJNE A,#8,JIANX LJMP JIAN3 JIANX:MOV A,5FH
CJNE A,# 1,JIA1 ;比较转移指令A不等于#时,转移 LJMP TIAOM ;转调秒子程序 JIA1:MOV A,5FH CJNE A,#2,JIA2
LJMP TIAOF ;转调分子程序 JIA2:MOV A,5FH CJNE A,#3,JIA3
LJMP TIAOS ;转调时子程序 JIA3:MOV A,5FH CJNE A,#4,JIA4
LJMP TIAOR ;转调日子程序 JIA4:MOV A,5FH CJNE A,#5,JIA5
31
华中科技大学 XXXXXXX
毕业论文
LJMP TIAOY ;转调月子程序 JIA5:MOV A,5FH CJNE A,#6,JIA6
LJMP TIAON ;转调年子程序 JIA6:
LJMP TIAOX ;转调星期子程序 JIAN3:CLR ZHUAN1 ;标志位清0 CLR ZHUAN2 CLR ZHUAN3 CLR ZHUAN4 CLR ZHUAN5 CLR ZHUAN6 CLR ZHUAN7 MOV 5FH,#00H
JIAN2:LCALL XIAN ;调显示子程序 MOV A,P1 CPL A JNZ JIAN2 JIAN4:RET ;调秒
TIAOM:SETB ZHUAN6 ;秒闪烁标志位置1 LCALL XIAN
JNB P1.1,MIAOZ ;加转移 JNB P1.2,MIAOJ ;减转移 LJMP JIAN0
MIAOZ:LCALL DELAY ;调延时去抖动 JNB P1.1,MIAOZ1 LJMP JIAN0
MIAOZ1:LCALL XIAN
32
华中科技大学 XXXXXXX
毕业论文
JNB P1.1,MIAOZ1 ;判键K2松开 MOV A,30H ;取秒数据 ADD A,#1 ;加1
DA A ;十进制调整指令 MOV 30H,A ;送回秒寄存器 CJNE A,#60H,MIAOZ2
MOV 30H,#00H ;秒值过60为0 LJMP MIAOZ2
MIAOJ:LCALL DELAY;调延时去抖动 JNB P1.2,MIAOJ1 LJMP JIAN0
MIAOJ1:LCALL XIAN
JNB P1.2,MIAOJ1 ;判键K3松开 MOV A,30H ;取秒数据 MOV B,#10H
DIV AB ;A除以B MOV 61H,B ;数据个位放到61H MOV B,#10
MUL AB ;A乘以B ADD A,61H ;不带进位加法 DEC A ;A减1 MOV B,#10 DIV AB SWAP A ADD A,B MOV 30H,A
CJNE A,#96H,MIAOZ2 MOV 30H,#59H MIAOZ2:MOV A,30H
33
华中科技大学 XXXXXXX
毕业论文
ANL A,#0FH ;分离低四位 MOV 40H,A ;存数据到寄存器 MOV A,30H
SWAP A ;半字节交换 ANL A,#0FH
MOV 41H,A ;存数据到寄存器
SETB P1.4 ;启动设置写保护寄存器 MOV A,10001110B ;命令字节,寄存器07H ACALL WBYTE
MOV A,#00H ;允许写数据字节 ACALL WBYTE
CLR P1.4 ;停止传送
SETB P1.4 ;启动写 MOV A,#80H ;秒写命令字节 LCALL WBYTE
MOV A,30H ;写秒数据到DS1302 LCALL WBYTE LCALL XIAN LJMP JIAN0 RET ;调分
TIAOF:CLR ZHUAN6 ;清秒标志位 SETB ZHUAN5 ;置分标志位 LCALL XIAN
JNB P1.1,FENZ ;加转移 JNB P1.2,FENJ ;减转移 LJMP JIAN0
34
华中科技大学 XXXXXXX
毕业论文
FENZ:LCALL DELAY ;调延时去抖动 JNB P1.1,FENZ1 LJMP JIAN0 FENZ1:LCALL XIAN
JNB P1.1,FENZ1 ;判键K2松开 MOV A,31H ;取秒数据 ADD A,#1 ;加1 DA A ;十进制调整指令 MOV 31H,A ;送回分寄存器 CJNE A,#60H,FENZ2
MOV 31H,#00H ;值过60为0 LJMP FENZ2
FENJ:LCALL DELAY ;调延时去抖动 JNB P1.2,FENJ1 LJMP JIAN0 FENJ1:LCALL XIAN
JNB P1.2,FENJ1 ;判键K3松开 MOV A,31H ;取秒数据 MOV B,#10H
DIV AB ;A除以B MOV 62H,B ;数据个位放到62H MOV B,#10
MUL AB ;A乘以B ADD A,62H ;不带进位加法 DEC A ;A减1 MOV B,#10 DIV AB SWAP A ADD A,B MOV 31H,A
35
华中科技大学 XXXXXXX
毕业论文
CJNE A,#96H,FENZ2 MOV 31H,#59H FENZ2:MOV A,31H ANL A,#0FH ;分离低四位 MOV 42H,A ;存数据到寄存器 MOV A,31H
SWAP A ;半字节交换 ANL A,#0FH
MOV 43H,A ;存数据到寄存器
SETB P1.4 ;启动设置写保护寄存器 MOV A,10001110B ;命令字节,寄存器07H ACALL WBYTE
MOV A,#00H ;允许写数据字节 ACALL WBYTE
CLR P1.4 ;停止传送
SETB P1.4 ;启动写 MOV A,#82H ;分写命令字节 ACALL WBYTE
MOV A,31H ;写分数据到DS1302 ACALL WBYTE ACALL XIAN LJMP JIAN0 RET ;调时
TIAOS:CLR ZHUAN5;相同,后面略 SETB ZHUAN4 LCALL XIAN
36
华中科技大学 XXXXXXX
毕业论文
JNB P1.1,SHIZ JNB P1.2,SHIJ LJMP JIAN0 SHIZ:LCALL DELAY JNB P1.1,SHIZ1 LJMP JIAN0 SHIZ1:LCALL XIAN JNB P1.1,SHIZ1 MOV A,32H ADD A,#1 DA A MOV 32H,A CJNE A,#24H,SHIZ2 MOV 32H,#00H LJMP SHIZ2 SHIJ:LCALL DELAY JNB P1.2,SHIJ1 LJMP JIAN0 SHIJ1:LCALL XIAN JNB P1.2,SHIJ1 MOV A,32H MOV B,#10H DIV AB MOV 63H,B MOV B,#10 MUL AB ADD A,63H DEC A MOV B,#10 DIV AB
37
华中科技大学 XXXXXXX
毕业论文
SWAP A ADD A,B MOV 32H,A CJNE A,#96H,SHIZ2 MOV 32H,#23H SHIZ2:MOV A,32H ANL A,#0FH MOV 44H,A MOV A,32H SWAP A ANL A,#0FH MOV 45H,A
SETB P1.4 MOV A,10001110B ACALL WBYTE MOV A,#00H ACALL WBYTE CLR P1.4
SETB P1.4 MOV A,#84H ACALL WBYTE MOV A,32H ACALL WBYTE ACALL XIAN LJMP JIAN0 RET
38
华中科技大学 XXXXXXX
毕业论文
;调日
TIAOR:CLR ZHUAN4 SETB ZHUAN3 LCALL XIAN JNB P1.1,RIZ JNB P1.2,RIJ LJMP JIAN0
RIZ:LCALL DELAY JNB P1.1,RIZ1 LJMP JIAN0 RIZ1:LCALL XIAN JNB P1.1,RIZ1 MOV A,33H ADD A,#1 DA A MOV 33H,A CJNE A,#32H,RIZ2 MOV 33H,#00H LJMP RIZ2 RIJ:LCALL DELAY JNB P1.2,RIJ1 LJMP JIAN0 RIJ1:LCALL XIAN JNB P1.2,RIJ1 MOV A,33H MOV B,#10H DIV AB MOV 64H,B MOV B,#10 MUL AB
39
华中科技大学 XXXXXXX
毕业论文
ADD A,64H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 33H,A CJNE A,#96H,RIZ2 MOV 33H,#31H RIZ2:MOV A,33H ANL A,#0FH MOV 46H,A MOV A,33H SWAP A ANL A,#0FH MOV 47H,A
SETB P1.4 MOV A,10001110B ACALL WBYTE MOV A,#00H ACALL WBYTE CLR P1.4
SETB P1.4 MOV A,#86H LCALL WBYTE MOV A,33H LCALL WBYTE LCALL XIAN
40
华中科技大学 XXXXXXX
毕业论文
LJMP JIAN0 RET ;调月
TIAOY:CLR ZHUAN3 SETB ZHUAN2 LCALL XIAN JNB P1.1,YUEZ JNB P1.2,YUEJ LJMP JIAN0
YUEZ:LCALL DELAY JNB P1.1,YUEZ1 LJMP JIAN0
YUEZ1:LCALL XIAN JNB P1.1,YUEZ1 MOV A,34H ADD A,#1 DA A MOV 34H,A CJNE A,#13H,YUEZ2 MOV 34H,#01H LJMP YUEZ2 YUEJ:LCALL DELAY JNB P1.2,YUEJ1 LJMP JIAN0 YUEJ1:LCALL XIAN JNB P1.2,YUEJ1 MOV A,34H MOV B,#10H DIV AB
41
华中科技大学 XXXXXXX
毕业论文
MOV 65H,B MOV B,#10 MUL AB ADD A,65H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 34H,A CJNE A,#00H,YUEZ2 MOV 34H,#12H YUEZ2:MOV A,34H ANL A,#0FH MOV 48H,A MOV A,34H SWAP A ANL A,#0FH MOV 49H,A
SETB P1.4 MOV A,10001110B ACALL WBYTE MOV A,#00H ACALL WBYTE CLR P1.4
SETB P1.4 MOV A,#88H LCALL WBYTE
42
华中科技大学 XXXXXXX
毕业论文
MOV A,34H LCALL WBYTE LCALL XIAN LJMP JIAN0 RET ;调年
TIAON:CLR ZHUAN2 SETB ZHUAN1 LCALL XIAN JNB P1.1,NIANZ JNB P1.2,NIANJ LJMP JIAN0
NIANZ:LCALL DELAY JNB P1.1,NIANZ1 LJMP JIAN0
NIANZ1:LCALL XIAN JNB P1.1,NIANZ1 MOV A,35H ADD A,#1 DA A MOV 35H,A LJMP NIANZ2 NIANJ:LCALL DELAY JNB P1.2,NIANJ1 LJMP JIAN0
NIANJ1:LCALL XIAN JNB P1.2,NIANJ1 MOV A,35H MOV B,#10H
43
华中科技大学 XXXXXXX
毕业论文
DIV AB MOV 66H,B MOV B,#10 MUL AB ADD A,66H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 35H,A
CJNE A,#96H,NIANZ2 MOV 35H,#99H NIANZ2:MOV A,35H ANL A,#0FH MOV 4AH,A MOV A,35H SWAP A ANL A,#0FH MOV 4BH,A
SETB P1.4 MOV A,10001110B ACALL WBYTE MOV A,#00H ACALL WBYTE CLR P1.4
SETB P1.4 MOV A,#8CH
44
华中科技大学 XXXXXXX
毕业论文
LCALL WBYTE MOV A,35H LCALL WBYTE LCALL XIAN LJMP JIAN0 RET ;调星
TIAOX:CLR ZHUAN1 SETB ZHUAN7 LCALL XIAN JNB P1.1,XQZ JNB P1.2,XQJ LJMP JIAN0 XQZ:LCALL DELAY JNB P1.1,XQZ1 LJMP JIAN0 XQZ1:LCALL XIAN JNB P1.1,XQZ1 MOV A,38H ADD A,#1 DA A MOV 38H,A CJNE A,#08H,XQZ2 MOV 38H,#01H LJMP XQZ2 XQJ:LCALL DELAY JNB P1.2,XQJ1 LJMP JIAN0 XQJ1:LCALL XIAN
45
华中科技大学 XXXXXXX
毕业论文
JNB P1.2,XQJ1 MOV A,38H MOV B,#10H DIV AB MOV 67H,B MOV B,#10 MUL AB ADD A,67H DEC A MOV B,#10 DIV AB SWAP A ADD A,B MOV 38H,A CJNE A,#00H,XQZ2 MOV 38H,#07H XQZ2:
SETB P1.4 MOV A,10001110B ACALL WBYTE MOV A,#00H ACALL WBYTE CLR P1.4
SETB P1.4 MOV A,#8AH LCALL WBYTE MOV A,38H LCALL WBYTE
46
华中科技大学 XXXXXXX
毕业论文
LCALL XIAN LJMP JIAN0 RET
;时钟程序 RILI: CLR P1.4 NOP CLR P1.5 NOP
SETB P1.4 ;启动连续读 MOV A,#0BFH ;设多字节读命令 MOV R1,#8 WRITE1: CLR P1.5
RRC A ;右移位 NOP
MOV P1.6,C ;写一位到DS1302 SETB P1.5 ;写上升沿有效 DJNZ R1,WRITE1 ;循环送8位 MOV R0,#30H ;数据存放首地址 MOV R2,#8
READ0:MOV R3,#8 ;读一个字节8位READ1:CLR P1.5 ;读下降沿有效 NOP MOV C,P1.6 SETB P1.5 RRC A
47
华中科技大学 XXXXXXX
毕业论文
DJNZ R3,READ1 ;循环读8位 MOV @R0,A ;存入30H开始的单元 INC R0
DJNZ R2,READ0 ;循环读8位 CLR P1.4 ;停止传送 MOV A,35H ;星期与年存放数据交换 XCH A,36H MOV 35H,A MOV R3,#6 MOV R0,#30H MOV R1,#40H
LOOP:MOV A,@R0 ;分离 ANL A,#0FH
MOV @R1,A ;底4位放到40H开始的单元 INC R1 MOV A,@R0 SWAP A ANL A,#0FH
MOV @R1,A ;高4位放到41H INC R0
INC R1 ;后面依次放 DJNZ R3,LOOP ;放到年为止 MOV 38H,36H ;放星期到38H MOV 4CH,#00H MOV 4DH,#02H RET
;显示程序
XIAN:MOV DPTR,#TAB ;设置函数表指针
48
华中科技大学 XXXXXXX
毕业论文
MOV P3,#08H ;片选年第4位 MOV P0,#5BH ;年千位为2 LCALL DELAY ;延时显示 MOV P3,#09H ;片选年第3位 MOV P0,#3FH ;年百位为0 LCALL DELAY ;延时显示 MOV P3,#0AH ;片选年第2位 MOV A,4BH ;取年十位数据 MOVC A,@A+DPTR;取显示的数型码 MOV P0,A ;显示年十位数据 LCALL DELAY
MOV P3,#0BH ;片选年第1位 JNB ZHUAN1,XIA1 JNB ZHUAN,XIA1 MOV P0,#00H LJMP XIA2
XIA1:MOV A,4AH ;取年个位数据 MOVC A,@A+DPTR;取显示的数型码 MOV P0,A ;显示年个位数据 XIA2:LCALL DELAY
MOV P3,#0CH ;片选月十位 MOV A,49H ;取月十位数据 JNZ XIA3 ;判消隐 MOV P0,#00H ;为0则消隐 LJMP XIA4
XIA3:MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA4:LCALL DELAY
MOV P3,#0DH ;片选月个位 JNB ZHUAN2,XIA5
49
华中科技大学 XXXXXXX
毕业论文
JNB ZHUAN,XIA5 MOV P0,#00H
LJMP XIA6 ;闪烁跳过显示 XIA5:MOV A,48H ;取月个位数据 MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA6:LCALL DELAY
MOV P3,#0EH ;片选日十位 MOV A,47H ;取日十位数据 JNZ XIA7 ;判消隐 MOV P0,#00H ;为0则消隐 LJMP XIA8
XIA7:MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA8:LCALL DELAY
MOV P3,#0FH ;片选日个位 JNB ZHUAN3,XIA9 JNB ZHUAN,XIA9 MOV P0,#00H
LJMP XIA10 ;闪烁跳过显示 XIA9:MOV A,46H ;取日个位数据 MOVC A,@A+DPTR ;取显示数型码 MOV P0,A XIA10:LCALL DELAY
MOV P3,#10H ;片选时十位 MOV A,45H ;取时十位数据 JNZ XIA11 ;判消隐 MOV P0,#00H ;为0则消隐 LJMP XIA12
50
华中科技大学 XXXXXXX
毕业论文
XIA11:MOVC A,@A+DPTR;取显示数型码 MOV P0,A
XIA12:LCALL DELAY
MOV P3,#11H ;片选时个位 JNB ZHUAN4,XIA13 JNB ZHUAN,XIA13 MOV P0,#00H
LJMP XIA14 ;闪烁跳过显示 XIA13:MOV A,44H ;取时个位数据 MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA14:LCALL DELAY MOV P3,#12H ;片选分十位 MOV A,43H ;取分十位数据 JNZ XIA15 ;判消隐 MOV P0,#00H ;为0则消隐 LJMP XIA16
XIA15:MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA16:LCALL DELAY MOV P3,#13H ;片选分个位 JNB ZHUAN5,XIA17 JNB ZHUAN,XIA17 MOV P0,#00H
LJMP XIA18 ;闪烁跳过显示 XIA17:MOV A,42H;取分个位数据 MOVC A,@A+DPTR;取显示数型码 MOV P0,A
XIA18:LCALL DELAY
51
华中科技大学 XXXXXXX
毕业论文
MOV P3,#14H ;片选秒十位 MOV A,41H ;取秒十位数据 JNZ XIA19 ;判消隐 MOV P0,#00H ;为0则消隐 LJMP XIA20
XIA19:MOVC A,@A+DPTR;取显示数型码 MOV P0,A
XIA20:LCALL DELAY MOV P3,#15H ;片选秒个位 JNB ZHUAN6,XIA21 JNB ZHUAN,XIA21 MOV P0,#00H
LJMP XIA22 ;闪烁跳过显示 XIA21:MOV A,40H ;取秒个位数据 MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA22:LCALL DELAY
MOV P3,#16H ;片选星期位 JNB ZHUAN7,XIA23 JNB ZHUAN,XIA23 MOV P0,#00H
LJMP XIA24 ;闪烁跳过显示 XIA23:MOV A,38H ;取星期位数据 MOVC A,@A+DPTR ;取显示数型码 MOV P0,A
XIA24:LCALL DELAY RET ;时钟写 WBYTE:
52
因篇幅问题不能全部显示,请点此查看更多更全内容