资源描述
江 西 理 工 大 学 南 昌 校 区毕 业 设 计(论文)题 目:基于单片机定时闹钟系统设计系 别:信息工程系专 业:电气自动化技术班 级:09自动化2班学 生:贺明波学 号:09321229指导教师:刘秋平 职称:助教摘要随着科技的快速发展和生活水平的不断提高,人们对时钟的精确度和实用性要求越来越高。本文采用AT89S52单片机,通过DS1302日历芯片进行定时,并通过LCD1602液晶进行显示。通过C语言程序编写,将设计出更准确定时、更省电的数字时钟。单片机数字时钟具有设置时间、日期、星期的基本功能,并且能够显示年、月、日、时、分、秒、星期。单片机数字钟不管在性能还是在样式上都发生了质的变化,实践证明单片机数字时钟具有更加准确性、精密性等功能。关键字:数字时钟;DS1302;LCD1602;AT89S52AbstractIn daily life, time is science, technology and everyday life is one of the most basic physics, we often deal with temporal clocks, such as hand watch, wall clock, even on a computer program, the clock on the phone can be generalized a clock display on the clock, along with the rapid development of technology and the continuous improvement of living standards, people on the clocks accuracy and practical demand is higher and higher. Based on the single chip microcomputer principle, USES the monolithic integrated circuit AT89S52 series, through the hardware circuit and software production procedure formulation, will design a more accurate timing, electricity -saving digital clock, SCM in performance or digital clock no matter in style have undergone a qualitative change, digital clock has proved microcontroller more accuracy, precision sex etc. Function. Key Words:Digital clock ; DS1302; LCD1602;目录第一章 引言11.1单片机的发展史11.2 单片机的应用11.3 单片机发展趋势 21.4 数字时钟方案论证比较31.4.1 数字电路与单片机性能比较31.4.2数码管与LCD液晶显示性能比较41.4.3单片机编程时钟与时钟芯片性能比较4第二章 系统的硬件设计与实现62.1 系统概述62.2模块电路的设计72.2.1时钟电路72.2.3 复位电路与晶振电路112.3 总体电路图设计11第三章 系统的软件设计与实现133.1 程序功能133.2 编程思路133.3 程序设计流程图133.3.1 DS1302软件设计流程图143.3.2 LCD1602程序序流程图153.4写入显示数据到LCD子程序模块设计173.5时间闹铃设置流程18第四章 仿真软件Proteus ISIS使用方法简单介绍194.1 简介194.2 简单项目设计过程204.3仿真执行244.3.1一般仿真24第五章 系统组装与调试265.1 硬件系统的组装与调试265.2 软件调试27总结29参考文献30附录1单片机定时闹钟程序源代码31致谢41 第一章 引言1.1单片机的发展史单片机是在一块硅片上集成了各种部件的微型计算机。随着大规模集成电路技术的发展,可以将中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)定时器计数器以及输入/输出(I/O)接口电路等主要计算机部件,集成在一块电路芯片上。虽然单片机只是一个芯片,但从组成和功能上,都已具有了微机系统的含义。由于单片机能独立执行内部程序,所以又称它为微型控制器(Microcontroller)。单片机自从问世以来,性能在不断的提高和完善,它不仅能够满足很多应用场合的需要,而且具有集成度高、功能强、速度快、体积小使用方便、性能可靠、价格低廉等特点。因此,在工业控制、智能仪器仪表、数据采集和处理、通信、智能接口、商业营销等领域得到广泛的应用,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视,所以更扩大了单片机的应用范围,也进一步促进了单片机技术的发展,单片机的发展史大致可分为三个阶段。第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有8位CPU,并行I/O端口、8位时序同步计数器,寻址范围4KB,但是没有串行口。第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O串行端口,有多级中断处理系统,15位时序同步技术器,RAM、ROM容量加大,寻址范围可达64KB。第三阶段(1982-至今):8位单片机微处理改良型及16位单片机微处理阶段。1.2 单片机的应用由于单片机具有显著的优点,它已成为科技领域的有力工具,人类生活的得力助手。它的应用遍及各个领域,主要表现在以下几个方面:(1) 单片机在智能仪表中的应用单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。(2) 单片机在机电一体化中的应用机电一体化是机械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。(3) 单片机在实时控制中的应用单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。(4) 单片机在分布式多机系统中的应用在比较复杂的系统中,常采用分布式多机系统。多机系统一般由若干台功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可以置于恶劣环境的前端工作。(5) 单片机在人类生活中的应用自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使人类生活更加方便、舒适、丰富多彩。1.3 单片机发展趋势目前,单片机正朝着高性能和多品种方向发展,其发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势:(1) CMOS化近年,由于CHMOS技术的进小,大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)、CHMOS工艺以及CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已大于TTL电路。因而,在单片机领域,CMOS电路正在逐渐取代TTL电路。(2) 低功耗化单片机的功耗已从mA级,甚至1uA以下;使用电压在36V之间,完全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。(3) 低电压化几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在36V范围内工作。低电压供电的单片机电源下限已可达12V。目前0.8V供电的单片机已经问世。(4) 低噪声与高可靠性为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。 1.4 数字时钟方案论证比较1.4.1 数字电路与单片机性能比较数字时钟系统可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计与制作中采用AT89S52单片机,它是低功耗、高性能的CMOS型8位单片机,内带有8KB的Flash程序存储器,且允许在系统内改写或用编程器编程。另外,AT89S52的指令系统和引脚与8051完全兼容,片内有256B的RAM、32条IO口线、2个16位定时计数器、5个中断源、一个全双工串行口等,具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,由此可见使用单片机作为数字时钟的核心器件将更加具有快捷、高效的性能。1.4.2数码管与LCD液晶显示性能比较单片机应用系统最常用的显示器LED(发光二极管显示器)和LCD(液晶显示屏),这两种显示器器件都可显示数字、字符及系统的状态,他们的驱动电路简单、易于实现且价格低廉,因此得到广泛应用。同时由于数码管只能显示数字数码管显示内容单一,液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,没有电磁辐射、寿命长等优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用,而这个毕业设计中,要求功能较多,为了使电路显示的更清晰明了,在该设计当中我们决定采用LCD1602液晶作为我们单片机数字时钟的显示设备。1.4.3单片机编程时钟与时钟芯片性能比较在单片机系统的应用过程中,经常需要一个时钟电路定时、测控之用;数字时钟的实现方法有很多种,最简单的就是利用单片机中都集成的定时器,通过软件编程来构成一个时钟来使用,但是基于这种方法,由于定时器工作在中断方式,它会频繁地中断CPU的工作。每次开机都要重新设置标准时间,使用不方便而且还占用单片机的定时器资源,单片机直接编程做时钟电路虽然节省成本,但功能却有许不足,而且单片机工作不是很稳定,容易出现死机、跑错等等,电路一复位就又要从新调整时间,显然这在实际情况中是很麻烦的,与社会的主流发展智能化,不相符合。但是美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302,它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰 年补偿等多种功能。采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能,因此我们在这里将会采用采用DS1302作为我们单片机数字时钟的时钟芯片。 第二章 系统的硬件设计与实现2.1 系统概述本系统是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压环境中工作;时钟电路由内部时钟电路外接晶振提供,它是一种高性能、低功耗、带RAM的可随时调整时钟电路,工作电压为3V5V;所以采用DS1302作为本设计的日历芯片;显示部份使用LCD1602B液晶模块进行数字显示,1602B液晶模块可以显示2行16个字符,有8位数据总线D0D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,系统主要由晶振电路、复位电路、时钟电路部分、中央处理单元、晶显示部分组成,单片机数字时钟的设计流程如图2-1所示。电路总体框图设计 单片机AT89S52LCD1602DS1302时钟芯片复位电路按键电路晶振蜂鸣器电源2-1 电路总体框架图2.2模块电路的设计2.2.1时钟电路时钟电路为整个单片机系统产生时间基准,是单片机系统必须的部分;本系统采用美国DALLAS公司推出的DS1302实时时钟芯片,工作电压为2.5V-5.5V,采用三线接口与CPU进行同步通信,并可采用突发式一次传送多个字节的时钟信号或RAM数据,该芯片是采用串行方式的实时时钟芯片,串行方式的实时时钟芯片大多数是将地址线、数据线、控制线合为一根串行传输数据的传号线,这种方式的有点是信号线少、电路连接简单、节省系统资源和电路板的面积,缺点是程序编写复杂、工作量比较大,且操作速度较慢,接下来我们来分析一下DS1302的性能与原理。DS1302的性能: 、 计算2100年之前的秒、分、时、日、星期、月和年,能进行闰年调整; B、31字节数据RAM;C、引脚与TTL兼容;D、工作电流小于300nA,有备份电源和涓流充电能力; DS1302引脚定义:I/O:数据输入/输出引脚 SCLK:串行时钟输入引脚 RST复位引脚GND:接地引脚 Vcc1、Vcc2:工作电源、备份电源引脚 X1、X2:晶振接入管脚。晶振频率为32.768KHz。 DS1302的操作: 命令字格式如图2-2-1所示:图2-2-1 命令字格式D7位:固定为1 R/C位:为0时选择操作时钟,为1时选择操作RAM A4A3A2A1A0:操作地址 R/W位:为0时进行写操作,为1时进行读操作 单字节操作如图2-2-1-1所示:图2-2-1-1 写操作 图2-2-1-2读操作多字节操作(突发模式) :每次写入或读出8个字节时钟日历数据或31个字节RAM数据。与单字节时相似,仅需将A0A4换成“11111” 。DS1302的寄存器:DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字,表(2-2-1)为日历寄存器功能表。表(2-2-1) 日历时钟寄存器功能表DS1302与单片机的接口: 图2-2-1-3 DS1302与单片机的接口图2.2.2液晶LCD1602显示电路1602B液晶模块可以显示2行16个字符,有8位数据总线D0D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,液晶LCD1602引脚情况如下表(2-2-2)所示;液晶LCD1602最小系统图如2-2-1-2所示。(2-2-2)LCD1602引脚功能表 2-2-2-1液晶LCD1602最小系统图 图2-2-1-2液晶LCD1602最小系统图 2.2.3 复位电路与晶振电路复位电路是单片机系统必须的,用来为单片机提供正确的复位信号;振荡电路就为单片机工作提供了所需要的时钟脉冲信号,使单片机的开始正常工作;如图所示 18脚和19接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出;第9引脚为复位输入端,接上电容,电阻及开关后能够形成上电复位电路。 图2-2-3复位电路与晶振电路2.3 总体电路图设计下图为总体电路设计图,如图2-3所示。图2-3 总体电路图第三章 系统的软件设计与实现3.1 程序功能 数字时钟程序主要完成以下的功能:1、该数字钟能够准确显示年、月、日、时、分、秒、星期;2、可以进行闹钟的设置;3、能够实现设置时间、日期、星期;3.2 编程思路采用主从两个单片机系统,从系统对各个参数,然后以串行通信传送到上位机,然后进入下一轮检测。当主系统需要显示这些参数时,允许接受数据,然后进行处理显示。在主系统当中,初始化之后,读DS1301内部时间数据并显示,然后进行按键判断,对按键请求进行处理,结束之后,程序回到读DS1302时间数据处形成循环。共12个按键,低电平有效,按键选择要调整的年,月,日,星期,小时,分钟,闹钟;状态0:model=0,字钟正常时钟显示状态。状态1:model=1,进入时,分,秒的调整。状态2:model=2,进入年,月,日,星期的调整。状态3:model=3,进入闹钟的设置。3.3 程序设计流程图系统主程序首先对系统进行初始化,包括设置液晶LCD1602、都是DS1302和端口的初始化,程序主要包括3个方面的内容,一是利用日历芯片完成时钟的时间控制,在这里我们使用了功能丰富的日历芯片DS1302;二是利用按键和开关触发外中断,改变时钟的运行模式;三是单片机控制的液晶显示模块显示时间和相关功能的计数值,主程序流程图、时间调整流程图如下,主程序如同3.3所示。开始LCD1602DS130初始化显示时间进入模式选择状态年、月、日期的设置时、分、秒的设置闹铃的设置退出图3.3主程序流程图 3.3.1 DS1302软件设计流程图 DS1302初始化从DS1302中读出数据,让入RAMLCD模块显示时间扫描按键时间设置调用显示屏子程序开始数据写回DS1302保存 返回主显单图3-3-1 DS1302软件设计流程图数字时钟需要调整年,月,日,星期,小时,分钟,闹钟等的设置,所以软件程序设计如图3-3-1-1所示。 图3-3-1-1 时间调整程序流程图3.3.2 LCD1602程序序流程图 1602基本操作时序:写操作时序: 图3-3-2写操作时序时序时间表:表(3-3-2)时序时间表LCD1602主程序流程图: A 、 主程序主要完成硬件初始化、子程序调用等功能,主程序设计流程图如图3-3-2-1所示:初始化堆栈指针调用LCD初始化子程序调用字符显示子程序显示第二行字符调用字符显示子程序显示第一行字符开始 图3-3-2-1 LCD主程序流程图3.4写入显示数据到LCD子程序模块设计:当LCD1602的寄存器选择信号RS为1时,选择数据寄存器;当LCD1602的读写选择线R/W为0时,进行写操作;当LCD1602的使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入显示数据。写入RS0时,选择指令寄存器读/写标志位R/W0时,进行写操作LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入指令代码,LCD执行命令调用延时子程序DELAY子程序返回把指令数据送至P0口(LCD数据线DB7DB0)开始显示数据到LCD子程序设计流程图如图3-4所示。 图3-4 LCD子程序模块设计3.5时间闹铃设置流程 本设计中计时采用定时器T1中断完成,秒表使用定时器T0中断完成。主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。其主程序执行流程如图3.7所示。YNNY开始初始化调用相关显示子程序蜂鸣器鸣叫进入功能程序键按下?整点到? 图3-5 时钟闹铃设计流程图 第四章 仿真软件Proteus ISIS使用方法简单介绍4.1 简介Proteus软件是一款强大的单片机仿真软件,对于单片机学习和开发帮助极大。Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和数字集成电路,包括单片机。在单片机课程中我们主要利用它实现下列功能:绘制硬件原理图,并设置元件参数。仿真单片机及其程序以及外部接口电路,验证设计的可行性与合理性,为实际的硬件实验做好准备。如有必要可以利用它来设计电路板。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,可以实现从构想到实际项目完成全部功能。界面介绍:双击桌面上的ISIS 7 Professional图标或者单击屏幕左下方的“开始”“程序”“Proteus 7 Professional” “ISIS 7 Professional”,出现如图4-1所示屏幕,表明进入Proteus ISIS集成环境。进入之后的界面类似如图:4-1Proteus ISIS集成环境图4-1-2 ISIS主窗口4.2 简单项目设计过程建立新项目:启动软件之后,首先,新建一个项目。点击菜单:FileNew Design,如图4-2-1所示,即可出现如图4-2-2所示的对话框,以选择设计模板。一般选择A4图纸即可,点击OK,关闭对话框,完成设计图纸的模板选择,出现一个空白的设计空间。 图4-2-1 新设计 图4-2-2选模板这时设计名称为 UNTITLED (未命名),你可以点击菜单 filesave design 来给设计命名。也可以在设计的过程中任何时候命名。调入元件:在新设计窗口中,点击对象选择器上方的按钮P(如图4-2-3所示),即可进入元件拾取对话框,如图4-2-4所示。图4-2-3调入元件图4-2-4 查找元件要其他元件,还可以再次调入。设计原理图放置元件:在对象选择器中的元件列表中,单击所用元件,再在设计窗口单击,出现所用元件的轮廓,并随鼠标移动,找到合适位置,单击,元件被放到当前位置。至此,一个元件放置好了。继续放置要用的其他元件。移动元件:如果要移动元件的位置,可以先右击元件,元件颜色变红,表示被选中,然后拖动到需要的位置放下即可。放下后仍然是红色,还可以继续拖动,直到位置合适,在空白在图4-2-4所示的对话框左上角,有一个Keywords输入框,可以在此输入要用的元件名称(或名称的一部分),右边出现符合输入名称的元件列表。我们要用的单片机是AT89C52,输入AT89C,就出现一些元件,选中AT89C52,双击,就可以将它调入设计窗口的元件选择器。在Keywords中重新输入要用到的元件,比如LED,双击需要用的具体元件,比如LED-YELLOW,调入。继续输入,调入,直到够用。点击OK,关闭对话框。以后如果需处单击鼠标左键,取消选中。移动多个元件:如果几个元件要一起移动,可以先把它们都选中,然后移动。选中多个元件的方法是,在空白处开始,点击左键并拖动,出现一个矩形框,让矩形框包含需要选中的元件再放开,就可以了(参看图14)。如果选择的不合适,可以在空白处单击,取消选中,然后重新选择。图4-2-5选中多个元件移动元件的目的主要是为了便于连线,当然也要考虑美观。连线:就是把元件的引脚按照需要用导线连接起来。方法是,在开始连线的元件引脚处点击左键(光标接近引脚端点附近会出现红色小方框,这时就可以了),移动光标到另一个元件引脚的端点,单击即可。移动过程中会有一根线跟随光标延长,直到单击才停住(图4-2-6)。(a 画线开始) (b 划线中) (c 画线完毕)图4-2-6 画线过程在第一根线画完后,第二根线可以自动复制前一根线,在一个新的起点双击即可。如图4-2-7所示。 a 新的起点双击 b 很快画完 图4-2-7 自动复制前一根线注意:如果第二根线形状与第一根不同,那可不能自动复制,否则会很麻烦。修改元件参数:电阻电容等元件的参数可以根据需要修改。比如限流电阻的阻值应该在200到500欧姆左右,上拉电阻应该在几千欧姆。以修改限流电阻排为例,先单击或右击该元件以选中,然后再单击,出现对话框如图图4-2-8所示。在 Component Value:后面的输入框中输入阻值200(单位欧姆),然后点击OK按钮确认并关闭对话框,阻值设置完毕。图4-2-8 修改电阻值添加电源和地线:在左边工具栏点击终端图标,即可出现可用的终端,图17-a 所示。在对象选择器中的对象列表中,单击POWER,图17-b所示,在预览窗口出现电源符号,在需要放置电源的地方单击,即可放置电源符号,如图17-c所示。放置之后,就可以连线了。放置接地符号(地线)的方法与放置电源类似,在对象选择列表中单击 GROUND ,然后在需要接地符号的地方单击,就可以了。注意:放置电源和地之后,如果又需要放置元件,应该先点击左边工具栏元件图标,就会在对象列表中出现我们从元件库中调出来的元件。a选择端口 b选择电源符号 c放置电源符号图4-2-9 添加电源和地添加程序:单片机应用系统的原理图设计完成之后,还要设计和添加程序,否则无法仿真运行。实际的单片机也是这样。在原理图中点击单片机以选中,再次点击打开元件编辑对话框,如图4-2-10 所示。图4-2-10 编辑单片机添加机器码程序在图中看到: 在Program File:后边的方框里显示P1P2.HEX,说明机器码已经装入。如果没有装入,这里将是空白。这时可以点击其右边的打开文件图标,查找并选中机器码文件即可。这样,就可以在仿真时执行程序。4.3仿真执行Program软件可以仿真模拟电路和数字电路,还可以仿真若干型号的单片机。我们使用的目的主要就是仿真单片机和外围的接口电路。这里简要介绍MCS-52单片机和部分接口电路的仿真过程,其他方面的内容请自行查找资料。4.3.1一般仿真在原理图编辑窗口下面有一排按钮,利用它可以控制仿真的过程。点击按钮开始仿真,开始以后按钮的小三角变成绿色,点击按钮单步仿真,点击按钮暂停和继续仿真切换,点击按钮停止仿真。如图定时效果图:图4-3-1 单片机定时闹钟实现效果图 第五章 系统组装与调试 系统组装与调试分为硬件的组装调试和软件的调试,硬件的组装与调试侧重于原理设计的正确性验证和印刷电路板的工艺性错误的检测;软件的调试则侧重于子模块的功能验证和模块与模块的接口配合。5.1 硬件系统的组装与调试硬件组装前首先要仔细核对硬件系统设计原理的正确性,包括参数选用的正确性和原理的正确性,对没有把握的电路可以通过在通用实验板上直接焊接实际电路来进行实物调试和验证,调试分为断电调试和通电调试。(1)断电调试 为了安全起见,首先必须进行断电调试,断电调试的内容至少包含短路检测和原理正确性确认;系统电路焊接完成后,首先对实物进行原理正确性的确认,其次必须进行短路检测,选用合适的万用表欧姆档,用红表笔接到电路板的+5V电源的+、 极,如果存在充放电现象,最后电阻稳定在一个合适的位置,则基本上可排除系统短路现象。(2)通电调试 A、系统时钟是否起凡是微处理器系统,正常运行的必要条件是系统时钟稳定正常,在实际工作中,因为各种原因导致系统时钟不正常而出现系统无法正常运行的情况也时有出现,因此系统时钟是否起震应是通电检查的首要一环,检查方法包括逻辑笔发、数字万用表法、示波器法,在这里采用数字万用表法,测试晶振两端引脚电压为2.5V左右。B、复位是否正常及关键点电压参数是否正常复位不正常也会导致系统不工作,这里的重点是检查相关电路是否正常,同时检查相应电路的关键电压参数是否正常,进行一一排查。5.2 软件调试单片机的程序设计调试分为两种,一种是使用软件模拟调试,即用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往比单片机慢)。为了解决软件调试问题,第二种方法是硬件调试,硬件调试其实也需要计算机软件的配合。软件调试与所选用的软件结构有关,如果采用模块程序设计技术,则逐个模块调好后再进行系统程序总调,如果采用实时多任务操作系统,一般是逐个任务进行调试,对于模块结构程序要一个个子程序分别调试,调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、 RAM的内容和IO口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,同时,还可以发现用者系统中存在的 硬件设计错误和软件算法错误,各程序模块通过后,则可以把相关功能块连在一起进行总调。本设计采用Keil软件对源程序进行编译和调试,Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻,Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。在Proteus中打开数字时钟统完整电路图,双击AT89S52,在Program File:选项中浏览选择由Keil软件编译生成的hex文件,确认保存即可进行仿真。系统的仿真结果如图5-2所示。从仿真结果看,系统满足设计要求。 图5-2系统仿真图总结本论文基于MCS-51单片机而开发的数字时钟,从总体的理论构思到具体的软硬件的设计,元件的采购,PCB板的制作,整体的焊装,系统的调试,最终实现了数字时钟的基本功能,即在单片机的作用下,实现了数字时钟的正常运行,从这个设计中,我们看到了单片机如何在实际生活当中的应用,它的发展是人类科技的进步,科技改变生活,从设计中,我们还可以发现单片机在控制系统中无限的潜力,只要我们改变控制器中的程序,可以控制不同的设备,体现了集成芯片的共享性,可节约大量的的硬件资源。当然,该系统还存在不完善之处,它只是显现了一些基本功能,其开发潜力还很大,不如温度测试、计时、记费等功能,这有待以后继续开发通过此次多功能数字钟设计制作,我们将从书本上学到的知识应用于实践,加强了自身的实践动手能力,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高,不管做什么事,计划是很重要的。没有一个完好的计划,做事情就会没有一个好的顺序,做事情会比较乱,很难成功。而有一个好的计划,不管做什么事都会事半功倍,做事心中有数,明确重点和缓急,不会有疏漏。这样才能提高成功率;其次我们做事情要注意细节,细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。因此我们不仅仅要有整体意识,也要注意细节,不要因一个关键地方的一个细节而导致满盘皆输;当最终调试成功的时候也是对自己的一种肯定。此次的毕业设计不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。 参考文献1沈红卫.基于单片机的智能系统的设计与实现M.北京:电子工业出版社,2005.12江志红.51单片机技术与应用系统开发案例精选M.北京:清华大学出版社,2008.123赵建领,薛园园.零基础学单片机C语言程序设计M. 北京:机械工业出版社,2009. 44戴佳,苗龙,陈斌.51单片机应用系统开发典型实例M.北京:中国电力出版社,2005.75冯建华,赵亮.单片机应用系统设计与产品开发M.北京:人民邮电出版社,2004.116赵建领.Protel电路设计与制版宝典M.北京:电子工业出版社,2007.17李育贤.微机接口技术及应用M.西安:西安电子科技大学出版社,2007.68李全利.单片机原理及接口技术M.北京:高等教育出版社,2009.19余孟尝.数字电子技术基础简明教程M. 北京:高等教育出版社,2006.110 李朝青.单片机学习原理及接口技术M 第3版,北京: 北京航空航天大学出版社, 200511 王法能. 单片机原理及应用M. 科学出版社,200412 陈 宁. 单片机技术应用基础M. 南京:南京信息职业技术学院, 200513 刘 勇. 数字电路 M. 电子工业出版社, 200514 杨子文. 单片机原理及应用M. 西安电子科技大学出版社200615孙育才等. ATMEL 新型AT89S52系列单片机及其应用 M.北京清华大学出版社, 200516岂兴明,唐杰等 .51单片机编程基础与开发实例详解M. 人民邮电出版社,200817 李群芳等. 单片微型计算机机与接口技术M.北京: 电子工业出版社, 200118 张毅刚. 新编MCS-51单片机应用设计M. 哈尔滨: 哈尔滨工业大学出版社, 200319 朱定华,等. 单片微机原理与应用M. 北京: 北京清华大学出版社, 北京: 北京交通大学出版,200附录1 单片机定时闹钟程序源代码#include /头文件#include#define uchar unsigned char/宏定义#define uint unsigned int/宏定义#define fmq RDsbit key1=P20; /位声明 /MODIFIEDsbit key2=P21;sbit key3=P22;sbit key4=P23;uchar code table=0x3f,0x06,0x5b,/数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xbf,0x86,0xdb,/带小数点的数值0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;void plus(); /函数声明void minus();void sint();uchar table_16; /定义数组,数组内含有6个数值uchar table_26;uchar shi=1,fen=1,miao=30; /显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;/定义全局变量uchar flag,flag1,flag2,cnt,cnt1,count;/定义全局变量void delay(uchar i) /延时函数,用于动态扫描数码管 uchar x,y; for(x=i;x0;x-) for(y=110;y0;y-);void init() /初始化函数 TMOD=0X21; /工作方式1 TH0=(65536-50000)/256; /定时时间为:50ms TL0=(65536-50000)%256; ET0=1; /打开定时器 EA=1; /开总中断 TR0=1; /启动定时器 SCON = 0x50; /0101 0000 SM1SM2=10,方式二 REN=1允许接受 (串口初始化) TH1 = 0xFD; TR1 = 1; /启动T/C1 ES = 1; void display() /显示子函数,用于显示时间数值 uchar i,j; table_10=miao%10; /分离秒的各位与十位 table_11=miao/10; table_12=fen%10+11; /分离分的各位与十位 table_13=fen/10; table_14=shi%10+11; /分离时的各位与十位 table_15=shi/10; j=0x7f; /从秒到时的扫描 for(i=2;i6;i+) P2=j; P0=tabletable_1i;/显示数值 delay(10); j=_cror_(j,1);/循环右移 void display_1() /显示子函数,用于显示定时时间 uchar i,j; table_20=miao2%10; /以下含义同上 table_21=miao2/10; table_22=fen2%10+11; table_23=fen2/10; table_24=shi2%10+11; table_25=shi2/10; j=0x7f; for(i=2;i=20) /判断是否到一秒 flag=0; /到了,则标志位清零 miao+; /秒加1 if(miao=60) /判断秒是否到60s miao=0;/到了,则清零 fen+; /分加1 if(fen=60) /以下含义同上/MODIFIED fen=0; shi+; if(shi23) shi=0; void key_scan() /键盘扫描子函数 uchar i; /定义局部变量 if(key1=0)/判断key1是否按下 while(!key1) /防止掉显 if(cnt=0) display(); if(cnt=3|cnt=4) display_1(); if(cnt=1&(cnt1=0|cnt1=2) display_1();if(cnt=2&(cnt1=0|cnt1=2) display();cnt=0; if(cnt1=1&(cnt=1|cnt=2) display(); cnt+; /记下按键key1按下的次数 cnt=cnt%5; if(cnt=1&cnt1=1) /以下含义同上 fen1=fen; fen=99; for(i=0;i100;i+) display(); fen=fen1; if(cnt=2&cnt1=1) shi1=shi; shi=99; for(i=0;i100;i+) display(); shi=shi1; if(cnt=3&cnt1=1) fen1=fen2; fen2=88; for(i=0;i100;i+) display_1(); fen2=fen1; if(cnt=4&cnt1=1) shi1=shi2; shi2=88; for(i=0;i100;i+) display_1(); shi2=shi1; if(key2=0) while(!key2) /防止掉显 if(cnt=0) display(); if(cnt=3|cnt=4) display_1(); if(cnt=1&(cnt1=0|cnt1=2) display_1();if(cnt=2&(cnt1=0|cnt1=2) display();cnt=0; if(cnt1=1&(cnt=1|cnt=2) display(); cnt1+; cnt1=cnt1%3; if(cnt!=0&cnt1=1) /第一次按下,停止计数 TR0=0; if(cn
展开阅读全文