1、 单片机系统课 程 设 计目录1 概述51.1 研究背景51.2 设计思想及基本功能62 总体方案设计62.1 方案选取62.1.1显示模块选择方案和论证62.1.2时钟芯片的选择方案和论证72.2总体方案设计82.3 系统整体设计框图83 硬件电路设计83.1 电源电路设计83.2 晶振电路93.3 复位电路103.4 时钟电路103.4.1 DS1302芯片介绍103.4.2 DS1302 在本设计中的应用143.5 键盘电路143.6 显示电路153.7 整点报时电路184 系统软件设计194.1 主程序软件设计194.2 键盘子程序设计204.3 日历时钟子程序设计224.4 显示子程
2、序设计234.5 整点报时子程序的设计245 系统调试245.1软件调试255.2 硬件调试256 总结27参考资料:28附录一:系统原理图30附录二:元件清单30附录三:源程序代码311 概述1.1 研究背景在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰
3、箱、空调、彩电)等。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。而时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的
4、灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文设计的日历和时钟的显示广泛用于小型智能家
5、用电子产品,如电子钟。 利用单片机进行控制,实时时钟芯片DS1302进行记时,外加整点报时电路和显示电路,可实现时间的调整和显示。电子钟既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。1.2 设计思想及基本功能 本设计在实现一般的数字电子钟的要求前提下,结合单片机知识以及电路知识,本着使电路工作稳定,降低能耗,减少器件的使用,节约成本,现实使用价值高的原则而设计。本设计具体可以完美实现以下几个功能:(1)能准确实时显示年、月、日、时、分、秒、星期。(2)可以对时间随时进行手动校正。
6、(3)采用24小时制。(4)使用LED显示时间参数。 (5)上电后,电子钟显示“2013年12月31日23时59分59秒 星期2”。 (6)当年、月、日、时、分、秒高位为0时做消隐处理,只显示单个数字以增强其可读性。2 总体方案设计2.1 方案选取2.1.1显示模块选择方案和论证方案一:采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种
7、作为显示。方案三:LED数码管静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案四:LED数码管动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低
8、了能耗。本设计采用LED数码管动态扫描,由于LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少,所以本设计采用方案四。2.1.2时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于3
9、00nA.从时间计时的精度以及提高单片机工作效率角度考虑,本设计采用方案二。2.2总体方案设计 综上各方案的论证与选取,本设计的最终方案为:以单片机AT89C51为主控制器,时间数据通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。2.3 系统整体设计框图 结合以上方案选取,系统的整体设计框图方案如下: 图2-3 系统整体设计框图3 硬件电路设计3.1 电源电路设计单片机正常工作电压为5V,因此设计的电源电路主要是提供单片机工作电压。图3-1是为单片机提供电压的电源电路。在这个电路中采用了三端集成稳压器LM7805,可以输出5V的直流电压以供给单片机,
10、另外,用一个刀开关控制电源的断开与接通。 图3-1 电源电路图3.2 晶振电路 时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本设计采用内部时钟方式,因此只需外接晶振源,就能产生一定频率的时钟信号送到单片机的内部的各个单元。电路中的两个电容的作用有两个:一是帮助振荡器起振(C1 C2的值大,起振的速度慢;反之,速度快。);二是对振荡器的频率起到微调的作用(C1 C2的值大,频率略有减少,反之,频率略有提高
11、)。本设计选用12MHZ的晶振,C1、C2的值采用30pF。晶振电路如下图所示。 图3-2 单片机晶振电路图3.3 复位电路89C51单片机系统在刚通电后,必须复位。复位电路的主要功能是使单片机进行初始化,在初始化的过程中需要在复位引脚RST上加大于2个机器周期的高电平,使单片机处于复位状态。复位后的单片机地址初始化为0000H,然后继续从0000H单元开始执行程序。在复位电路中提供复位信号,等到系统电源稳定后,再撤销复位信号。但是为了在复位按键稳定的前提下,电源稳定后还要经一定的延时才撤销复位信号,以防在按键过程中引起的抖动而影响复位。当单片机运行出错或进入死循环时,可使单片机复位后重新运行
12、。图3-3所示的RC复位电路可以实现上述基本功能。 图3-3 复位电路图3.4 时钟电路3.4.1 DS1302芯片介绍 低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义。采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛
13、应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。 DS1302的性能特性如下:实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;用于高速数
14、据暂存的318位RAM;最少引脚的串行I/O;2.55.5V 电压工作范围;2.5V时耗电小于300nA;用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;简单的3线接口;可选的慢速充电(至VCC1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数
15、据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。DS1302数据操作原理:DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指
16、定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。图3-4-1 DS1302管脚图如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC =2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的管脚图如图3-4-1所示,表3-4-2为各引脚的功能。引脚号引脚名称功能1VCC2主电源2,3X1,X2振荡源,外接32768HZ晶振4G
17、ND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源表3-4-2 DS1302引脚功能表DS1302的控制字如图3-4-3所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。 图3-4-3 控制字节的含义 为了提高对32个地址的寻址能力(地址/命令位15逻辑1),可以把时钟/日历或RAM寄存器规定为
18、多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图3-4-4所示。SCLKKRSTI/O571357210246046R/CA2A3A0A1R/WA41DATAI/OBYTEDATAI/OBYTE图3-4-4数据读写程序DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数
19、据位为BCD码形式,其日历、时间寄存器及其控制字见表3-4-5,其中奇数为读操作,偶数为写操作。寄存器命令码数据范围寄存器中各位的内容名称地址写读76543210秒00H80H81H0059CH秒数据分01H82H83H00590分数据时02H84H85H0112或002312/24010/AP时数据日03H86H87H0128,2930,3100日数据月04H88H89H0112000月数据星期05H9AH8BH010700000星期数据年06H8CH8DH0099年数据多字节读写BEHBFH表3-4-5 片内时钟数据寄存器3.4.2 DS1302 在本设计中的应用 实时时钟芯片DS1302
20、采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超级电容(10万F以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100F就可以保证1小时的正常走时),本设计采用3V的锂电子电池。DS1302在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间。DS1302的时钟电路如图3-4-6所示。图3-4-6 DS1302时钟电路3.5 键盘电路 本设计用到四个独立式键盘分别接
21、到P1口的低4位,为保证P1口低4位在按键无按下时为高电平,特在P1口的低四位外接上拉电阻。键盘电路如图3-5所示。按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。因此本设计采用独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。 图3-5 键盘电路各按键对应的功能如
22、下: (1)K1键为功能移位键,依据按下的次数对应选中调节年、月、日、时、分、秒或者星期,具体在键盘子程序中详细介绍。 (2)K2键为数字“+“键,按一下则对应的数字加1。 (3)K3键为数字“-”键,按一下则对应的数字减1。 (4)K4键为总返回键。3.6 显示电路 显示电路中用到的元器件介绍:(1)数码管LED LED显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点就发光。控制相应的管导通,就能显示出对应字符。各段LED显示器需要由驱动电路驱动。在七段LED显示器中,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管连在一起的叫共阳极显示器,用低电
23、平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示有并行输出和串行输出两种方式。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能的输出口线,CPU把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU不在去访问它,因为各笔画段借口具有锁存功能,显示的内容也不会消失。数码管动态显示是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a、b、c、d、e、f、g、dp 的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码
24、,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。(2)译码器74LS13874HC138译码器是通过3条线来达到控制8
25、条线的状态,就是通过3条控制线A0、A1、A2不同的高低电平组合来控制Y0Y7的输出状态,其中4和5为使能地端,与8引脚共同接地,当接高电平时Y0到Y7输出高电平。6号脚为使能端,为高电平时有效。74HC138封装如图3-6-1所示。当需要级联时只需要改变使能端信号引脚即可,连接方法简单。 图3-6-1 74LS138封装图(3)8D锁存器7457374573与74373功能相似,都是8D锁存器,可驱动数码管。其功能如下:三态总线驱动输出置数全并行存取缓冲控制输入使能输入有改善抗扰度的滞后作用 原理:74LS573 的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)
26、输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。 这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。74573的引脚图如下: 图3-6-2 74573引脚图显示电路设计:本设计采用16个共阴极数码管,其中DS1-DS4显示年,DS5-DS6显示月,DS7-DS8显示日,DS9-DS10显示时,DS11-DS12显示分,DS13-DS14显示秒,DS15显示星期,DS16用于整点报时时的闪烁位。在显示
27、部分硬件电路设计中用两个74573分别驱动前8个数码管和后8个数码管,采用总线的连接方式,并在74573与LED之间加上限流电阻,阻值为100欧姆。两个74573的输入端均与P0口相连,即P0口为LED的段选端,用于向LED输入数型码,并接上拉电阻,阻值均为10K欧姆。P3口的低3位分别接两个74LS138译码器的A、B、C端,用P3.3、P3.4分别接两个译码器的使能端E3。两个译码器的16个输出端分别接16个数码管,用于LED的位选端。 图3-6-3 显示电路3.7 整点报时电路 整点报时电路由PNP型三极管8550、电阻与蜂鸣器构成,当P1.7输出低电平时,蜂鸣器就会发声,其设计电路如下
28、图所示。 图3-7 整点报时电路4 系统软件设计 软件的设计是设计控制系统的应用程序。其任务是在整体设计和硬件设计的基础上,确定程序结构,分配片内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序,再与硬件相结合完成相应功能。4.1 主程序软件设计流程图如图4-1所示,可以看到主程序采用模块化设计。从主程序流程图看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用显示子程序显示数据,最后又转到键盘程序来回循
29、环。初始化部分主要有初始化定时器部分和和一些寄存器、标志位、初始化时间等。(1)对定时器T0初始化时,首先置初值,CPU开中断,定时器T0开中断,并且开始计数,而对定时器T1初始化时,首先置初值,定时器T1关中断,并且停止计数,只有收到命令时才能产生中断。(2)寄存器的初始化主要是初始化执行程序时用到的部分RAM空间,防止程序执行时带来混乱。(3)标志位初始化是对时间调整时判断是调分还是调时,以及整点报时等而专设的位标志,初始化过程中标志位全部置0,即开始时是处于显示状态,而不是调整状态或者整点报时状态,这一点在程序中相当明了。(4)初始化时间是开机时显示的时间,并通过调用日历时钟的写程序来完
30、成时间的置初值。 图4-1 主程序流程图4.2 键盘子程序设计多功能键盘程序的设计是本设计的难点,也是完成本设计的重点,由于本设计为15位显示,所以对于日期与时间的调整,相应的程序会非常的冗长,但是键盘对年月日时分秒星期的调整思路、流程大体一样,所以在程序设计上并不是那么难。当有键按下时,调用10ms延时程序,再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序,这样避免了在按键松开之前能正常显示。其中K1键功能最多,通过判断K1键按下的次数来判断是调时间还是定时,并对对应的位置闪烁。本键盘深度为7级,即连续按下K1键8次时则返回到原来界面。当判断键值为1时则为调秒
31、状态,对应的秒低位闪烁,为2时为调分状态并分闪烁,为3时为调时状态并时闪烁,为4时为调日状态并日闪烁,为5时为调月状态并月闪烁,为6时为调年状态并年闪烁,为7时为调星期状态并星期闪烁。 K2为加1键,K3为减1键,K4为总返回键,即在调时见时不用只有按下K1键值为8才返回,而通过按下K4键即可返回。由于键盘流程图非常复杂,在此只表示秒,如图4-2所示,其余相仿省略。 图 4-2 键盘子程序流程图4.3 日历时钟子程序设计DS1302与CPU的连接,是通过SCLK、I/O、RST,即三线连接方式。日历时钟DS1302的读写需要初始化时序、读时序、写时序等。所有时序都是将主机作为主设备,单总线器件
32、作为从设备。而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送是低位在先。读写都是16位数据,高8位是地址,低8位是数据,在读写时要严格遵从读写时序,否则读写将会失效。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,这一点我们要一定注意。当RST置为高电平时,在串行时钟的SCLK的上升沿,DS1302从I/O端口读入一位数据,8个串行时钟脉冲就可以读入一字节的数据。在
33、串行时钟的下降沿,DS1302向I/O端口输出一位数据,8个串行时钟脉冲就可以输出一字节的数据。日历时钟的读写流程图如下图所示。 图1 时钟读 图2 时钟写 图4-3 日历时钟读与写流程图4.4 显示子程序设计本设计的显示部分具有消隐和闪烁功能,当时分秒等高位为0时显示消隐, 但低位不能显示消隐,因此对于读时间显得更加明了。闪烁功能也是本设计的一个难点,本设计采用8个位标志位,其中一个标志位通过用定时器0产生一个周期大约为每秒1.5次,使闪烁时效果达到最好。此时定时器采用定时中断的工作方式,这样可以充分利用CPU资源。另外7个标志位是年月日时分秒星期等的位标志位,当标志位置1时即开闪烁,与用中
34、断产生的标志位相结合,即在一个周期内为0时消隐,为1时开显示,这样可以使在调时间时对应的位闪烁。显示子程序流程图如下图所示。图4-4 显示子程序流程图4.5 整点报时子程序的设计 本设计设置了四个整点报时标志位,分别是秒个位为零、秒十位为零、分个位为零、分十位为零等标志位,只要当秒个位、秒十位、分个位、分十位为零,则分别使相应的零标志位置1。当四个标志位均为1时,则启动报时,在此仅用蜂鸣器蜂鸣10s代替。在整点报时状态下,数码管DS16显示数字8并闪烁。 整点报时子程序的流程图如下图所示。 图4-5 整点报时子程序流程图5 系统调试 单片机系统经过总体设计,完成了硬件和软件设计开发。通过软件和
35、硬件相结合系统即可运行。但编制好的程序或连接好的线路不能按预计的那样正常工作是常见的事,经常会出现一些硬件、软件上的错误,这是软件和硬件开发者经常遇见的,这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。本设计系统的已经在PC机上用模拟开发软件进行了检测和调试,并运行成功,最后进行实物的硬件连接与调试。5.1软件调试本设计是在Proteus软件和Wava6000软件相结合调试的,完全用仿真软件在PC机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,以确定程序运行有无错误。
36、目标程序纠错:该阶段工作通常在目标程序编辑时就完成。一般来说,仿真软件能为用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。整体程序调试:即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。经过多次修改程序最后调试成功,实现了预期的功能要求,其proteus仿真图如图5-1所示。 图5-1 Proteus仿真5.2 硬件调试单片机应用系统的硬件调试与软件调试是分不开的,许多硬件故障在软件调试
37、时才能发现,但通常要先排除系统中明显的硬件故障。关于调试工作,大体上可以分为四步:步骤一:线路检查。根据硬件电路原理图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。步骤二:电源调试。样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。调试的方法有两种:一种是断开样机稳压电源的输出端,检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载能力(用假负载)。确保电源无故障并性能符合设计要求。步骤三:通电检查。在确保电源良好前提下,接通电源。最好在电源与其余电路之间串接一个电流表。若接通后电流很大
38、,必须立即切断电源。电源大得超出正常范围,说明电路中有短路或故障。通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。步骤四:检查芯片的逻辑关系是否出错。加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。通过以上四步的硬件调试,最终调试成功,其硬件实物图如图5-2所示。 图5-2 硬件调试实物图6 总结 不知不觉,为期两周的单片机课程设计已经结束,在这次设计过程中收获真的很多。首先要谈一下对这次设计全过程的一个认识和感受:硬件系统关系到所要
39、设计的电子产品好怀,如系统抗干扰性等,所以要合理的安排尽量减少干扰提高性能。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。同时还可以采用隔离等方式减少干扰,硬件系统设计的好坏很大部分来源于经验,所以要有动手的好习惯。软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU利用资源,具有执行效率高等优点,本设计用到定时器中断以减少对CPU的占用,更好的处理其他功能。软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。 在软硬件的设计过程中,通
40、过查找各方面的相关资料,学到了很多的知识,比如学会了DS1302时钟芯片的应用,学会了74573、74138等这些芯片在电路中所起的作用,尤其是熟悉并掌握了protel、proteus和keil等软件,深刻的意识到它们在单片机开发系统中所起的作用。本次设计最大的感受就是在进行项目设计中,一定要保持严谨的头脑,总揽全局,面面俱到,每一个细节都应该深知熟虑,做到万无一失,只有这样才能完美的设计出一个具有实用的产品。自己感觉本设计就在万年历、时间牌等方面,具有现实实用价值。当然还有很多纰漏瑕疵,相信在以后的学习生涯中,一定会逐步改善和完善相关功能,所以还需要继续努力。 然而,本次课程设计离不开臧老师
41、及时认真的指导,在此特别向臧老师表示衷心的感谢。在硬件设计与软件设计中也离不开很多同学的帮助,在此向周峰和张栋栋同学,以及给予我帮助的所有同学说一声:谢谢! 我相信,在今后的学习道路中,只要勤于思考,勇于探索,敢于创新,一定会取得更大的进步。参考资料:1 杨家成单片机原理与应用及C51程序设计北京:清华大学出版社,20072 夏路易,石宗义Protel 99se电路原理图与电路板设计教程北京:北京希望电子出版社,20043 邓兴成单片机原理与实践指导北京:机械工业出版社,20104 阎石.数字电子技术基础.北京:高等教育出版社,2009.5 张迎新单片微型计算机原理、应用及接口技术北京:国防工
42、业出版社,20076 李丽荣,张常全,郑建红.51单片机应用设计.北京:北京理工大学出版社,2007.附录一:系统原理图附录二:元件清单序号元件名称规格型号数量1单片机AT89C511个2晶振12MHz1个32.768KHz1个3电容30pF瓷片电容2个22uF电解电容2个其他不同型号的瓷片电容4个4电阻10千欧姆9个1千欧姆5个100欧姆18个5数码管DPY-7-SEG-DP16个6驱动器74HC5732个7译码器74lS1382个8时钟芯片DS13021个9蜂鸣器1个10三极管PNP85501个11按键四爪微型轻触开关5个12三端稳压集成器LM78051个附录三:源程序代码ZHUAN BI
43、T 50H ;闪烁标志位辅助标志位ZHUAN1 BIT 51H ;年开闪烁的标志位ZHUAN2 BIT 52H ;月开闪烁的标志位ZHUAN3 BIT 53H ;日开闪烁的标志位ZHUAN4 BIT 54H ;时开闪烁的标志位ZHUAN5 BIT 55H ;分开闪烁的标志位ZHUAN6 BIT 56H ;秒开闪烁的标志位ZHUAN7 BIT 57H ;星期开闪烁的标志位BUZZER1 BIT 58H ;秒个位为零标志位BUZZER2 BIT 59H ;秒十位为零标志位BUZZER3 BIT 5AH ;分个位为零标志位BUZZER4 BIT 5BH ;分十位为零标志位ORG 0000HLJMP
44、START ;开始并初始化ORG 000BH ;定时/计数T0中断LJMP ZDUAN ORG 001BH ;定时/计数T1中断LJMP ZDUAN2ZDUAN:MOV TH0,#00H ;使ZHUAN由正到负周期大约为1.5即当开闪烁时 每秒大约闪烁1.5次环境MOV TL0,#00HDJNZ R7,ZDUAN1 ;循环指令CPL ZHUAN ;闪烁标志位求反MOV R7,#3ZDUAN1:RETI ;中断返回ZDUAN2:MOV TH1,#0FCHMOV TL1,#43HCPL P3.0RETIORG 0100HSTART:MOV SP,#70H ;设堆栈MOV TMOD,#11H ;T0,TI工作方式1MOV TH0,#00HMOV TL0,#00HMOV TH1,#0FCHMOV TL1,#43HSETB EA