• 874.09 KB
  • 2022-04-22 11:24:36 发布

基于单片机的多路定时控制系统设计

  • 90页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'基于单片机的多路定时控制系统设计摘要本文主要介绍了一种基于单片机的多路定时控制系统。该系统由单片机、电源电路、复位电路、时钟电路、键盘输入电路、显示电路、提示电路和控制电路组成。其中单片机采用STC89C52,处理来自键盘的输入信号,确保各部分电路正常工作;电源电路采用7805芯片构成5V电源,为控制系统提供稳定的电源;复位电路采用上电按钮复位电路,在上电时自动复位程序和程序出错时手动复位程序,保证控制系统的稳定运行;时钟电路采用DS1302时钟芯片,为单片机提供准确的外部时钟;键盘输入电路采用3×3矩阵键盘,用户可通过键盘进行时间校准、动作时间设定、动作支路选择、动作次第与动作性质设置、时间显示;显示电路采用LCD1602液晶显示,可显示当前时间(基准时间)与动作时间;提示电路采用74HC595驱动一位共阳极数码管和NPN三极管驱动蜂鸣器构成,数码管确保动作路径选择和动作次第设置正确,蜂鸣器确定按键是否为有效按键;控制电路采用ULN2803八路反相驱动器,动作时间到时驱动对应的电器。该系统功能灵活多样,可连续设置8个动作时间,每个动作时间可设置1到8条动作支路的动作性质为开或关,具有连续多次定时,多路同时动作的特点,可以广泛应用于电子电器中。关键词:单片机;连续多次定时;多路同时动作90 AbstractThispapermainlyintroducesakindofmulti-pathtimingcontrolsystembasedonsinglechipmicrocomputerSTC89C52.Thesystemisconsistedofsinglechip,powercircuit,resetcircuit,clockcircuit,keyboardinputcircuit,displaycircuit,cuecircuitandcontrolcircuit.ThemicrocontrollerSTC89C52,processingsignalfromthekeyboard,toensurethateachpartofthecircuitworknormally;Thepowercircuituses7805whichsuppliesstable5Vpowerforcontrolsystem;Theresetcircuitadoptsthepoweronbuttonresetcircuit,automaticresetwhenelectricityprogramandproceduremanualresetwhenerror,ensuringthestableoperationofthecontrolsystem;TheclockcircuitusesDS1302whichsuppliesexactclockformicrocontroler;Thekeyboardinputcircuitadopts3by3matrixkeyboard,bywhichtheuserscancorrecttime,setactiontime,selectactionbranch,settheactiontimeandactionpropertyanddisplaytime;ThedisplaycircuitadoptsLCD1602,displayingthecurrenttime(benchmark)andmovementtime;Thecuecircuituses74HC595todriveacommonanodedigitaltubeandNPNdrivebuzzer,digitaltubetoensurethattheactioncorrectly,buzzertodeterminethekeyeffective;ThecontrolcircuitusesULN2803whichareeight-wayreversedriver,tomaketheactionbranchactexactly.Thesystemhasabundantfunction,whichcanseteightconsecutiveactiontimewhichcancansettheactiongpropertyof1to8actionbuanchtoonoroff.itcansettimecontinuously,makemanybranchesactatthesametimeandbewidelyusedinelectronicappliances.Keywords:SingleChipMicrocomputer;Settimecontinuously;Manybranchesactatthesametime90 1绪论1.1设计背景和意义近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异地更新。定时、延时装置在工业控制中被广泛的应用。它可以实现信号的异步传送,根据控制要求设置接收到和做出相关反应的时间差。被广泛的用于仪表、通信、办公自动化、军工领域及各种控制柜、控制台,使用极为广阔。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,根据具体硬件结构及具体应用对象的特点,与软件相结合,加以完善。单片机之所以在工业控制中有大量的应用,就在于它有独特的定时、计数功能。在工业检测、控制中,许多场合都要用到计数或定时功能。例如,对外部脉冲进行计数、产生精确的定时时间等。人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。1.2国内外研究现状“定时器”总的来说有两种类型。一种是基于模拟技术的传统产品,这种定时器功能简单,尽管曾被广泛应用过,但已进入淘汰之列。另一种是基于数字技术的新一代产品,这种产品功能强,是前者的换代之物。随着单片机性能价格比的不断提高,新一代产品的应用越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能,小则可以用于家电控制,甚至能够用来做儿童电子玩具。它功能强大,体积小,重量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品[3]。定时器按结构可分为机械式、电动式和电子式3类。机械式定时器:以发条为原动力,用擒纵调速器控制走时精度,通过齿轮传动和凸轮,按时间控制机构预置的时段操纵执行机构动作。计时精度要求不高的定时器(如风扇定时器、洗衣机定时器、厨房用定时器、照相暗房用定时器、电视机控制用定时器、电灯开关定时器),一般采用无固有振动周期的调速器。这些定时器都是在手动上发条90 的同时预置时限,定时精度不高,但结构简单,使用方便。计时精度要求高、定时范围在3~12小时的定时器,一般采用摆轮游丝调速器。电动式定时器:用交流同步电动机或石英步进电机驱动,通过齿轮传动和凸轮簧片触点机构,按预置的时段或时刻控制执行机构。其中短时段控制的电动式定时器可用于程序控制式洗衣机、洗碗机、微波炉、烘箱及时间继电器等;长时段电动式定时器是一种24小时或7天程序控制的开关装置,可预置开关动作多次,最短时间控制间隔一般为15分钟,可用于用户用电情况监控、照明控制、实验室装置控制、空调器控制和自动生产线上某些设备的定时控制等。电子式定时器:利用石英振荡器或民用交流电的标准频率,经过分频计数组成时间累加器或数字钟,按照预置的时间编码输出控制信号。这种定时器走时精确,时间设定没有误差,定时精度高,控制程序多。其中长时段定时器最小控制时段一般为1分钟,配上微处理器后能精确地编制一年的时间程序,组成多路可编程序的定时器。电子式定时器在工业自动化控制系统中应用广泛,它也是节约能源管理中一种有效的技术措施。电子定时器类的电子定时开关钟,可用于按高、平、低峰用电收取不同电费制度的场合,它将一天内的用电高峰、平峰、低谷时间在定时开关中设定,并分别接通3种电表进行计费。电子式定时器在科学实验中和在微波炉、电饭锅、洗衣机等电器中也有使用。1.3设计内容1.3.1多路定时控制系统简介本控制系统可实现时间校准、动作时间设定、动作支路选择、动作次第与动作性质设定和查询动作时间等功能。控制系统的设定过程为:时间校准(LCD显示的时间不是基准时间时进行);动作时间设定(时间校准后完成后进行)→动作支路选择(动作时间设定完成后进行)→动作次第与动作性质设定(动作支路选择完成后进行);(这三个步骤可循环设置,设置完一次表示设置好一次动作,可连续设置8次动作)等待动作支路动作(设置完动作进行);动作时间时动作支路动作。在所有模式中,每次按下键盘上的按键时,蜂鸣器会发出鸣叫声,用以确认某按键是否有效按下;在动作支路选择模式,数码管会显示相应的数字,已确保你选的支路是你准备选的;在动作次第与动作性质设定模式中,数码管会显示相应的数字,确保你进行正确的次第数设置,防止你清除90 前一次所设定的动作时间。本定时器可以应用于不同场所的电器,它可以减少在多种电器上设置定时时所带来得麻烦,这种具有人们所需要的智能化特性的产品减轻了人的劳动或代替人的劳动过程,操作简便,一定会受到人们的广泛欢迎。1.3.2系统设计方案单片机键盘输入电路复位电路时钟电路提示电路控制电路显示电路备用电源电源电路图1.1系统原理方框图该方案是以STC89C52单片机为核心,对STC89C52芯片进行编程来实现核心功能。用7805构成的电源模块给系统提供稳定的电源,确保单片机稳定工作;复位电路采用上电按钮复位,在上电瞬间自动复位与程序跑飞时手动复位;用时钟芯片DS1302进行计时,为单片机提供准确的外部时钟;通过矩阵键盘不同按键输入发出不同信号,经单片机处理,处理后实现时间校准、动作时间设定、动作路径选择、动作次第与动作性质设定、查询动作时间功能;用LCD1602显示器显示基准时间和动作时间;用一位共阳极数码管显示提示信息和蜂鸣器确定按键是否为有效按键;控制电路由单片机通过ULN2803反相驱动器来控制小型继电器吸合来实现对家用电器的控制(本次毕业设计只用发光二极管代替继电器来模拟实现)。数码管与STC89C52的接口用74HC595驱动芯片来连接,采用一般的连接方法就可以。系统原理方框图如图1.1所示。按从左到右,从上到下,对系统中各部分功能介绍如下:(1)电源电路:采用7805芯片构成电源电路,给控制系统提供稳定的电源。90 (2)复位电路:采用上电按钮复位电路,在上电瞬间自动复位与程序跑飞时手动复位。(3)提示电路:使用74HC595芯片,扩展I/O口,驱动数码管显示相关的提示信息,确保设置的准确性;使用一个PNP三极管驱动蜂鸣器发声,检测按键是否为有效按键。(4)备用电源:使用3V两节干电池,在主电源关断的情况下,给时钟芯片提供电源,维持时钟芯片走时。(5)时钟电路:采用DS1302芯片,产生秒、分、时、星期、日、月、年等时标,给单片机提供准确的外部时钟。(6)控制电路:采用ULN2803构成控制电路,接收来自单片机的信息,动作时间时,使正确的动作支路产生正确的动作。(7)键盘输入电路:采用3×3矩阵键盘,通过键盘设置,通过单片机编译,实现时间校准、动作时间设定、动作路径选定和动作次第与动作性质设置、查询动作时间功能。(8)显示电路:采用LCD1602芯片,用于显示当前时间,动作时间。1.3.3系统设计要求设计一个基于单片机的多路定时控制系统。要求控制系统可以实现时间校准、动作时间设定、动作路径选择、动作次第与动作性质设定和显示时间等功能。独立完成系统的分析、设计和程序编写,记录开发过程中的问题及解决方法,要有计算过程和原理图,以及独立的稳定电源。设计主要指标:(1)时间校准模式中,可校准的时标为年、月、日、星期、时、分、秒。(2)动作时间设定模式中,可设定的时标为时、分、秒,可设置1-8个动作时间。(3)动作路径选择模式中,可选定的路径数范围为1-8,设定过程中有相应的提示,确保设置正确。(4)动作次第与动作性质设定模式中,设定过程中有相应提示,确保设置正确。(5)可连续设置1-8次动作,每次动作之间相互独立,互不影响。90 2方案论证2.1系统方案论证方案1:用8051或8031进行控制其系统设计主要包括四部分:单片机、键盘及显示接口电路、控制电路、时钟电路。应用单片机体积小,使得实际应用简单实用,成本低,效益好。方案2:选用STC89C52进行控制单片机采用STC89C52,它内置看门狗和STC810复位电路,加强了系统的稳定和可靠性;具有4个8为I/O口,含3个高电流P1口,可直接驱动LED;兼容TTL和CMOS逻辑电平;具有掉电检测和低功耗模式等,非常适于电池供电或其他要求低功耗的场合。论证:方案1应用了单片机,控制灵活方便,能够实现很多不同的功能。但本课题整个程序比较庞大,需要完成所有的控制功能,需外加EPROM和外部RAM,这样会使电路复杂。综上所述,选择方案2作为本次毕业设计的实现方案。它简化了电路,提高可靠性和灵活性。2.2电源电路的选择方案1:由USB线构成电源电路如图2.2(a)图所示所示,在电源的正负极之间并联一个470uF的大电容(稳压)和一个1K电阻串联一个发光二级管(作为电源指示灯),电路结构简单,但必须插在USB接口上才可以使用。接好线路后,需按一下自锁开关,才可给控制系统供电。方案2:由7805外接电源线构成电源电路如图2.2(b)图所示,需要一个LN4007型二极管、一个470uF电容和一个220uF电容,无指示灯(但控制系统中的LCD背光通电后就亮,可以作为电源指示灯使用)。电源线插头插在插座上,就可以给控制系统供电。90 综上所述,采用方案2,可以节省元件和时间。(a)(b)图2.1电源电路2.3复位电路的选择方案1:采用上电复位电路上电复位在上电瞬间是利用电容的充放电来实现复位,只能在上电瞬间实现复位。方案2:采用看门狗芯片进行复位采用X25045芯片构成复位电路,该芯片把看门狗定时,电压监控和EEPROM结合在一起的新型可编程芯片。该芯片不仅可以实现硬件抗干扰,还可以在掉电后保存数据。方案3:采用按钮电平复位电路按钮电平复位是上电复位和手动复位相结合的方案,可以在上电瞬间自动复位和程序跑飞时手动复位。综上所述,方案1实现复位的局限性太大,方案2不能充分利用X25045芯片的掉电后保护数据功能,还需要编写程序,比较复杂,所以采用按钮电平复位电路。2.4时钟电路的选择方案1:软件实现方案1采用STC89C52内部定时/计数器T0和T1共同来完成。T0工作在定时状态,为最高级中断。每隔125μs中断一次,将P3.0取反,这样在P3.0上将得到一个周期为90 250μs的高精度时钟脉冲,该脉冲接至T1外部时钟输入端,由T1进行减计数,4000次之后减至0,产生中断。这样定时器T1以很高精度每秒产生一次中断且不占用主程序任何资源。这种方法实际上等于将两个16位长的硬件定时/计数器T0和T1做成了一个32位长的定时/计数器,用于完成以上的定时。在T1中断服务程序里对时间进行修正,在调用定时控制程序之后返回。方案2:采用时钟芯片MC146818实现方案2采用时钟芯片MC146818来实现,MC146818时钟芯片是美国MOTOROLA公司为计算机系统研制的日历时钟芯片器件。它的功能很强,接口和编程方便,性能价格比较高。它的主要特点是有完备的日时钟、闹钟及百年日历功能,可编程的周期性中断及方波发生器输出,50字节低功耗带掉电保护的用户RAM,该芯片是可以带后备电池的低功耗高速CMOS器件。方案3:采用时钟芯片DS1302实现方案3采用时钟芯片DS1302来实现,产生秒、分、时、星期、日、月及年等七个时标,程序能够通过读写获得和修改这些时标。DS1302是美国DALLAS公司推出的一款实时时钟芯片。其采用三线串行接口,芯片内部集成了可编程日历时钟和31B的静态RAM。DS1302的日历时钟可自动进行闰年补偿。DS1302芯片自身还具有对备份电池进行涓流充电功能,可有效延长备份电池的使用寿命。实时时钟芯片DS1302以其计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到了广泛的应用。方案1采用软件编程实现,定时不够准确,而且占用单片机的定时资源,首先排除。选择采用硬件时钟,方案2和方案3相比,方案3更好:因为时钟芯片DS1302占用单片机的引脚数更少,只需3个;时钟芯片MC146818需要占用8个,浪费了单片机引脚。所以采用方案3。2.5键盘电路的选择方案1:采用独立按键采用9个独立按键,按键检测程序比较简单,可以简化程序,按键个数少时,可以这样使用,数目太多,占用I/O口太多,浪费硬件资源。方案2:采用矩阵键盘采用3×3矩阵键盘,节约I/O口,但按键扫描程序比较复杂。90 由于本系统实现的功能较多,所需按键多,同时急需I/O口,所以选择方案2。2.6显示电路的选择方案1:选择8位数码管显示采用8位共阳极数码管显示,容易理解,但所需I/O口较多(8个位选,8个段选,总共16个I/O口),不能同时显示年、月、日、星期、时、分、秒及提示信息。添加一个寄存器可以减少占用8个I/O口,但增加了硬件电路的复杂度。方案2:选择LCD1602显示能够同时显示年、月、日、星期、时、分、秒信息,还可以显示一些提示信息,如“Time”、“Week”、“Alarm”等,除此之外其背光,可做电源指示灯使用。需占用11个I/O口。综上,选择方案2。2.7提示电路的选择方案1:采用38译码器驱动8个发光二极管构成提示电路译码器选择74LS373,8个发光二极管接成共阴极。容易理解,但使用元件太多(8个发光二极管),提示不直观,需占用3个I/O口。方案2:采用驱动芯片驱动数码管与PNP三极管驱动蜂鸣器构成提示电路驱动芯片选择74HC595,数码管选择共阳极数码管提供数字提示,蜂鸣器提供声音提示。软件编程较复杂,但提示信息显示直观、全面。综上,选择方案2。2.8控制电路的选择方案1:大功率晶体三极管方案1中的大功率三极管,虽可实现驱动功能,但很容易受外界的干扰,且不容易控制。方案2:用驱动器ULN280390 方案2控制部分采用STC89C52与ULN2803反相驱动器连接驱动小型继电器吸合来实现对家用电器的控制。ULN2803有集成度高,性能可靠,静态功耗电流低,抗干扰能力强等优点。所以采用第二种方案(发光二极管代替继电器来模拟实现)。90 3系统硬件电路的设计3.1电源电路的设计3.1.17805芯片介绍图3.17805实物7805为3端正稳压电路,TO-220封装,能提供固定的5V输出电压,应用范围广,内含过流、过热和过载保护电路。带散热片时,输出电流可达1A。虽然是固定稳压电路,但使用外接元件,可获得不同的电压和电流。7805的引脚如图3.1所示,图中3个引脚按从左到右的顺序依次为1脚、2脚和3脚。1脚为输入脚,2脚为接地,3脚为输出脚。1脚的输入电压需高于3脚的输出电压2V以上。图3.2电源电路3.1.2电源电路电源电路如图3.1所示,输入端接12V直流电源(由适配器提供,适配器输入为220V,输出为9到12V即可),+5V输出端接单片机和其他芯片的电源引脚,接地端接单片机和其他芯片的接地引脚。二极管D1的作用是焊接实物时,防止dj90 口正负极反接(不同dj口正负的定义是不一样的),烧坏8075。电容C4的作用是滤波,电容C5的作用是改善稳定性和瞬态响应,要求C4和C5都大于100uF,且C4必须比C3.2复位电路的设计图3.3按钮电平复位电路如图3.3所示,按钮电平复位是上电复位和手动复位相结合的方案。上电复位是利用电容的充放电来实现的,上电瞬间,引脚RST端的电位与Vcc相同,RC电路充电,随着充电电流的减少,RST端的电位逐渐下降。只要VCC的上升时间不超过1ms,振荡器的建立时间不超过10ms,该时间就足以保证完成复位操作。上电复位所需的最短时间是振荡周期建立加上24个时间周期,在这个时间内,RST端的电平就维持高于施密特触发器的下限值。在手动复位时,按下复位电钮RESET,电容对R1迅速放电,RST端变为高电平,RESET松开后,电容通过R2进行充电,使RST端变为低电平。3.3时钟电路的设计3.3.1DS1302芯片介绍DS1302的引脚排列如图3.4所示,其中Vcc2为后备电源,VCC1为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者90 图3.4DS1302引脚图供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。3.3.2时钟电路图3.5时钟电路时钟电路非常简单,如图3.5所示,使用STC89C52(仿真图中采用AT89C51单片机代替STC89C52单片机)的P1口的P1.2-P1.4引脚分别连接到DS1302的RST、SCLK和I/O引脚上用于数据交换,DS1302的X1和X2外接一个32.768KHZ的晶体,VCC290 外接5V单片机系统电源供电,VCC1则外接供电电池,如果单片机掉电之后VCC1上的电池能保护DS1302的数据不丢失。DS1302与STC89C52进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位WriteProtect(BIT7)必须为逻辑1,如果BIT7=0,则禁止写DS1302,即写保护;BIT6=0,指定时钟数据,BIT6=1,指定RAM数据;BIT5~BIT1指定输入或输出的特定寄存器;最低位LSB(BIT0)为逻辑0,指定写操作(输入),BIT0=1,指定读操作(输出)。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。3.4键盘输入电路的设计3.4.1行列扫描键盘介绍行列扫描键盘把独立的按键跨接在行扫描线和列扫描线之间,这样M×N个按键就只需要M根行线和N根列线,大大的减少了I/O引脚的占用,这样的行列扫描键盘被称为M×N行列键盘。行列扫描键盘可以使用按键扫描程序判断是否有按键按下,该方法的好处是硬件电路比较简单,但缺点是程序复杂,响应慢;也可以用中断辅助判断是否有按键按下,此方法的好处是响应快,当有按键被按下时,很快就能得到单片机的响应,但是需要更多的硬件,并且占用一个中断。3.4.2键盘输入电路键盘输入电路如图3.6所示,这是一个3×3的共计9个按键的行列扫描键盘,3根行线分别接接单片机P3口的P3.0、P3.1和P3.2,3根列线分别接单片机P3口的P3.3、P3.4和P3.5,9个独立按键跨接在行线和列线上。本毕设是通过按键扫描程序来检测键值的,将在软件部分介绍其原理。每个按键都有特定的功能,按键扫描程序特别重要,程序的其他功能都要通过按键实现。90 图3.6键盘输入电路按键从左到右,从上到下编号为0到8,8个按键相互组合实现了时间校准、动作时间设定、路径选择、动作次第与动作性质设置、动作时间显示等功能,现逐个按键阐述其功能。按键0:进入时间校准模式。按键1:进入动作时间设定模式。按键2:(1)在时间校准模式中,按年→月→日→星期→时→分→秒的顺序向右移位,点一次,移位一次;(2)在动作时间设定模式中,按时→分→秒的顺序向右移位,点一次,移位一次。(3)在路径选择模式中,进行路径的确认,数码管显示数字几,按下键2就表示路径几被选择。(4)在动作次第与动作性质设置模式中,设置该次第动作性质为开,数码管显示几,按下键2就表示第几次动作为开,开对应LED灯亮。按键3:(1)在时间校准模式中,使年、月、日、星期、时、分、秒时间参量的加1,点一次,对应的量加1一次。(2)在动作时间设定模式中,使时、分、秒时间参量加1,点一次,对应的量加1一次。90 (3)在路径选择模式中,使数码管显示的数字加1,点一次加1一次。(4)在动作次第与动作性质设置模式中,是数码管显示数字加1,点一次加1一次。按键4:与按键3的功能相反,实现减1功能,这儿不再赘述。按键5:(1)退出时间校准模式,只有当时间最后一位秒也校准完成后,点按键5才能退出时间校准模式。(2)退出动作时间设定模式,只有当动作时间的最后一位秒也设定完成后,点按键5才能退出动作时间校准模式。(3)退出路径选择模式,当你完成所有本次动作所涉及的路径后就可以点键5退出路径选择模式。(4)退出动作次第与动作性质设定模式,当设置完成动作次第和动作性质后就可以点键5退出动作次第与动作性质设定模式。按键6:进入路径选择模式。按键7:进入动作次第与动作性质设定模式。按键8:在动作次第与动作性质设定模式中,设置该次第动作性质为关,数码管显示几,按下键8就表示第几次动作为关,关对应LED灯灭。3.5显示电路设计3.5.1LCD1602介绍图3.7LCD1602引脚封装LCD1602的引脚如图3.7所示,其引脚功能分别为:VSS:电源地(GND)。VCC:电源电压(5V)。V0:LCD驱动电压,液晶显示器对比度调整端。使用时可以通过一个10K的电位器调整对比度,接正电源时对比度最弱,接地电源时对比度最高。RS:寄存器选择输入端,选择模块内部寄存器类型信号。RS=0,进行写模块操作时指向指令寄存90 器,进行读模块操作时指向地址计数器。RS=1,无论进行读操作还是写操作均指向数据寄存器。图3.8显示电路R/W:读写控制输入端,选择读/写模块操作信号。R/W=0,读操作;R/W=1,写操作。本设计中只需往LCD里写数据即可,写时序见图3-4。E:使能信号输入端。读操作时,高电平有效;写操作时,下降沿有效DB0~DB7:数据输入/输出口,单片机与模块之间的数据传送通道。选择4位方式通讯时,不使用DB0~DB3。BLA:背光的正端+5V。BLK:背光的负端0V。3.5.2显示电路显示电路图3.8所示,模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制图3.8显示电路90 端与MPU接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线接受MPU发来的数据和指令,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。控制器还可以根据MPU的指令,实现字符的显示,闪烁和移位等显示效果。3.6提示电路设计3.6.174HC595介绍图3.974HC595引脚图74HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SHcp的上升沿输入,在STcp的上升沿进入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位(MR非),存储寄存器有一个并行8位的数据输出,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。74HC595的引脚图如图3.9所示,现按引脚顺序说明如下:Q0-Q7:存储寄存器的8位并行数据输出,可以直接控制8个LED,或者是七段数码管的8个引脚。GND:接地端。Q7′:级联输出端,与下一个74HC595的DS相连,实现多个芯片之间的级联。MR:重置(RESET),低电平时将移位寄存器中的数据清零,应用时通常将它直接连高电平(VCC)。SH_CP:移位寄存器的时钟输入。上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变。90 ST_CP:存储寄存器的时钟输入。上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中的数据保持不变。应用时通常将ST_CP置为低点平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。OE:输出允许,高电平时禁止输出(高阻态)。引脚不紧张的情况下可以用STC89C52的一个引脚来控制它,这样可以很方便地产生闪烁和熄灭的效果。实际应用时可以将它直接连低电平(GND)。DS:移位寄存器的串行数据输入,接STC89C52的某个数字I/O引脚。VCC:单元端,通常接+5V电压。3.6.2提示电路图3.10提示电路提示电路如图3.10所示,提示电路由驱动芯片驱动一位共阳极数码管构成。其中,移位寄存器的时钟SH_CP和存储器的时钟ST_CP并联在一起接在接在单片机的P1.090 口上,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器的串行输入接在单片机的P1.1口上,用于接收来自单片机的数据。复位端MR接高电平,防止移位寄存器中的数据清0,输出允许端OE因单片机引脚紧缺,所以接地,允许输出。存储寄存器的输出Q0-Q6接共阳数码管的a-g段,用以显示相关的提示数字(提示数字为:0-7)。共阳极数码管的公共端由单片机的P3.6口通过一个NPN三极管控制,在需要显示提示数字的时候,P3.6置0,三极管导通,在数码管的公共端产生高电平,使能数码管;在不需要显示提示数字是,P3.6置1,三极管截止,数码管的公共端为低电平,不使能数码管。蜂鸣器由一个PNP三极管驱动,当P3.0置0时,蜂鸣器发声;置1时,蜂鸣器不发生。用于提示按下的某个按键是否被检测,成为有效按键。3.7控制电路的设计3.7.1ULN2803芯片介绍图3.11ULN2803引脚图ULN2803是八路NPN达林管连接晶体管阵系列,特别适用于低逻辑电平数字电路(诸如TTL,CMOS或PMOS/NMOS)和较高的电流/电压要求之间的接口,广泛应用于计算机,工业用和消费类产品中的灯、继电器、打印锤或其它类似负载中。所有器件具有集电极开路输出和续流箱位二极管,用于抑制跃变。ULN2803的设计与标准TTL系列兼容,而ULN2804最适于6至15伏高电平CMOS或PMOS。其引脚图如图3.11所示,引脚说明如下:1-8引脚:输入端11-18引脚:输出端9引脚:地端10引脚:电源端3.7.2控制电路控制电路如图3.12所示,ULN2803的输入端引脚1-9接单片机的P2.0-P2.7口,90 图3.12控制电路ULN2803的公共端接5V电源,输出引脚11-18分别经限流电阻接LED灯灯7-灯0(灯从上到下编号为0-7,对应电器支路0-7),LED灯采用共阴极接法。实物中没有采取ULN2803芯片,LED采用共阳极接法;实际生活中,LED灯应该接继电器。当P2.0-P2.7中的某一端口输出为0时,对应的LED会亮(模拟电器支路从断到通);输出为1时,对应的LED灯从亮到灭(模拟电器支路从通到断)。90 4系统软件的设计4.1系统主程序如图4.1所示,画出了系统的主程序流程图,从图中可以看出程序的执行过程主要包括程序初始化、时间校准模式、动作时间设定模式、动作路径选择模式、动作次第与动作性质设定模式。程序初始化程序可以独立完成,后面的4个模式都要键盘输入电路的配合才能完成,可见按键检测的重要性。在后面的内容中,先介绍按键检测子程序然后再分别介绍程序初始化、时间校准子程序、动作时间设定子程序、动作路径选择子程序、动作次第与动作性质设定子程序,每个子程序会举例说明,必要时会给流程图。4.2按键检测子程序本次毕设中,由于按键设置的模式较多,需要个数达到9个,为了节约I/O口,选择使用3×3矩阵键盘,矩阵键盘有查询式和中断式两种,本次毕设采用查询式,采用按行查询。在判断键盘中有无按键按下时,先判断是那根行线的状态为低电平,其他线为高电平。在确认某行线为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与低电平的行线交叉处的按键就是闭合的按键。现给出部分按键检测程序,以便说明。ucharScanKey()//键盘扫描{uchartemp,temp1,key;temp=P3;//读取P3端口状态temp&=0x87;//判断行线状态switch(temp){case0x86://行线的P3.0为低电平{P3=0xB8;delay(100);//延时片刻,以利于状态的获取90 否进入路径选择模式进入动作次第与动作性质设定模式进入动作时间设定模式等待动作支路动作否是是否是程序初始化,进入时间校准时间校准是否完成?动作时间设定是否完成?开始动作次第与动作性质设定是否完成?是否连续进行了8次动作设置?是否需要进行下一次动作设定?路径选择是否完成?否否否是是是图4.1系统总体执行流程图90 temp1=P3;//读取P3端口状态temp1&=P3;//判断列线状态switch(temp1){case0xB0://列线的P3.4为低电平,表示”0“键被按下key=0;/键值为0break;//跳出列线判断状态case0xA8://列线的P3.5为低电平,表示”1“键被按下key=1;//键值为1break;//跳出列线判断状态case0x98://列线的P3.6为低电平,表示”2“键被按下key=2;//键值为2break;//跳出列线判断状态default://列线没有发生状态变化break;}P3=0x87;break;}return(key);}程序中只给出了按键0、按键1和按键2的检测程序,先检测行线,给P3口赋初值0x87,当按键按下后P3口状态变为0x86,说明行线的P3.0为低电平。后检测列线,给P3口赋初值0xB8,当按键按下后P3口状态变为0xB0,说明列线的P3.4为低电平,此时检测按键0被按下;当按键按下后P3口状态变为0xA8,检测按键1被按下;当按键被按下后P3口状态变为0x98,检测按键2被按下。4.3系统初始化系统初始化包括中断初始化、DS1302初始化和LCD1602初始化。中断初始化,设90 开始定时中断0初始化LCD1602初始化DS1302初始化初始化结束图4.2程序初始化流程图置了定时器0的工作方式、定时初值、开放总中断和启动定时器0。DS1302初始化将时、分、秒、年、月、日、星期的值赋值为0。LCD初始化设置了显示格式、清除了LCD显示内容。初始化流程图如图4.2所示。4.2时间校准子程序时间校准就是检查LCD1602显示的时间是否准确,如果时间不准确,将影响后面的设置。时间校准校准的是基准时间(通常以当前时间为基准时间),可以消除DS1302长时间走时所产生的累计误差。按键0进入时间校准,按键3使校准时标加1,按键4使校准时标减1,校准完一个时标后,按键2右移到下一个时标进行校准,当所有时标都校准完成后,按键5退出时间校准模式。校准顺序:年→月→日→星期→时→分→秒,现以校准年的过程为例说明如何校准时间,其流程图如图4.3所示。4.3动作时间设定子程序动作时间设定模式中,可以设置动作时间。设置过程与时间校准相同,只是设置时标只有时、分、秒,设置顺序为时→分→秒。设置时,按键1进入动作时间模式,按键90 LCD显示年是否大于准确年?LCD显示年等于准确年?LCD显示年小于准确年?按键3,使显示年加1按键4,使显示年减1否是否是是LCD显示年等于准确年?否否是按键0,进入时间校准模式按键2,右移到校准月图4.3校准年流程图键3使设置的时标加1,按键4使设置的时标减1,设置完一个时标按键2向右移位,当最后一个时标都设置好了之后,按键5退出动作时间设定模式。例如设置动作时间为12:50:10。(1)按键1进入动作时间设定模式,LCD显示第二行显示Alarm:00:00:00,且小时在闪烁。(2)多次按键3,使显示的小时为12后,按键2右移到时标分。(3)多次按键4,使显示的分为50后,按键2右移到时标秒。(4)多次按键3,使显示的秒为10后,按键5退出动作时间设定模式。90 4.4动作路径选择子程序动作路径选择是紧接动作时间设定后的操作,就是当你设定的动作时间到后,哪几条电器支路动作,可以选择1-8条动作路径。在这个模式中,数码管显示的数字十分重要,显示数字范围为0-7,对应支路0-7,数码管的数字是通过按键3(按一下数码管数字加1)和按键4(按一下使数码管数字减1)来改变的。按键2的作用是选中支路,如数码管显示0时,按下按键2就代表选中了支路2。当你选中支路2后,可以继续改变数码管的数字,接着选中其他的路径,也可以按键5退出路径选择。注意在此模式中,按下的键要求有效,即按下某个键蜂鸣器发声,才能保证设置无误。例如,选中支路2和支路3的操作步骤如下:(1)按键6,进入动作路径选择模式,此时数码管显示为0,对应支路0.(2)多次按键3,使数码管显示为2,按键2,选中支路2.(3)按键3,是数码管显示为3,按键2,选中支路3,两条支路选择完成后,按键5退出动作路径选择模式。4.5动作次第与动作性质设定子程序此程序是紧接动作路径选择之后的程序,也是最后需要按键设置的程序,设置动作次第就是用一个多维数组,存放动作时间设定模式中设定好的动作时间,人为的给其确定一个次第,这个次第的取值范围是0-7,建议逐次设置,这样不容易出错;动作性质设置,就是给在动作路径选择模式中选择的路径一个信号,让它们在动作时间到的时候产生动作开或者动作关。动作开对应实物上的灯亮,动作关对应实物上的灯灭。动作性质是通过一系列算法产生的。例如,设置路径2和路径3动作次第为0、动作性质为开,设置步骤如下:(1)按键7,进入动作次第与动作性质设定模式,此时数码管显示0,对应次第0,在该模式中,数码管显示几表示对应的次第是几,不再对应支路。数码管显示的数字可以通过按键3和按键4改变。(2)按键2,设定动作性质为开。(按键8,设定动作性质为关)设定完成,按键5退出动作次第与动作性质设定模式。90 5系统的安装调试5.1仿真与编程软件简介5.1.1仿真软件简介仿真软件采用ProteusISSI软件,ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。②支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。5.1.2编程软件简介编程软件采用KeiC51软件,KeilC51是德国Keil公司推出的单片机开发软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVisionIDE集成开发环境(包括工程管理器、源程序编辑器、程序调试器)、C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及Monitor-51、RTX51实时操作系统。90 5.2系统安装调试5.2.1硬件调试硬件调试步骤如下:1.对照电路图,检测所有的线路是否有漏焊,焊错的地方。检查结果:单片机上的EA管脚未接电源;DS1302的主电源引脚为VCC2,接成了VCC1。2.用万用表检查是否有虚焊的地方。检查结果:LCD1602有条数据线虚焊;按键也存在虚焊。5.2.2软件调试软件编译不成功,主要有以下方面的问题:1.定义变量过多,超出范围;2.使用了未声明的变量和函数;3.定义了函数但为使用;4.变量名和函数名写错;5.在语句的结尾漏写结束符号“;”。5.2.3软硬结合调试硬件和软件调试之后,进行软硬结合调试。1.针对LED编写一段小程序,程序功能是通电后8个LED灯全亮,实物显示时有的灯时亮时灭,原因是单片机没插牢。插牢之后,所有的灯正常显示。2.在确定LED焊接良好的基础上,编写小程序检测按键程序是否好使,程序功能是按下键几灯几亮,结果按键不好使,所有按键都试了,按键检测无效。检查程序知,是P3口赋初值不正确,修改初值后按键好使。3.在确定按键好使的基础上,针对蜂鸣器编写一段小程序,功能是按下一个按键,蜂鸣器发声一次,结果蜂鸣器一直发声,原因是蜂鸣器的驱动三极管焊错,把PNP型三极管,当成了NPN型三极管。90 4.针对数码管编写一段程序,功能是通电后数码管显示8,结果是数码管显示8但亮度弱,原因是数码管为共阴数码管,换数码管,改相关程序后亮度够。5.将软件调试中编译成功的程序,烧录进单片机进行最后的调试。在调试过程中,主要遇到以下问题:(1)在时间校准过程中出现按下键3,时标不加1的现象,查找原因是因为按键检测程序有问题,解决方法:在按键检测函数后添加一个Yes函数,作用是确认有按键按下,按键检测只能检测出按下键的键值,然后在每个涉及按键语句的前面都加上一条“K=Yes()”语句。(2)在动作时间设定过程中,出现进入动作时间设定模式难的问题,原因是条件复杂,需要按下按键1和显示“:”时,才能进入。解决方法:改变进入条件,使按键1按下就可以进入动作时间设定模式。(3)在路径选择过程中,出现按一次键3,数码管显示数字加2的现象。解决方法:延长按键检测程序中的去抖时间。(4)在动作次第与动作时间设定过程中,设置完成后,动作不准确。如上一次动作结果为灯0和灯7亮,其他灯灭。这次预计结果为灯0和灯7灭,其他灯状态不改变。动作时间到后,灯0和灯7灭,其他灯亮。解决方法:修改程序中的算法。90 结论本文主要阐述了基于单片机实现的多路定时控制系统的整个设计过程和制作过程。第一部分分析了国内外现状,对本课题进行了详尽的分析,对该系统提出了总体设计方案。第二部分对方案进行了较为完整的论证。第三部分对多路定时控制器的硬件电路设计的介绍,对采用的主要芯片7805、DS1302、ULN2803进行了详细介绍。第四部分对本课题的软件进行了详细的介绍,详尽阐述了主要的子程序。第五部分是对多路定时控制系统的整体调试过程中所遇到的问题和解决方法进行了详细的论述。第六部分是结论和这次毕设的一点心得。本次毕设实现了设计要求的基本内容,其主要包括以下几个方面:(1)在时间校准模式中,可以校准年、月、日、星期、时、分、秒时标(2)在动作时间模式中模式中,可以实现设定时、分、秒时标(3)在动作路径选择模式中,可以实现1-8条路径的任意组合(4)动作时间时,对应动作次第的动作支路准确动作(5)一个动作时间可以对应1-8条动作路径,要求设置符合实际(6)可连续设置8次动作,每相邻的两次动作时间相差1min由于时间有限,本次毕设还有一些不足。如可以补充一个动作时间查询功能,在想要查询各个动作时间时使用;动作时间只设定了时标时、分、秒,使其只能实现当日定时,可以改进程序使动作时间可以设定年、月、日、星期、时、分、秒所有时标。由于本人能力有限,设计难免有不足之处,恳请老师批评指正。90 致谢此次毕业设计是在我的指导教师马东老师的精心指导及全力支持下完成的。每当我遇到不懂的地方,马老师都会耐心地帮我讲解,直到我弄懂为止。当我迷茫时,马老师会给出自己的意见让我参考,让我不再迷茫。当我气馁时,马老师会鼓励我,克服困难,继续前进。马老师对新知识,新事物都有自己独到的见解,让我受益匪浅。经过马老师的知道,我对毕设中所涉及的知识不仅理解了,还学会了如何运用。马老师,谢谢您对我的帮助!同时,也感谢我的父母,是他们给我创造了条件,让我能够接受大学的熏陶,我一定会努力学习,不辜负您们对我的期望!最后,我要以最真挚的感情来改写指导本次毕设设计的老师,是您们用辛勤的劳动、无私的奉献帮助我完成了毕业设计。同时感谢各位同学对我的帮助,谢谢你们!90 参考文献[1]陈忠平.51单片机C语言程序设计经典实例.电子工业出版社,2012,5.[2]赵建领,崔昭霞.精通51单片机开发技术与应用实例.电子工业出版社,2012,6.[3]程国钢,陈跃琴,崔荔蒙.51单片机典型模块开发查询手册.电子工业出版社,2012,5.[4]边春远.MCS-51单片机应用开发实用子程序[M].北京:人民邮电出版社,2005.[5]张毅刚.MCS-51单片机应用技术设计[M].哈尔滨:哈尔滨工业大学出版社,1997.[6]雷丽文.微机原理与接口技术.北京:电子工业出版社,2007[7]李群芳.单片机微型计算机与接口技术.第3版.北京:电子工业出版社,2008[8]周坚.单片机轻松入门[M].北京:北京航空航天出版社,2002.[9]宋浩.单片机原理及应用[M].北京:清华大学出版社,北京交通大学出版社,2005.[10]周国雄,晏密英.单片机应用系统设计精英.中国铁道出版社,2011,3.[11]景小松.单片机电路设计实例[D].呼和浩特:内蒙古大学,2007.90 附录A英文原文WeldrobotapplicationpresentconditionAccordingtoincompletelystatistics,thewholeworldabouthasintheindustrialrobotofservicenearlyhalfofindustrialrobotsisusedformultiformweldtoprocessrealm,weldrobotofapplicationinmainlyhavetwokindsofmethodsmostwidespreadly,thenorderHanandelectricityHuHan.Whatwesay"sweldingrobotisinfactweldingtoproducerealmtoreplaceaweldertobeengagedintheindustrialrobotofweldingthetask.Theseweldtohaveplentyoftodesignforbeingacertaintoweldawayexclusivelyintherobotof,butmajorityoflyweldrobotinfactisaningeneraluseindustrialrobottopackupacertainweldtoolbutconstitute.Inmanytaskenvironments,asetrobotevencancompleteincludeweldatinsideofgraspathing,porterage,install,weld,unloadtoanticipateetc.varioustasks,robotcanrequestaccordingtotheprocedurewithtaskpropertyandautomaticallyreplacethetoolontherobotwrist,thecompletioncorrespondsoftask.Therefore,comeuptosayfromacertainmeaning,thedevelopmenthistoryofindustrialrobotisthedevelopmenthistorythatweldsrobot.Knowtoall,weldtoprocesstorequestthatwelderhavetohavewell-trainedoperationtechnicalability,abundantfulfillmentexperience,stabilityofweldlevel;Itisstillakindoflaborconditionbad,manysmokeanddust,hottheradiationisbig,riskGaoofwork.Theemergenceoftheindustrialrobotmakespeoplenaturallythoughtoffirstthehandicraftthatreplaceapersonwithitweldsandeasesthewelder"slaborstrength,canalsopromisetoweldqualityandexaltationtoweldanefficiencyatthesametime.However,weldagainwithotherindustryprocessprocessdifferent,forexample,electricityHuHanprocessin,drivewelderpiecebecauseofpartheatmeltwithcooloffcreationtransform,theHansewsofthetrackwillthereforetakeplacetochange.HandicraftHantheexperiencedweldercansewpositionaccordingtotheactualHanobservedbyeyesadjustmentHaningoodtimetheposition,carriageofthegunandrunaboutofspeedtoadapttothevarietythattheHansewsatrack.Howevertherobotwanttoadapttothiskindofvariety,havetothepositionandstatusofgunthatwantto"see"thiskindoftochange,thenadopthomologousmeasuretoadjustHanlikepersonfirst,followwhilecarryingouttosewactuallytotheHan.BecausetheelectricityHuweldstohaveinprocessstrongarclight,giveorgetanelectricshockHunoise,smokeanddustandRongdroptransitionunsteadyandcausableHansilkshortcircuit,bigelectriccurrentstrongmagneticfieldetc.complicatedenvironment90 factorofexistence,therobotwantstoexamineandidentifiesawithdrawingofthesignalcharacteristicneededforsewingHananddon"tseemtobeindustrialtheotherinthemanufacturingtoprocesstheexaminationofprocesssoeasily,therefore,weldingtheapplicationofrobotistousedfortogiveorgetanelectricshocktheprocessofHuHaninthebeginning.Actually,industrialrobotatweldedtheapplicationofrealmtoproduceon-lineelectricresistancetoorderaHanbeginningfromthecarassembleattheearlieststage.ThereasonliesintheprocessthattheelectricresistanceordersHanoppositemoresimple,controlconvenient,andnotneedHantosewatrackfollow,totheaccuracyoftherobotandrepeatthecontrolofaccuracyhavelowerrequest.OrdertheHanrobotassemblestoproduceagreatdealofon-lineapplicationtoconsumedlyraisetherateofproductionthatthecarassembleweldsandweldqualityinthecar,atthesametimeagainhaveagentlecharacteristicsforwelding,thenwant~onlychangeprocedure,canproduceinthesameon-linecarryonassembletoweldtodifferentcarstype.BEborntillthebeginningofthis80"sincenturyfromtherobot,therobottechniqueexperiencedadevelopmentprocessoflongtermslowness.90"s,alongwiththerapiddevelopmentofcalculatortechnique,micro-electronicstechnique,andnetworktechnique...etc.,therobottechniqueisalsoflownsoonadevelopment.Themanufacturinglevel,controlspeedandcontrolaccuracyanddependablesexetc.ofindustrialrobotcontinuouslyraises,butmanufacturingcostandpriceofrobotcontinuouslydescend.Issocialinthewest,withcontraryrobotpriceBE,theperson"slaborforcecostcontainsthetrendtocontinuouslyincrease.UnitedNationsEuropeanEconomicCommittee(UNECE)statisticsesfromthevarietycurveof1990-2000yearsoftherobotpriceindexnumberandlaborforcecostindexnumber.Amongthemtherobotpriceof1990indexnumberandlaborforcecosttheindexnumberisallreferencetobeworth100,goto2000,laborforcecostindexnumberis140,increased40%;Butrobotunderthesistuationthatconsideraqualityfactorthepriceindexnumberislowerthan20,lowered80%,underthesistuationthattakenoaccountofaqualityfactor,thepriceindexnumberofrobotisabout40,lowered60%.Here,therobotpricethattakesnoaccountofaqualityfactormeansactualpriceoftherobotofnowwithcomparedinthepast;Andconsiderthatthequalityfactormeansbecausetherobotmaketheexaltationofcrafttechniquelevel,manufacturingqualityandfunctionofrobotevenifwantalsoundertheconditionofequalpricecomparehighbefore,therefore,ifpressedthepastrobotequaledqualityandfunctiontoconsider,thepriceindexnumberofrobotshouldbemuchlower.90 Canseefromhere,nationalinthewest,becausetheexaltationoflaborforcecostbringsnotsmallpressureforbusinessenterprise,buttheloweringofrobotpriceindexnumbercoincidentallyexpandsapplicationtobringachancefurtherforitagain.Reducetheequipmentsinvestmentofemployeeandincrementrobot,whentheirexpensesattainssomeonebalancepoint,thebenefitofadoptionrobotobviouslywantstocomparetoadoptthebenefitthattheartificialbringsbig,itontheotherhandcanconsumedlyraisetheautomationlevelofproducingtheequipmentsandraisetolaborrateofproductionthus,atthesametimeagaincanpromotetheproductqualityofbusinessenterprise,raisethewholecompetitionabilityofbusinessenterprise.Althoughrobot1timeinvestsalittlebitgreatly,itsdailymaintenanceandconsumeismoreoppositethanitstoproducingfarissmallerthancompletingtheartificialexpensesthatthesametaskconsumes.Therefore,fromfarsightedsee,theproductioncostofproductalsoconsumedlylowers.Buttherobotpricelowertomakesomesmallandmediumenterprisesinvesttopurchaserobottobecomeeasytoaccomplish.Therefore,theapplicationofindustrialrobotissoonflownadevelopmentineverytrade.AccordingtotheUNECEstatistics,thewholeworldhas750,000in2001settheindustrialrobotisusedforindustrymanufacturingrealm,amongthem389,000inJapan,198,000inEU,90,000inNorthAmerica,73,000atrestnation.Gotoattheendof2004thewholeworldtohaveatleastintheindustrialrobotofserviceabout1,000,000.BecausetherobotcontrolstheexaltationofspeedandaccuracyandparticularlygiveorgetanelectricshockthedevelopmentthattheHuspreadsafeelingmachinetocombinetoweldintherobotingetanapplication,maketherobotgiveorgetanelectricshocktheHanofHuHantosewatracktofollowandcontrolaproblemtosomeextentandgetverysolution,therobotweldsinthecartomakethemediumapplicationordersHantosoondevelopintothecarzerofromoriginallymoresinglecarassemblepartsesandelectricityHuwithinassembleprocessHan.Robot"sgivingorgettinganelectricshockthebiggestcharacteristicsofHuHanisgentle,canimmediatelypasstoweaveadistanceatanytimeachangetoweldatrackandweldsequence,thereforemostbeapplicabletoquiltwelderpiecethespeciesvarietyisbig,theHansewshortbutmany,productwithcomplicatedshape.Thisattherightmomentagaincharacteristicsaccordingtocarmanufacturing.Beingtherenewalspeedoftheparticularlymodernsocialcarstyleisveryquick,adoptingthecarproductionlineofrobotmaterialcannicelyadapttothiskindofvariety.Moreover,robot"sgivingorgettinganelectricshockHuHannotonlyusedforacarmanufacturingindustry,butalsocanusedforothermanufacturingindustriesthatinvolveto90 giveorgetanelectricshockHuHan,likeshipbuilding,motorcyclevehicle,boiler,heavytypemachineetc..Therefore,therobotgivesorgetsanelectricshocktheapplicationofHuHangraduallyextensive,ontheamountgreatlyhaveexceedtherobotorderthepowerofHan.Alongwithcarreducinginweightmanufacturingthetechnicalexpansion,somehighstrongmetalalloymaterialsandlightmetalalloymaterial(islikealuminummetalalloy,andmagnesiummetalalloy...etc.)getanapplicationinthematerialinthecarstructure.Thesematerials"weldingusuallycannotsolvewiththeweldingoftraditionmethod,havetoadopttolatelyweldamethodandweldacraft.Amongthem,GaopowerlaserHanandagitationrubHanetc.tohavetodevelopapotentialmost.Therefore,robotandGaopowerlaserHanandagitationrubcombiningofHantobecomeinevitabletrend.BelikethepublicinShanghaitowaitdomestictomosthavethecarmanufacturerofrealstrenghtinfactattheirnewcartypemanufacturingprocessinhavealreadyingreatquantitiesusedrobotlasertoweld.GiveorgetanelectricshockHuHantocomparewithrobot,robotlasertheHanoftheHansewstofollowaccuracytohavehigherrequest.Accordingtothegeneralrequest,therobotgivesorgetsanelectricshocktheHanofHuHan(includeGTAWandGMAW)tosewtofollowaccuracytocontrolin1|oftheelectrodeortheHansilkdiameter2in,athavetheconditionthatfillthesilkundertheHansewtofollowaccuracytoloosenappropriately.ButtolaserHan,thelaserprojectslightuponthelightspotintheworkpiecesurfacewhileweldingdiameterusuallyat0.6in,isfarersmallthanHansilkdiameter(beusuallybiggerthan1.0),butthelaserweldusuallyandnotaddtofillHansilk,therefore,thelaserisweldingifonlythespotpositionhasalittlebitdeviation,thenwillresultintobepartialtoHanandleakHan.Therefore,therobotlaserofthepublicinShanghai"scarcarcrestHaninadditiontopackintheworktongsupadoptmeasuretopreventfromweldingtotransform,stilljusttherobotlaserHangunfrontinstalledthehighaccuracylaserofSCOUTcompanyinGermanytospreadafeelingmachinetousedforHantosewafollowingoftrack.Thestructureformofindustrialrobotisalotof,incommonuselyhaverightangletositmarktype,flexibletype,andcrawlalongtype...etc.bymarktype,manyjointsbymarktype,surfaceofspherebymarktype,pillarnoodles,accordingtodifferentusestillatcontinuouslydevelopmentin.Itismanyrobotsofjointtypesofthemimicryperson"sarmfunctiontoweldwhatrobotcanadoptadifferentstructureformaccordingtotheappliedsituationofdissimilarity,butuseatmostcurrently,thisbecausethearmvividofmanyjointtyperobotsisthebiggest,itcanmakespacepositionandcarriageofHangunadjustintoarbitrarilythestatusweldbysatisfyingademand.Theoreticallyspeak,thejointofrobotismanymore,the90 freedomdegreeisalsomanymore,thejointredundancydegreeisbigmore,andthevividisgoodmore;Butalsogoagainstthesittingofkineticscontrolofmarkingthetransformationandeachjointpositionforrobottobringcomplexityatthesametime.BecauseweldtousuallyneedintheprocesswiththespacerightanglesittomarktheHanontherepresentativeworkpiecetosewpositionconversionfortheHanguncarrythespacepositionandcarriageofdepartmentandpassrobotagaingoagainstthekineticscomputeaconversionfortothecontrolofroboteachjointangleposition,butthesolutionofthistransformationprocessusuallyisn"tunique,theredundancydegreeisbig,solvemoremanymore.Howselectbyexaminationsthesteadythatthequitethecheesesolutionweldstoexerciseintheprocesstotherobotveryimportant.Differenttreatmentofsystemtothisproblemoftherobotcontroldoesn"texertahomology.Isgeneraltocometospeak,have6controlsrequestofpositionsandspacecarriagesthattherobotsofjointsbasicallycansatisfyaHangun,3amongthosefreedomsdegree(XYZ)spacepositionusedforcontrolingaHanguntocarryadepartment,another3freedomdegrees(ABC)areusedforthespacecarriagethatcontrolsaHangun.Therefore,currentlyweldrobotmajorityas6jointtypes.Forsomeweldsituation,workpiecebecauseofleadingbigorthespaceisseveralwhattheshapeistoocomplicated,maketheHangunofweldingtherobotcannotarriveappointedHantosewpositionorHanguncarriage,havetopassthefreedomdegreeofthewayincrementrobotofincreasing1~3exteriorstalksatthistime.Usuallyhavetwokindsofwayofdoings:OneistheorbitthattherobotBepackedtotomovesmallcarorDragongateup,thehomeworkspaceofextensionrobot;Twoistolettheworkpiecemoveorturn,makeworkpieceupofweldthehomeworkspacethatthepartgetsintorobot.Alsohaveofadopttwokindsofabove-mentionedwaysatthesametime,lettheweldingofworkpiecepartandrobotsallbeplacedinthebestweldposition.Weldtheplaitdistanceofrobotmethodcurrentlystillwithon-lineshowandteachaway(Teach-in)islord,butwovetheinterfaceratioofdistancemachinetohavemanyimprovementsinthepast,particularlyistheadoptionofLCDsketchmonitorandmakeandweldtheplaitdistanceoftherobotinterfacelatelygraduallyfriendly,operationmoreeasy.HoweverrobotplaitdistanceHan"ssewingthekeypointonthetracktosittomarkpositionstillhavetopasstoshowtoteachthewayhowtoobtain,thendepositthesportinstructionofprocedure.ThissewstracktosomeHansofcomplicatedshapestosay,havetocostagreatdealoftimetoshowtoteachandloweredtheuseefficiencyofrobotthusandalso90 increasedthelaborstrengthofweavingthedistancepersonnel.Themethodthatsolvescurrentlyincludes2kinds:OneisshowtoteachaplaitdistancejustroughobtainafewHanstosewafewkeysonthetracktoorder,thenspreadafeelingmachine(usuallyisgiveorgetanelectricshockHutospreadfeelingmachineorlasersenseofvisiontospreadafeelingmachine)throughthesenseofvisionofweldingtherobotofautofollowtheactualHansewatrack.Althoughthiswaystillcansnotgetawayfromtoshowtoteachaplaitdistance,thiswaycanseasetoshowthestrengthofteachingtheplaitdistancetosomeextentandraisestoweaveadistanceefficiency.ButbecauseofthecharacteristicsofelectricityHuHan,thesenseofvisionofrobotspreadsafeelingmachinebenotsewformstoallapplytoallHans.Twoisthewaythatadoptsacompletelyoff-lineplaitdistance,maketherobotwelddrawingupofprocedureandHantosewatracktosittomarkadjustingofobtainingofposition,andproceduretotryalltocomputeinasettoindependentlycompleteonboard,don"tneedparticipationofrobot.Robotoff-lineplaitdistanceasearlyasseveralyearsagohave,justinordertobeingsubjectedtorestrictionofthecalculatorfunctionatthattime,off-lineplaitdistancesoftwarewithtextoriginallywayislord,woveadistancemembertoneedtoacquaintwiththeallinstructionsystemsandphrasingofrobot,alsoneededtoknowhowmadesurethatthespacepositionthattheHansewsatracksitsamark,therefore,woveadistanceworktonotandeasilysavetime.Alongwithexaltationandcalculatorofthecalculatorfunction3Dsketchtechnicaldevelopment,presentrobotoff-lineplaitdistancesystemmajoritycanunderthe3Dsketchenvironmentmovement,theplaitdistanceinterfaceamity,convenience,and,obtainingHantosewasittingoftracktomarkpositionusuallycanadoptthewayof"conjectureshowtoteach"(virtualTeach-in),usingamousetoeasilyclicktheweldingofworkpieceinthe3Dvirtualenvironmentthepartcanimmediatelythespaceacquiringthesitamark;Insomesystems,cansewdirectlybornHanofpositiontosewatrackthroughtheHanthatdefineinadvanceintheCADsketchdocument,thentheautomaticallybornrobotprocedurecombinestodownloadrobottocontrolsystem.Thusandconsumedlyraisedtheplaitdistanceoftherobotefficiency,alsoeasedthelaborstrengthofweavingthedistancemember.Currently,itisinternationaltotherehavebeenusinganoff-lineplaitdistanceofrobotaccordingtothecompanyofcommonPCmachineonthemarketsoftware.ItislikeWorkspace5,andRobotStudio...etc..Figure9showdevelopbyoneselfforthewriterofaccordingtoPCof3Dcanseetoturnanoff-lineplaitdistanceofrobotsystem.ThesystemcanIRB140robotsaimingatABBcompanycarryonanoff-lineplaitdistance,theHaninthe90 proceduresewsatracktopassconjecturetoshowtoteachtoacquire,andcanlettherobotpressthetrackintheproceduretoimitatesportinthe3Dsketchenvironment,examineitsaccuracyandrationalitywiththis.Theprocedurewovencanpassanetworkdirectlythedownloadtotherobotcontroller.Theindustrialrobotofourcountry"75"scienceandtechnologiesoffendapasstostartstartingfromthe80"s,currentlyalreadybasiccontrolarobotoperationofthedesignmanufacturingofthemachinetechnique,controlsystemhardwareandsoftwaretodesigntechnique,kineticsandtracktoprogramatechnique,gavebirthtopartsofrobotkeydollarsparepart,developtosprayapaint,HuHanandorderrobots,suchasHan,assembleandporterage...etc.;TherobotofHuHanhasalreadyappliedintheHanofcarmanufactorytopackon-line.Buttotalofcometosee,ourcountryofindustrialrobottechniqueanditengineeringapplicationoflevelandabroadthanstillhavecertaindistance,suchas:Credibilitylowoutsidethecountryproduct;Therobotapplicationengineeringstartsalittlebitlateandapplyrealmnarrow,productionlinesystemtechniqueandabroadthanhaveamargin;Theappliedscaleissmall,didn"tformrobotindustry.Therobotofthecurrentourcountrytheproductionisallrequestthatappliesadoor,listdoorthesingletimere-design,thespeciesspecificationismany,smallbatchquantity,zeropartsesareingeneralusetoturndegreelow,provideagoodsperiodlong,thecostisnotloweither,andthequality,credibilityisunsteady.Consequentlyandurgentlyneedtosolveindustrytoturnanex-keytechniqueforexpecting,Betotheproductcarryonprogramingcompletely,makegoodseriestoturn,ingeneraluseturn,themoldpieceturnadesignandactivelypushforwardindustrytoturnprogress.90 附录B汉语翻译焊接机器人应用现状据不完全统计,全世界在役的工业机器人中大约有将近一半的工业机器人用于各种形式的焊接加工领域,焊接机器人应用中最普遍的主要有两种方式,即点焊和电弧焊。我们所说的焊接机器人其实就是在焊接生产领域代替焊工从事焊接任务的工业机器人。这些焊接机器人中有的是为某种焊接方式专门设计的,而大多数的焊接机器人其实就是通用的工业机器人装上某种焊接工具而构成的。在多任务环境中,一台机器人甚至可以完成包括焊接在内的抓物、搬运、安装、焊接、卸料等多种任务,机器人可以根据程序要求和任务性质,自动更换机器人手腕上的工具,完成相应的任务。因此,从某种意义上来说,工业机器人的发展历史就是焊接机器人的发展历史。  众所周知,焊接加工要求焊工要有熟练的操作技能、丰富的实践经验、稳定的焊接水平;它还是一种劳动条件差、烟尘多、热辐射大、危险性高的工作。工业机器人的出现使人们自然而然首先想到用它代替人的手工焊接,减轻焊工的劳动强度,同时也可以保证焊接质量和提高焊接效率。  然而,焊接又与其它工业加工过程不一样,比如,电弧焊过程中,被焊工件由于局部加热熔化和冷却产生变形,焊缝的轨迹会因此而发生变化。手工焊时有经验的焊工可以根据眼睛所观察到的实际焊缝位置适时地调整焊枪的位置、姿态和行走的速度,以适应焊缝轨迹的变化。然而机器人要适应这种变化,必须首先像人一样要“看”到这种变化,然后采取相应的措施调整焊枪的位置和状态,实现对焊缝的实时跟踪。由于电弧焊接过程中有强烈弧光、电弧噪音、烟尘、熔滴过渡不稳定引起的焊丝短路、大电流强磁场等复杂的环境因素的存在,机器人要检测和识别焊缝所需要的信号特征的提取并不像工业制造中其它加工过程的检测那么容易,因此,焊接机器人的应用并不是一开始就用于电弧焊过程的。 实际上,工业机器人在焊接领域的应用最早是从汽车装配生产线上的电阻点焊开始的。原因在于电阻点焊的过程相对比较简单,控制方便,且不需要焊缝轨迹跟踪,对机器人的精度和重复精度的控制要求比较低。点焊机器人在汽车装配生产线上的大量应用大大提高了汽车装配焊接的生产率和焊接质量,同时又具有柔性焊接的特点,即只要改变程序,就可在同一条生产线上对不同的车型进行装配焊接。 90 从机器人诞生到本世纪80年代初,机器人技术经历了一个长期缓慢的发展过程。到了90年代,随着计算机技术、微电子技术、网络技术等的快速发展,机器人技术也得到了飞速发展。工业机器人的制造水平、控制速度和控制精度、可靠性等不断提高,而机器人的制造成本和价格却不断下降。在西方社会,和机器人价格相反的是,人的劳动力成本有不断增长的趋势。联合国欧洲经济委员会(UNECE)统计从1990年至2000年的机器人价格指数和劳动力成本指数的变化曲线。其中把1990年的机器人价格指数和劳动力成本指数都作为参考值100,至2000年,劳动力成本指数为140,增长了40%;而机器人在考虑质量因素的情况下价格指数低于20,降低了80%,在不考虑质量因素的情况下,机器人的价格指数约为40,降低了60%。这里,不考虑质量因素的机器人价格是指现在的机器人实际价格与过去相比较;而考虑质量因素是指由于机器人制造工艺技术水平的提高,机器人的制造质量和性能即使在同等价格的条件下也要比以前高,因此,如果按过去的机器人同等质量和性能考虑,机器人的价格指数应该更低。 由此可以看出,在西方国家,由于劳动力成本的提高为企业带来了不小的压力,而机器人价格指数的降低又恰巧为其进一步推广应用带来了契机。减少员工与增加机器人的设备投资,在两者费用达到某一平衡点的时候,采用机器人的利显然要比采用人工所带来的利大,它一方面可大大提高生产设备的自动化水平,从而提高劳动生产率,同时又可提升企业的产品质量,提高企业的整体竞争力。虽然机器人一次性投资比较大,但它的日常维护和消耗相对于它的产出远比完成同样任务所消耗的人工费用小。因此,从长远看,产品的生产成本还会大大降低。而机器人价格的降低使一些中小企业投资购买机器人变得轻而易举。因此,工业机器人的应用在各行各业得到飞速发展。根据UNECE的统计,2001年全世界有75万台工业机器人用于工业制造领域,其中38.9万在日本、19.8万在欧盟、9万在北美,7.3万在其余国家。至2004年底全世界在役的工业机器人至少有约100万。 由于机器人控制速度和精度的提高,尤其是电弧传感器的开发并在机器人焊接中得到应用,使机器人电弧焊的焊缝轨迹跟踪和控制问题在一定程度上得到很好解决,机器人焊接在汽车制造中的应用从原来比较单一的汽车装配点焊很快发展为汽车零部件和装配过程中的电弧焊。机器人电弧焊的最大的特点是柔性,即可通过编程随时改变焊接轨迹和焊接顺序,因此最适用于被焊工件品种变化大、焊缝短而多、形状复杂的产品。这正好又符合汽车制造的特点。尤其是现代社会汽车款式的更新速度非常快,采用机器人装备的汽车生产线能够很好地适应这种变化。 90 另外,机器人电弧焊不仅用于汽车制造业,更可以用于涉及电弧焊的其它制造业,如造船、机车车辆、锅炉、重型机械等等。因此,机器人电弧焊的应用范围日趋广泛,在数量上大有超过机器人点焊之势。 随着汽车轻量化制造技术的推广,一些高强合金材料和轻合金材料(如铝合金、镁合金等)在汽车结构材料中得到应用。这些材料的焊接往往无法用传统的焊接方法来解决,必须采用新的焊接方法和焊接工艺。其中高功率激光焊和搅拌摩擦焊等最具发展潜力。因此,机器人与高功率激光焊和搅拌摩擦焊的结合将成为必然趋势。事实上,像上海大众等国内最具实力的汽车制造商在他们的新车型制造过程中已经大量使用机器人激光焊接。和机器人电弧焊相比,机器人激光焊的焊缝跟踪精度要求更高。根据一般的要求,机器人电弧焊(包括GTAW和GMAW)的焊缝跟踪精度必须控制在电极或焊丝直径的1/2以内,在具有填充丝的条件下焊缝跟踪精度可适当放宽。但对激光焊而言,焊接时激光照射在工件表面的光斑直径通常在0.6以内,远小于焊丝直径(通常大于1.0),而激光焊接时通常又不加填充焊丝,因此,激光焊接中若光斑位置稍有偏差,便会造成偏焊、漏焊。因此,上海大众的汽车车顶机器人激光焊除了在工装夹具上采取措施防止焊接变形外,还在机器人激光焊枪前方安装了德国SCOUT公司的高精度激光传感器用于焊缝轨迹的跟踪。 工业机器人的结构形式很多,常用的有直角坐标式、柱面坐标式、球面坐标式、多关节坐标式、伸缩式、爬行式等等,根据不同的用途还在不断发展之中。焊接机器人根据不同的应用场合可采取不同的结构形式,但目前用得最多的是模仿人的手臂功能的多关节式的机器人,这是因为多关节式机器人的手臂灵活性最大,可以使焊枪的空间位置和姿态调至任意状态,以满足焊接需要。理论上讲,机器人的关节愈多,自由度也愈多,关节冗余度愈大,灵活性愈好;但同时也给机器人逆运动学的坐标变换和各关节位置的控制带来复杂性。因为焊接过程中往往需要把以空间直角坐标表示的工件上的焊缝位置转换为焊枪端部的空间位置和姿态,再通过机器人逆运动学计算转换为对机器人每个关节角度位置的控制,而这一变换过程的解往往不是唯一的,冗余度愈大,解愈多。如何选取最合适的解对机器人焊接过程中运动的平稳性很重要。不同的机器人控制系统对这一问题的处理方式不尽相同。  一般来讲,具有6个关节的机器人基本上能满足焊枪的位置和空间姿态的控制要求,其中3个自由度(XYZ)用于控制焊枪端部的空间位置,另外3个自由度(ABC)用于控制90 焊枪的空间姿态。因此,目前的焊接机器人多数为6关节式的。  对于有些焊接场合,工件由于过大或空间几何形状过于复杂,使焊接机器人的焊枪无法到达指定的焊缝位置或焊枪姿态,这时必须通过增加1~3个外部轴的办法增加机器人的自由度。通常有两种做法:一是把机器人装于可以移动的轨道小车或龙门架上,扩大机器人本身的作业空间;二是让工件移动或转动,使工件上的焊接部位进入机器人的作业空间。也有的同时采用上述两种办法,让工件的焊接部位和机器人都处于最佳焊接位置。 焊接机器人的编程方法目前还是以在线示教方式(Teach-in)为主,但编程器的界面比过去有了不少改进,尤其是液晶图形显示屏的采用使新的焊接机器人的编程界面更趋友好、操作更加易。然而机器人编程时焊缝轨迹上的关键点坐标位置仍必须通过示教方式获取,然后存入程序的运动指令中。这对于一些复杂形状的焊缝轨迹来说,必须花费大量的时间示教,从而降低了机器人的使用效率,也增加了编程人员的劳动强度。目前解决的方法有2种: 一是示教编程时只是粗略获取几个焊缝轨迹上的几个关键点,然后通过焊接机器人的视觉传感器(通常是电弧传感器或激光视觉传感器)自动跟踪实际的焊缝轨迹。这种方式虽然仍离不开示教编程,但在一定程度上可以减轻示教编程的强度,提高编程效率。但由于电弧焊本身的特点,机器人的视觉传感器并不是对所有焊缝形式都适用。  二是采取完全离线编程的办法,使机器人焊接程序的编制、焊缝轨迹坐标位置的获取、以及程序的调试均在一台计算机上独立完成,不需要机器人本身的参与。机器人离线编程早在多年以前就有,只是由于当时受计算机性能的限制,离线编程软件以文本方式为主,编程员需要熟悉机器人的所有指令系统和语法,还要知道如何确定焊缝轨迹的空间位置坐标,因此,编程工作并不轻松省时。随着计算机性能的提高和计算机三维图形技术的发展,如今的机器人离线编程系统多数可在三维图形环境下运行,编程界面友好、方便,而且,获取焊缝轨迹的坐标位置通常可以采用“虚拟示教”(virtual Teach-in)的办法,用鼠标轻松点击三维虚拟环境中工件的焊接部位即可获得该点的空间坐标;在有些系统中,可通过CAD图形文件中事先定义的焊缝位置直接生成焊缝轨迹,然后自动生成机器人程序并下载到机器人控制系统。从而大大提高了机器人的编程效率,也减轻了编程员的劳动强度。目前,国际市场上已有基于普通PC机的商用机器人离线编程软件。如Workspace5、RobotStudio等。图9所示为笔者自行开发的基于PC的三维可视化机器人离线编程系统。该系统可针对ABB公司的IRB140机器人进行离线编程,程序中的焊缝90 轨迹通过虚拟示教获得,并在三维图形环境中可让机器人按程序中的轨迹作模拟运动,以此检验其准确性和合理性。所编程序可通过网络直接下载给机器人控制器。 我国的工业机器人从80年代“七五”科技攻关开始起步,目前已基本掌握了机器人操作机的设计制造技术、控制系统硬件和软件设计技术、运动学和轨迹规划技术,生产了部分机器人关键元器件,开发出喷漆、弧焊、点焊、装配、搬运等机器人;弧焊机器人已应用在汽车制造厂的焊装线上。但总的来看,我国的工业机器人技术及其工程应用的水平和国外比还有一定的距离,如:可靠性低于国外产品;机器人应用工程起步较晚,应用领域窄,生产线系统技术与国外比有差距;应用规模小,没有形成机器人产业。 当前我国的机器人生产都是应用户的要求,单户单次重新设计,品种规格多、批量小、零部件通用化程度低、供货周期长、成本也不低,而且质量、可靠性不稳定。因此迫切需要解决产业化前期的关键技术,对产品进行全面规划,搞好系列化、通用化、模块化设计,积极推进产业化进程。90 附录C源程序 #include#include#defineucharunsignedchar#defineuintunsignedint#defineLCD_DATP0sbitGD_SRCK=P1^0;//74HC595_SCLKsbitGD_SER_IN=P1^1;//74HC595_DSsbitreset=P1^2;//DS1302_RSTsbitsclk=P1^3;//DS1302_SCLKsbitio=P1^4;//DS1302_IOsbitrs=P1^5;//LCD_RSsbitrw=P1^6;//LCD_RWsbitep=P1^7;//LCD_EPsbitcs=P3^6;//数码管使能端sbitBEEP=P3^7;//蜂鸣器ucharK,j,m,n,dotime,temp3,open,close;bitflag=0,hour=0,min=0,sec=0,key_flag;bityear=0,month=0,day=0,week=0;bitalarm_flag=0;ucharkey,m=0,n=0,timecount=0,count=0;ucharstr1[]="--Week:";ucharstr2[]="Time:";ucharstr3[]="Alarm:";ucharidatainit[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};ucharidatainit1[]={0x00,0x00};90 ucharidatainit2[]={0x00,0x59,0x23,0x01,0x05,0x01,0x06};//秒,分,时,日,月,星期,年ucharidatabj_time[]={0x00,0x00,0x00};//动作时间中间变量,秒,分,时uchardz_time[8][3]={{100,100,100},{100,100,100},//存储动作时间,最{100,100,100},{100,100,100},//设置动作时间的秒、{100,100,100},{100,100,100},{100,100,100},{100,100,100}};ucharcodemytab[8]={0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭字符ucharcodetab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,//共阳极LED0~F的0x80,0x90,0x88,0xC6,0xA1,0x86,0x8E,0xBF};//段码ucharcodeled[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//共阳极LED亮灭的代码,用于模拟8条负载支路uchartemp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//用于存储每次设置动作时间完成后的动作支路ucharScanKey();//声明按键检测函数ucharYes();//声明按键值确认函数/***********************************************************************函数名称:delay函数功能:实现ms级的延时参数介绍:ms:定时需要延时毫秒的数值返回值:无注意事项:无***********************************************************************/voiddelay(ucharms){uchari;while(ms--){90 for(i=0;i<120;i++);}}/***************************************************************************函数名称:write_byte_ds1302函数功能:向DS1302写入某个字节参数介绍:inbyte:将要向DS1302输入的字节i:记录字节右移的次数sclk:上升沿的时候向DS1302写入字节io:按位向DS1302输入数据返回值:无注意事项:在slk的上升沿时按位向DS1302写数据,数据从最低位开始写***************************************************************************/voidwrite_byte_ds1302(ucharinbyte){uchari;sclk=0;for(i=0;i<8;i++){sclk=0;//写的时候低电平,改变数据_nop_();if(inbyte&0x01)//数据从最低位开始写入DS1302,判断最低位是1还是0io=1;//条件为真,最低位为1,从I/O口向DS1302写入1elseio=0;//条件为假,最低位为0,从I/O口向DS1302写入0_nop_();_nop_();sclk=1;//写的时候高电平,把数据写入DS1302_nop_();90 inbyte=inbyte>>1;//将次低位数据右移一位变为最低位}}/***************************************************************************函数名称:read_byte_ds1302函数功能:从DS1302读出某一字节参数介绍:i:记录temp右移次数temp:记录从DS1302读取的数据io:记录DS1302I/O口数据sclk:产生下降沿返回值:temp注意事项:从DS1302读取字节是按位读取的,在sclk的下降沿读取位,是从最低位开始读取的***************************************************************************/charread_byte_ds1302(){uchari,temp=0;io=1;//将单片机的P1^4口设置为输入口,单片机从DS1302读取数据for(i=0;i<7;i++){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();sclk=0;//sclk的下降沿读数据90 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();if(io==1)temp=temp|0x80;//设置temp最高位为1elsetemp=temp&0x7f;//设置temp最高位为0sclk=1;//产生下降沿_nop_();temp=temp>>1;//设置本次读取位为次高位}return(temp);//返回从DS1302读取的字节}/*************************************************************************函数名称:HC595函数功能:实现串入并出的单片机接口的扩展参数介绍:xx:将要从74HC595的并行口输出的共阳极数码管段码GD_SER_IN:74HC595串行输入端GD_SRCK:产生上升沿,使移位寄存器移位和存储寄存器数据更新返回值:无注意事项:当移位寄存器的时钟和存储寄存器的时钟连在一起后,存储寄存器的时钟总比移位寄存器的时钟晚一个脉冲***********************************************************************/voidHC595(unsignedcharxx)90 {unsignedcharei=8;for(ei=0;ei<8;ei++){GD_SER_IN=xx&(0x80>>(ei));//高位先出GD_SRCK=1;GD_SRCK=0;//产生上升沿,74HC595中的移位寄存器移位}GD_SRCK=1;//产生上升沿,74HC595中的存储寄存器数据更新GD_SRCK=0;}/***********************************************************************函数名称:write_ds1302函数功能:向DS1302指定的地址写入指定的数据参数介绍:cmd:指定的地址indata:向指定的地址写入的指定的数据返回值:无注意事项:向指定的地址写数据分为两个步骤:先写地址,后写数据***********************************************************************/voidwrite_ds1302(ucharcmd,ucharindata)//向DS1302的某个地址写入数据{sclk=0;reset=1;//只有sclk为0时,reset才能置位1write_byte_ds1302(cmd);//写地址write_byte_ds1302(indata);//写数据sclk=0;reset=0;}/***********************************************************************90 函数名称:read_ds1302函数功能:读取DS1302中指定地址的数据参数介绍:addr:指定目标地址backdata:保存目标地址中读取出的数据返回值:backdata注意事项:读取DS1302中指定地址的数据分为两个步骤:先指定地址,后执行读取字节命令***********************************************************************/ucharread_ds1302(ucharaddr)//读DS1302某地址的数据{ucharbackdata;sclk=0;reset=1;write_byte_ds1302(addr);//先写地址backdata=read_byte_ds1302();//然后读数据sclk=0;reset=0;return(backdata);}/***************************************************************************函数名称:read_nowtime_ds1302函数功能:读取指定地址中的n个字节数据参数介绍:addr:指定地址*P:指针变量,指向指定地址的首地址n:读取字节的个数返回值:无注意事项:指针变量先指向指定地址的首地址,然后读取地址中的数据,然后指针变量加2,继续读取下一字节数据,直到所有数据读完**********************************************************************/voidread_nowtime_ds1302(ucharaddr,uchar*p,ucharn)90 {for(;n>0;n--){*p=read_ds1302(addr);p++;addr=addr+2;}}/***************************************************************************函数名称:init_ds1302函数功能:初始化ds1302参数介绍:inint:初始化数组,依次存储了秒、分、时、日、月、星期、年的初始值返回值:无注意事项:在对DS1302的相关寄存器进行操作时,必须先写控制字,允许写操作***************************************************************************/voidinit_ds1302(){reset=0;sclk=0;write_ds1302(0x8e,0x00);//写控制字,允许写操作read_nowtime_ds1302(0x81,init,7);//读出当前时间,读出7个字节write_ds1302(0x80,0x30);//秒if(init[1]>0x59)write_ds1302(0x82,0x00);//分if(init[2]>0x23)write_ds1302(0x84,0x12);//时if(init[3]>0x31)write_ds1302(0x86,0x01);//日if(init[4]>0x12)write_ds1302(0x88,0x01);//月90 if(init[5]>0x07)write_ds1302(0x8A,0x01);//周if(init[6]>0x99)write_ds1302(0x8C,0x13);//年write_ds1302(0x90,0xa6);//一个二极管+4kΩ电阻充电write_ds1302(0x8e,0x80);//写保护控制字,禁止写}/***************************************************************************函数名称:Busy_Check函数功能:检测LCD是否处于忙碌状态参数介绍:rs:数据/指令寄存器选择端。高电平时选择数据寄存器,低电平时选择指令寄存器rw:读/写选择端。高电平时为读操作,低电平时为写操作ep:使能信号,下降沿触发LCD_Status:保存BF的值返回值:LCD_Status注意事项:BF为1时LCD处于忙碌状态,为0时处于非忙碌状态**************************************************************************/ucharBusy_Check(void){ucharLCD_Status;rs=0;//选择指令寄存器rw=1;//读操作ep=1;//产生下降沿_nop_();_nop_();_nop_();_nop_();LCD_DAT=0xff;LCD_Status=LCD_DAT&0x80;//读取BF的值90 ep=0;returnLCD_Status;}/***************************************************************************函数名称:lcd_wcmd函数功能:写入指令到LCD参数介绍:LCD_DAT:保存写入到LCD的指令返回值:无注意事项:在对LCD进行相关操作前,需检测LCD是否处于忙碌状态***************************************************************************/voidlcd_wcmd(ucharcmd){while(Busy_Check());//等到LCD空闲rs=0;//选择指令寄存器rw=0;//写操作ep=0;_nop_();_nop_();LCD_DAT=cmd;//保存写入到LCD的指令_nop_();_nop_();_nop_();_nop_();ep=1;//产生下降沿_nop_();_nop_();_nop_();_nop_();ep=0;}90 /***************************************************************************函数名称:lcd_wdat函数功能:写入显示数据到LCD参数介绍:LCD_DAT:保存写入到LCD的数据返回值:无注意事项:无**************************************************************************/voidlcd_wdat(uchardat){while(Busy_Check());//等待LCD空闲rs=1;//选择数据寄存器rw=0;//写操作ep=0;LCD_DAT=dat;//保存写入到LCD的数据_nop_();_nop_();_nop_();_nop_();ep=1;//产生下降沿_nop_();_nop_();_nop_();_nop_();ep=0;}/***************************************************************************函数名称:lcd_write_str函数功能:向LCD1602指定的地址写入字符串参数介绍:addr:指定目标地址i:指定字符串中字符的个数90 P:指针变量,指向要写入字符串的首地址返回值:无注意事项:先指定地址,后输入字符串***************************************************************************/voidlcd_write_str(ucharaddr,uchar*p){uchari=0;lcd_wcmd(addr);//指定地址while(p[i]!="")//判断字符串是否写完{lcd_wdat(p[i]);//向指定地址写入数据i++;}}/***************************************************************************函数名称:write_position函数功能:设定LCD1602显示位置参数介绍:row:指定行col:指定列返回值:无注意事项:DDRAM地址指针设置指令用于设置两行字符显示的起始地址。为0x80~0x8F时,为第1行第0列到第1行第15列。为0xC0H~0xCFH时,为第2行第0列到第2行第15列***************************************************************************/voidwrite_position(ucharrow,ucharcol){ucharplace;if(row==1){place=0x80+col-1;//计算出第一行第col列的地址90 lcd_wcmd(place);//向LCD写入地址}else{place=0xc0+col-1;//计算出第二行地col列的地址lcd_wcmd(place);}}/***************************************************************************函数名称:Set_place函数功能:指定位置,显示调整后的时间参数介绍:row:指定行col:指定列返回值:无注意事项:无*************************************************************************/voidSet_place(ucharrow,ucharcol){write_position(row,col);lcd_wdat(init1[0]+0x30);write_position(row,col+1);lcd_wdat(init1[1]+0x30);}/************************************************************************函数名称:wirtetab函数功能:将自定义小喇叭哦字符写入CGRAM参数介绍:i:记录自定义字符写入的个数返回值:无注意事项:设置CGRAM地址指令后,用户可以将自己定义的显示字符数据写入CGRAM或从CGRAM中读出90 *************************************************************************/voidwritetab(){uchari;lcd_wcmd(0x40);//CGRAM地址设置指令for(i=0;i<8;i++)lcd_wdat(mytab[i]);}/***************************************************************************函数名称:beep函数功能:达到条件(按键被有效检测),蜂鸣器发声参数介绍:y:正负脉冲的个数BEEP:喇叭的驱动端返回值:无注意事项:为了防止蜂鸣器误动作,根据原理图,应给BEEP赋初值1,执行完beep函数后,BEEP的值仍为1***************************************************************************/voidbeep(){uchary;for(y=0;y<100;y++){delay(1);BEEP=!BEEP;//BEEP取反}BEEP=1;//关闭蜂鸣器delay(100);}/***************************************************************************函数名称:Set_W130290 函数功能:向DS1302指定的地址写设定值参数介绍:addr:指定地址temp:设定值init1:用于保存设定值返回值:无注意事项:无***************************************************************************/voidSet_W1302(ucharaddr){uchartemp;write_ds1302(0x8e,0x00);//写控制字,允许写temp=(init1[0]<<4)+init1[1];write_ds1302(addr,temp);//向指定的地址写入设定值write_ds1302(0x8e,0x80);//写控制字,禁止写beep();}/***************************************************************************函数名称:flash函数功能:使时间光标闪烁参数介绍:flag:判断是显示“:”还是“0”返回值:无注意事项:lcd_wdat(0x20)中的0x20对应空白***************************************************************************/voidflash(){if(flag){write_position(2,9);lcd_wdat(":");write_position(2,12);90 lcd_wdat(":");}else{write_position(2,9);lcd_wdat(0x20);write_position(2,12);lcd_wdat(0x20);}}/***************************************************************************函数名称:Play_nowtime函数功能:显示当前时间参数介绍:无返回值:无注意事项:显示当前时间时显示时间参量应该和位置相匹配***************************************************************************/voidPlay_nowtime(){read_nowtime_ds1302(0x81,init,7);//读出当前时间,读出7个字节write_position(2,7);//第2行第7列lcd_wdat(((init[2]&0xf0)>>4)+0x30);//读十位小时数write_position(2,8);lcd_wdat("0"+(init[2]&0x0f));//读个位小时数write_position(2,10);lcd_wdat("0"+((init[1]&0xf0)>>4));//读十位分钟数write_position(2,11);lcd_wdat("0"+(init[1]&0x0f));//读个位分钟数write_position(2,13);lcd_wdat("0"+((init[0]&0xf0)>>4));//读十位秒数90 write_position(2,14);lcd_wdat("0"+(init[0]&0x0f));//读个位秒数write_position(1,1);lcd_wdat("0"+((init[6]&0xf0)>>4));//读十位年数write_position(1,2);lcd_wdat("0"+(init[6]&0x0f));//读个位年数write_position(1,4);lcd_wdat("0"+((init[4]&0xf0)>>4));//读十位月数write_position(1,5);lcd_wdat("0"+(init[4]&0x0f));//读个位月数write_position(1,7);lcd_wdat("0"+((init[3]&0xf0)>>4));//读十位日数write_position(1,8);lcd_wdat("0"+(init[3]&0x0f));//读个位日数write_position(1,15);lcd_wdat("0"+(init[5]&0x0f));//读星期flash();}/***************************************************************************函数名称:Set_Flash函数功能:使被设置的数据闪烁参数介绍:initl[0]:保存设定数的十位init2[1]:保存设定数的个位返回值:无注意事项:无***************************************************************************/voidSet_Flash(ucharrow,ucharcol){init1[0]=count/10;//分离得到设定值的十位init1[1]=count%10;//分离得到设定值的个位90 if(flag){//显示write_position(row,col);lcd_wdat(init1[0]+0x30);write_position(row,col+1);lcd_wdat(init1[1]+0x30);}else{write_position(row,col);//清屏lcd_wdat(0x20);write_position(row,col+1);lcd_wdat(0x20);}}/***************************************************************************函数名称:key_set函数功能:用按键设定时、分、秒、年、月、日、星期等时标参数介绍:K:按键的键值count:记录按键的次数,表示设定值在本次按键按下后为何值返回值:无注意事项:按键按下时,有时检测不准确,设定以LCD显示为准***************************************************************************/voidkey_set(ucharnum,ucharrow,ucharcol)//键设定函数{K=Yes();if(K==3){beep();if(count!=num)90 count++;elsecount=0;}if(K==4){beep();if(count!=0)count--;elsecount=num;}Set_Flash(row,col);}/**************************************************************************函数名称:Play_alarmtime函数功能:显示动作时间参数介绍:bj_time[2]:保存动作时间的小时数bj_time[1]:保存动作时间的分钟数bj_time[0]:保存动作时间的秒数返回值:无注意事项:无***************************************************************************/voidPlay_alarmtime(){write_position(2,7);lcd_wdat(((bj_time[2]&0xf0)>>4)+0x30);write_position(2,8);lcd_wdat("0"+(bj_time[2]&0x0f));//读小时write_position(2,9);90 lcd_wdat(":");write_position(2,10);lcd_wdat("0"+((bj_time[1]&0xf0)>>4));write_position(2,11);lcd_wdat("0"+(bj_time[1]&0x0f));//读分钟write_position(2,12);lcd_wdat(":");write_position(2,13);lcd_wdat("0"+((bj_time[0]&0xf0)>>4));write_position(2,14);lcd_wdat("0"+(bj_time[0]&0x0f));//读秒}/***************************************************************************函数名称:alarm_time函数功能:设定动作时间参数介绍:返回值:注意事项:***************************************************************************/voidalarm_time(){K=Yes();if((K==1)&&flag)//开始设定动作时间{lcd_write_str(0xc0,str3);//液晶显示提示信息Play_alarmtime();//显示动作时间beep();hour=1;count=((bj_time[2]&0xf0)>>4)*10+(bj_time[2]&0x0f);//读取当前时动作时间while(hour)//设定时90 {key_set(23,2,7);//按键设定时K=Yes();if(K==2){Set_place(2,7);bj_time[2]=((init1[0]<<4)|init1[1]);beep();hour=0;min=1;count=((bj_time[1]&0xf0)>>4)*10+(bj_time[1]&0x0f);//读当前分}}while(min)//设定分{key_set(59,2,10);K=Yes();if(K==2){Set_place(2,10);bj_time[1]=((init1[0]<<4)|init1[1]);beep();min=0;sec=1;count=((bj_time[0]&0xf0)>>4)*10+(bj_time[0]&0x0f);//读当前秒}}while(sec)//设定秒{key_set(59,2,13);90 K=Yes();if(K==5)//动作时间设定完成{Set_place(2,13);bj_time[0]=((init1[0]<<4)|init1[1]);beep();sec=0;count=0;lcd_write_str(0xc0,str2);//液晶显示提示信息}}}}/***************************************************************************函数名称:Time_compare函数功能:将当前时间与动作时间比较,确定是否动作参数介绍:temp:动作时间到动作一次,产生一个动作信号保存到temp中返回值:无注意事项:无***************************************************************************/voidTime_compare(){for(m=0;m<=n;m++){if(init[2]==dz_time[m][2]){if(init[1]==dz_time[m][1]){if(init[0]==dz_time[m][0]){90 beep();P2=temp[m];}}}}}/***************************************************************************函数名称:Time0函数功能:产生中断,改变flag的值参数介绍:TH0:计数初值的高八位TL0:计数处置的低八位返回值:无注意事项:无***************************************************************************/voidTime0(void)interrupt1{TH0=0x4c;//50ms定时TL0=0x00;timecount++;if(timecount>9){timecount=0;flag=~flag;}}/***************************************************************************函数名称:lcd_init函数功能:初始化LCD参数介绍:无90 返回值:无注意事项:无***************************************************************************/voidlcd_init(void){lcd_wcmd(0x38);//设置显示格式为:16*2行显示,5*7点阵,8位数据接口delay(1);lcd_wcmd(0x0c);//显示开,关光标delay(1);lcd_wcmd(0x06);//0x06---读写后指针加1delay(1);lcd_wcmd(0x01);//清除LCD的显示内容delay(1);}/***************************************************************************函数名称:time0_inint函数功能:初始化定时器0参数介绍:EA:CPU中断允许总控制位。EA=0,禁止一切中断;EA=1,开放中断ET0:定时器0允许中断位。ET0=0,禁止中断;ET0=1,允许中断TR0:定时器0的启动位,由软件赋值返回值:无注意事项:定时初值计算准确***************************************************************************/voidtime0_init(){TMOD=0x01;//设置定时器0为工作方式1TH0=0x4c;//50ms定时TL0=0x00;EA=1;//开放总中断ET0=1;//开启定时器0中断90 TR0=1;//启动定时器0}/***************************************************************************函数名称:ScanKey函数功能:进行键盘扫描,获得键值参数介绍:temp:存取P3口状态temp1:存取P3口列线状态key:保存键值返回值:key注意事项:无***************************************************************************/ucharScanKey()//键盘扫描{uchartemp,temp1,key;temp=P3;//读取P3端口状态temp&=0x87;//判断行线状态switch(temp){case0x86://行线的P3.0为低电平{P3=0xB8;delay(100);//延时片刻,以利于状态的获取temp1=P3;//读取P3端口状态temp1&=P3;//判断列线状态switch(temp1){case0xB0://列线的P3.5为低电平,表示”0“键被按下key=0;//键值为0break;//跳出列线判断状态case0xA8://列线的P3.4为低电平,表示”1“键被按下90 key=1;//键值为1break;//跳出列线判断状态case0x98://列线的P3.3为低电平,表示”2“键被按下key=2;//键值为2break;//跳出列线判断状态default://列线没有发生状态变化break;}P3=0x87;break;}case0x85://行线的P1.1为低电平{P3=0xB8;delay(100);temp1=P3;temp1&=P3;switch(temp1){case0xB0:key=3;break;case0xA8:key=4;break;case0x98:key=5;break;default:break;90 }P3=0x87;break;}case0x83://行线的P1.2为低电平{P3=0xB8;delay(100);temp1=P3;temp1&=P3;switch(temp1){case0xB0:key=6;break;case0xA8:key=7;break;case0x98:key=8;break;default:break;}P3=0x87;break;}default:break;}90 return(key);}/***************************************************************************函数名称:Yes函数功能:确认按键按下,并返回准确的键值参数介绍:keynum:保存键值key_flag:按键按下标志位。为0无按键按下,为1有按键按下返回值:keynum注意事项:无***************************************************************************/ucharYes(){uchartemp,keynum;temp=P3;temp&=0x87;if(temp==0x87){key_flag=0;}else{delay(100);temp=P3;temp&=0x87;}if(temp==0x87)key_flag=0;else{key_flag=1;90 keynum=ScanKey();}returnkeynum;//返回键值}/***************************************************************************函数名称:Load_switch函数功能:选择动作支路参数介绍:temp1:保存所选取的路径返回值:temp1注意事项:进行路径选择时,数码管显示几,按下键2就选定路径几;按下键2,蜂鸣器发声才为有效选择***************************************************************************/ucharLoad_switch(){uchartemp1=0xff;j=0;beep();HC595(tab[j]);while(1){cs=0x01;K=Yes();if(K==3){beep();if(j!=7)j++;elsej=0;HC595(tab[j]);90 }if(K==4){beep();if(j!=0)j--;elsej=7;HC595(tab[j]);}K=Yes();if(K==2){beep();temp1=temp1&led[j];}K=Yes();if(K==5){beep();cs=0x00;break;}}return(temp1);}/***********************************************************************函数名称:Get_times函数功能:设定动作次第数与动作路径的动作性质参数介绍:无90 返回值:无注意事项:按键2对应动作性质为开;按键8对应动作性质为关***********************************************************************/voidGet_times(uchartemp2){n=0;beep();HC595(tab[n]);while(1){cs=0x01;K=Yes();if(K==3){beep();if(n!=7)n++;elsen=0;HC595(tab[n]);}if(K==4){beep();if(n!=0)n--;elsen=7;HC595(tab[n]);}90 K=Yes();if(K==2){beep();switch(n){case0:{dz_time[0][0]=bj_time[0];dz_time[0][1]=bj_time[1];dz_time[0][2]=bj_time[2];temp[0]=temp2;break;}case1:{dz_time[1][0]=bj_time[0];dz_time[1][1]=bj_time[1];dz_time[1][2]=bj_time[2];temp[1]=temp2&temp[0];break;}case2:{dz_time[2][0]=bj_time[0];dz_time[2][1]=bj_time[1];dz_time[2][2]=bj_time[2];temp[2]=temp2&temp[1];break;90 }case3:{dz_time[3][0]=bj_time[0];dz_time[3][1]=bj_time[1];dz_time[3][2]=bj_time[2];temp[3]=temp2&temp[2];break;}case4:{dz_time[4][0]=bj_time[0];dz_time[4][1]=bj_time[1];dz_time[4][2]=bj_time[2];temp[4]=temp2&temp[3];break;}case5:{dz_time[5][0]=bj_time[0];dz_time[5][1]=bj_time[1];dz_time[5][2]=bj_time[2];temp[5]=temp2&temp[4];break;}case6:{dz_time[6][0]=bj_time[0];dz_time[6][1]=bj_time[1];dz_time[6][2]=bj_time[2];90 temp[6]=temp2&temp[5];break;}case7:{dz_time[7][0]=bj_time[0];dz_time[7][1]=bj_time[1];dz_time[7][2]=bj_time[2];temp[7]=temp2&temp[6];break;}default:break;}}if(K==8){beep();switch(n){case0:{dz_time[0][0]=bj_time[0];dz_time[0][1]=bj_time[1];dz_time[0][2]=bj_time[2];temp[0]=temp2;break;}case1:{90 dz_time[1][0]=bj_time[0];dz_time[1][1]=bj_time[1];dz_time[1][2]=bj_time[2];temp[1]=(~temp2)|temp[0];break;}case2:{dz_time[2][0]=bj_time[0];dz_time[2][1]=bj_time[1];dz_time[2][2]=bj_time[2];temp[2]=(~temp2)|temp[1];break;}case3:{dz_time[3][0]=bj_time[0];dz_time[3][1]=bj_time[1];dz_time[3][2]=bj_time[2];temp[3]=(~temp2)|temp[2];break;}case4:{dz_time[4][0]=bj_time[0];dz_time[4][1]=bj_time[1];dz_time[4][2]=bj_time[2];temp[4]=(~temp2)|temp[3];break;}90 case5:{dz_time[5][0]=bj_time[0];dz_time[5][1]=bj_time[1];dz_time[5][2]=bj_time[2];temp[5]=(~temp2)|temp[4];break;}case6:{dz_time[6][0]=bj_time[0];dz_time[6][1]=bj_time[1];dz_time[6][2]=bj_time[2];temp[6]=(~temp2)|temp[5];break;}case7:{dz_time[7][0]=bj_time[0];dz_time[7][1]=bj_time[1];dz_time[7][2]=bj_time[2];temp[7]=(~temp2)|temp[6];break;}default:break;}}K=Yes();90 if(K==5){beep();cs=0x00;break;}}}/***************************************************************************函数名称:main函数功能:主函数,调用相关函数,实现时间校准、动作时间设定、动作次第与动作性质设定等功能参数介绍:无返回值:无注意事项:无************************************************************************/voidmain(){HC595(0xFF);P2=0xff;P3=0x87;P1=0xff;cs=0x00;BEEP=0x01;time0_init();lcd_init();//初始化LCDlcd_write_str(0x80,str1);//液晶显示提示信息lcd_write_str(0xc0,str2);//液晶显示提示信息90 init_ds1302();//初始化DS1302writetab();//自定义字符写入CGRAMdelay(10);while(1){K=Yes();if((K==0)&&flag){write_ds1302(0x8e,0x00);write_ds1302(0x80,0x80);write_ds1302(0x8e,0x80);beep();year=1;count=((init[6]&0xf0)>>4)*10+(init[6]&0x0f);}while(year){key_set(99,1,1);K=Yes();if(K==2){Set_W1302(0x8c);Set_place(1,1);year=0;month=1;count=((init[4]&0xf0)>>4)*10+(init[4]&0x0f);}}while(month){90 key_set(12,1,4);K=Yes();if(K==2){Set_W1302(0x88);Set_place(1,4);month=0;day=1;count=((init[3]&0xf0)>>4)*10+(init[3]&0x0f);}}while(day){key_set(31,1,7);K=Yes();if(K==2){Set_W1302(0x86);Set_place(1,7);day=0;week=1;count=init[5]&0x0f;}}while(week){K=Yes();if(K==3){beep();90 if(count!=7)count++;elsecount=1;}if(K==4){beep();if(count!=1)count--;elsecount=7;}init1[1]=count%10;if(flag){write_position(1,15);lcd_wdat(init1[1]+0x30);}else{write_position(1,15);lcd_wdat(0x20);}K=Yes();if(K==2){Set_W1302(0x8a);write_position(1,15);lcd_wdat(init1[1]+0x30);90 week=0;hour=1;count=((init[2]&0xf0)>>4)*10+(init[2]&0x0f);}}while(hour){key_set(23,2,7);K=Yes();if(K==2){Set_W1302(0x84);Set_place(2,7);hour=0;min=1;count=((init[1]&0xf0)>>4)*10+(init[1]&0x0f);}}while(min){key_set(59,2,10);K=Yes();if(K==2){Set_W1302(0x82);Set_place(2,10);min=0;sec=1;count=((init[0]&0xf0)>>4)*10+(init[0]&0x0f);}90 }while(sec){key_set(59,2,13);K=Yes();if(K==5){Set_W1302(0x80);Set_place(2,13);sec=0;count=0;}}K=Yes();if(K==1){alarm_time();if(alarm_flag);{write_position(2,16);lcd_wdat(0x00);}}K=Yes();if(K==6)dotime=Load_switch();K=Yes();90 if(K==7)Get_times(dotime);Play_nowtime();Time_compare();}}90 附录D原理图90'