




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东农工商职业技术学院毕业论文(设计)题 目 智能控制玩具小车 姓 名 专 业 电气自动化技术 年级班级 学 号 指导教师 完成日期 摘要根据近年来全球玩具销量增幅与全球平均gdp增幅大致相当。而全球玩具市场的内在结构比重却发生了重大变化:传统玩具的市场在逐步缩水,高科技含量的电子玩具则蒸蒸日上。美国玩具市场的高科技电子玩具的年销售量2004年较2003年增长52%,而传统玩具的年销售额仅增长3%。英国玩具零售商协会选出的2001年圣诞最受欢迎的十大玩具中,有7款玩具配有电子元件。从这些数字可以看出,高科技含量的电子互动式玩具已经成为玩具行业发展的主流。本设计一个具有障碍检测、字符显示功能的智能遥控小车。该小车对传统的手动遥控做了改进,使之可以实现任意角度转向和以任意速度前进,而不像一般的小车那样只能以固定角度转向和以固定速度前进,因此更加接近真实的车辆。同时还在小车的控制系统中采用红外远程遥控,使控制者可以对小车进行遥控操作,产生相应的操作,而且小车和控制者还具有一定的交互功能。本系统主要完成的功能有:红外线遥控操作、小车速度控制、转向控制、前方障碍检测、声音报警、字符显示等。关键字:红外线遥控 速度控制 转向控制 声音报警 字符显示 目录摘要1目录2智能控制玩具小车3一、系统设计3(一)系统组成3(二)速度控制系统4(三)转向控制系统4(四)检测系统5(五)语音系统6(六)显示系统6(七)遥控系统7(八)“看门狗”设计8二、硬件设计9(一)直流电机驱动9(二)转向控制系统9(三)检测系统硬件设计10(四)语音系统11(五)显示系统12(六)遥控系统13(七)“看门狗”硬件设计14三、软件设计15(一)软件框图16(二)电机控制软件16(三)语音系统19(四)显示软件22(五)红外接收软件25(六)“看门狗”软件设计271. 避免在中断服务子程序中插入喂狗程序段272. 避免在用户应用程序中的局部循环圈内插入喂狗程序段28(七)软件抗干扰技术281.数字滤波技术282.开关量的软件抗干扰技术293.指令冗余技术294.软件陷阱技术29参考文献:30附录:30智能控制玩具小车一、系统设计系统采用intel公司的8052ah进行智能控制。intel公司是第一家出产都是依照intel的8051为最基本的架构,再加上自己一些额外的功能以显示出自己的特色,让用户能依照电路所需,选择最适合的8051单片机去做控制。为方便设计者能随时更换不同厂商的8051,各厂商的单片机引脚大都相同,而且每个引脚的定义也都相同。8052ah具有以下特点:*是一个8位的mcu,与8051完全兼容*4个8位的port,共有32条双向可独立控制的i/o。*有256*8ram*有8k*rom*有3组16b计时器*具有双工工的uart*6个中断源,具有优先权中断架构。 *内部有时钟(clock)振荡器电路(12mhz)。(一)系统组成 系统利用红外传感器进行小车遥控操作通过单片机控制小车电机启动停止,速度调节,转向,由超声波传感器进行了障碍检测,蜂鸣器发出报警声音并能演奏简单音乐,字符型液晶显示模块显示遥控信息和报警。系统组成框图(二)速度控制系统本实例采用直流电机驱动的方式为智能玩具车提供动力。直流电机具有体积小,体格低等优势,常用于各种机械玩具。对直流电机速度的控制有三种方案。*方案一、功率三极管速度控制使用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻r的电流大,发热高,损耗大。*方案二、继电器速度控制采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。*方案三、脉冲宽度调制速度控制(pwm控制)通过脉冲宽度调制的方法实现对小车速度的控制由于调整系统的开关频率较高,公靠电枢电厂的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速范围较宽,可达1/10000左右。这种调速方式还具有调速特性优良、调整平滑、调速范围广,过载能力大,能承受频繁的负载冲击,可以实现频繁的快速启动,制动和反转等优点。因此本实例采用pwm脉宽调制的方法控制直流电机。(三)转向控制系统1. 转向控制两种方案(1) 方案一:普通电机转向控制 采用普通电机转向控制电动机的转向,虽然此种电机的控制很简单,但是其不能实现精确转向(2) 方案二:步进电机转向控制 用步进电机来控制电动车的转向,此方法的优点是转向算法易实现,且能实现具体角度的转向,可靠性较高。 步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,即给一个脉冲,步进电机就转一个角度,因此非常适合单片机控制,在非超载的情况下,电机则转过一个步距角,同时步进电机只有周期性的无累积误差,精确高。 步进电机有两种工作方式:整步方式和半步方式。以步进角1.8四相混合式,步进电机为例,在整步方式下,步进电机每接收一个脉冲旋转1.8,旋转一周则需要200个脉冲;在半步方式下,步进电机每接收一个脉冲旋转0.9,旋转一周则需要400个脉冲。控制步进电机旋转必须按一定时序对步进电机引线输入脉冲,具体的时序可查看步进电机的相关资料。 步进电机在低频工作时,会有振动大、噪声大的缺点。如果细分方式,就能很好的解决这个问题,步进电机的细分控制,从本质上讲是对步进电机励磁绕组中电流的控制,使步进电机内部的合成磁场为均匀的圆形旋转磁场,从而实现步进电机步距角的细分。一般情况下,合成磁场矢量之间的夹角大小决定了步距的大小,步进电机半步工作方式就蕴涵了细分的工作原理。2. 元器件选型 实现细分方式有多种方法,最常用的是脉宽调制式斩波驱动方式,大多数专用的步进电机驱动芯片都采用这种驱动方式,ta8435就是其中一种芯片。为简化单片机对步进电机的控制,我们选用ta8435作为步进电机驱动芯片。ta8435是东芝公司生产的单片机正弦细分二相步进电机驱动专用芯片,该芯片具有以下特点:l 工作电压范围宽(10-40v)l 输出电压可达1.5a(平均)和2.5a(峰值)l 具有整步、半步、1/4细分、1/8细分运行分式可供选择l 采用脉宽调试式斩波驱动方式l 具有正/反转控制功能l 带有复位和使能引脚l 可选择使用单时钟输入或双时钟输入 (四)检测系统 检测系统主要利用传感器实现对车可能发生的碰撞进行检测,并通过语音系统进行报警,并将警告利用显示模块呈现出来。1. 障碍检测方案(1)*方案一 :红外线障碍检测 利用红外线进行测距。采用反射式红外发射/接收装置,该装置向前方发射红外线,当外线碰到物体时,被反射回来,装置的接收部分将被反射回来的红外线转换为电信号,其信号强度与小车距离成正比,因此可利用信号强度作为避障依据。 (2)*方案二:超声波障碍检测超声波是一种在弹性介质中的机械振荡,其频率超过20khz,分横向振荡和纵向振荡两种,超声波可以在气体、液体及固体中传播,其播放速度不同。它有折射和反射现象,且在传播过程中有衰减。利用超声波的特性,可做成各种超声波传感器,结合不同的电器,可以制成超声波仪器及装置。2. 障碍检测方案选择 对比两种方案,超声波障碍检测较红外线障碍检测有更强的抗干扰性能,因此我们选用超声波进行障碍检测。根据实际要求,这里选用气相、窄波束、40khz的超声波换能器。且由于小车避障时不须在很远处发现障碍物,且强度法较易实现,故采用超声波强度法进行避障。(五)语音系统 这里的语音系统主要实现报警等简单的发声功能,因此采用蜂鸣器作为发声器件。 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,主要分为压电式蜂鸣器和电磁式蜂鸣器两类。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5-15v直流工作电压),多谐振荡器起振,输出1.5-2.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。蜂鸣器在电路中常用字母“h”或“ha”表示。(六)显示系统显示系统主要实现对接收的遥控命令以及检测系统的报警信息进行显示。显示系统采用的字符型液晶模块是一种用57点阵形来显示字符的液晶显示器,根据显示容量可以分为1行16个字、2行16个字、2行20个字等,这里主要采用2行20个字的dm-162液晶模块。dm-162液晶模块内部的字符发生器已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,例如大写的英文“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,就能看到字母“a”。dm-162液晶模块内部的控制器共有11条控制指令,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。下面为常用指令及其功能。l 指令1:清显示,指令码01h,光标复位到地址00h位置l 指令2:光标复位,光标返回到地址00hl 指令3:光标和显示模式设置l 指令4:显示开关控制l 指令5:光标或显示移动l 指令6:功能设置命令l 指令7:字符发生器ram地址设置l 指令8:ddram地址设置l 指令9:读忙信号和光标地址l 指令10:写数据l 指令11:读数据 液晶显示模块是一个慢显示器件,所以在执行每条指令一定之前一定要确认模块的忙标志位低电平(不忙),否则此指令失效。(七)遥控系统1. 红外遥控系统通用红外遥控系统由发射和接收两部分组成,应用编/解码专用集成电路芯片来进行控制操作。发射部分包括键盘矩阵、编码调制、led红外发送器;接收部分包括光、电转换放大器、解调、解码电路。2. 遥控发射器及其编码遥控发射器专用芯片很多,这里以运用比较广泛、解码相对容易的ht6221专用芯片为例说明编码原理遥控器将不同的按键编成不同的遥控编码,当发射器的按键按下后,发射器即发出一遥控码,其遥控码具有以下特征采用脉宽调制的串行码:以脉宽为0.56ms、间隔0.56ms、周期1.12ms的组合表示二进制的“0” ;以脉宽为0.56ms、间隔1.68ms、周期2.24ms的组合表示二进制的“1” 。上述“0”和“1”组成的32位二进制码(4个字节)经38khz的载频进行二次调制以提高发射效率,然后通过红外发射二极管产生红外线向空间发射。ht6221产生的遥控编码是连续的32位二进制码组,其中前16为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01h;后十六位为8位操作码(功能码)及其反码。遥控器在按键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms-18ms),高8位地址码(9ms-18ms),8位数据码(9ms-18ms)和这8位的数据反码(9ms-18ms)组成。如果键按下超过108ms仍未松开,接下来的发射的代码(连发代码)将仅由起始码(9ms)结束码(2.5ms)组成。3.接收解调接收解调部分采用1838红外集成接收头。它将红外接收管与放大电路集成在一体,具有体积小(大小与一只中功率三极管相当)、密封性好、灵敏度高、价格低廉等优点。它仅有三条管脚,分别是电源正极、电源负极以及信号输出端,其工作电压在5v左右。只要给它接上电源即是完整的红外接受放大器。其主要功能有放大、选频和解调,要求输入信号是已经被调制的信号。经过它的接收放大和解调会在输出端直接输出原始的信号,而且灵敏度和抗干扰性都非常好。(八)“看门狗”设计 pc受到干扰而失控,引起程序乱飞,也可能使程序陷入“死循环” 。指令技术、软件陷阱技术不能使失控的程序摆脱“死循环”的困境,这时系统完全瘫痪。如果操作者在场,就可以按下人工复位按钮,强制系统复位。但操作者不能一直监视着系统。通常是在引起不良后果之后才进行人工复位。为使程序脱离“死循环” ,通常采用“看门狗技术” 。“看门狗”技术就是不断监视程序循环运行时间,若发现时间超过已知的循环设置时间,则认为系统陷入了“死循环” ,然后强迫程序返回到0000h入口,在0000h处安排一段出错处理程序,使系统运行纳入正规。 “看门狗”技术可由硬件实现,可由软件实现,也可由两者结合实现。本系统采用硬件“看门狗”电路。 实现硬件“看门狗”电路方案较多,目前采用较多的方案有以下几种:l 采用微处理器监控器l 采用单稳态电路来实现“看门狗” ,单稳态电路可采用74ls123l 采用内带振荡器的记数芯片 二、硬件设计 一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如rom、ram、i/o口、定时/记数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择的芯片,设计相应的电路。二是系统外设,既按照系统功能要求配置外围设备,如键盘、显示器、a/d、d/a转换器以及各种驱动电路等,要设计适合的接口电路。(一)直流电机驱动 本系统采用软件产生pwm信号,下图是直流电机驱动的电路图。p1.0、p1.1控制电机进退,二者不能同时为低电平,其输出周期为80ms的调宽方波。三极管的功率视电机电流而定。 直流电机驱动电路图(二)转向控制系统 转向控制系统电路图如下图所示。ta8435为步进电机的控制芯片,引脚m1和m2决定电机的转动方式:m1=0、m2=0,电机按整步方式运转:m1=1,m2=1,电机按8/1步细分方式运转。cw/cww控制电机转动方向。ck1、ck2时钟输入的最大的频率不能超过5khz,控制时钟的频率,即可控制电机转动速率。refin为高电平时,nfa和nfb的输出电压为0.8v,refin为低电平时,nfa和nfb输出电压为0.5v,这2个引脚控制步进电机输入电流,电流大小与nf端外接电阻关系为:io=verf/rnf。r1,r2选用0.8、2w的大功率电阻。步进电机按二相双极性使用,四相按二相使用时可以提高步进电机的输出转矩,d200-d203快恢复二极管用来泄放绕组电流。 转向控制系统电路原理图(三)检测系统硬件设计 超声波障碍检测如下图所示。本设计采用t/r-40-12小型超声波传感器作为探测前方障碍物体的检测元件,其中心频率为40khz脉冲信号驱动超声波传感器发送器发出40khz的脉冲超声波,如电动机前方遇到有障碍物时,此超声波信号被障碍物反射回来,由接收器接收,经lm318两级放大,再经带有锁相环的音频解码芯片lm567解码,当lm567的输入信号大于25mv时,输出端由高电平变为低电平,送8052ah单片机处理。 超声波检测电路原理图(四)语音系统 语音系统采用蜂鸣器作为发声器件,其连接电路图如下图所示 语音系统电路原理图(五)显示系统 显示系统电路原理图如下图所示。dm-162采用标准的14脚接口,其中vss为地电源,vdd接5v正电源,v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10kb的电位器调整对比度。rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。d0d7为8位双向数据线。 显示系统电路原理图(六)遥控系统1. 遥控系统发射硬件设计 遥控系统发射部分被放在遥控器中,其电路原理图如下图所示。 遥控系统发射电路原理图2. 遥控系统接收硬件设计 遥控系统接收解码部分被放置在小车中,其电路原理图如下图所示。注意经过红外集成接收头后,信号被反相,即与发送时的高低电平颠倒。 遥控系统接收电路原理图(七)“看门狗”硬件设计 我们采用内带振荡器的记数芯片cd4060实现看门狗。cd4060是带振荡器的14位计数器,由该芯片构成的看门狗如下图所示,由14位二进制计数器cd4060和三极管q700、q701等组成 看门狗电路图 单片机的p3.6口设计成输出口,由8052ah的cpu向看门狗电路发送喂狗信号正脉冲,在两个正脉冲间隔内,p3.6保持为低电平(此功能要结合软件才能实现,相应的软件设计在下面介绍)。单片机8052ah的i/o口带灌电流负载的能力比较大,每个引脚低电平时的吸入电流为20ma,带拉电流负载的能力却很小,实测情况是,每个引脚高电平时的输出电流仅25ua,现在p3.6口被设计成带拉电流负载的方式,为了提高p3.6口带拉电流负载的能力,所以电路中设置了上拉电阻r700。 14位二进制计数器cd4060的计数脉冲由其内部振荡器和外接阻容元件r702、r704、c700的电路产生,振荡周期为: t0sc=2.2r702c700=0.22ms 振荡器产生的计数脉冲(矩形波)可以直接引出,同时还可以从cd4060的10个输出端q4-q10和q12-q14得到不同分频系数的方波输出。这样,如果cd4060得不到cpu通过p3.6口发送来的喂狗信号正脉冲,则cd4060的输出端q14在1.8s内将产生一个完整周期的方波信号,而且低电平在前,高电平在后,其高电平经三极管q700、q701处理后形成单片机8052ah的复位信号,使单片机8052ah复位。由此可见,单片机8052ah正常工作时,只要在0.9s内从p3.6口送出一个正脉冲,便可及时清零看门狗,输出端q14就不会产生定时溢出信号,从而使看门狗电路对单片机系统不起作用。并且,从cd4060的10个输出端q4q10和q12q14可以得到不同周期的方波信号,经三极管q700、q701处理后形成单片机系统的复位信号,可以适应不同用户应用程序,从而使硬件看门狗电路可以适应不同的单片机应用系统。对mcs-51系列的单片机而言,他所需要的复位信号时高电平宽度大于2个机器周期的正脉冲,例如,单片机的时钟脉冲频率为12mhz时,则所需要的复位信号高电平宽度为2us以上就可以了,而由此可知,cd4060的q14输出的是高电平宽度为0.9s以上的方波,如果让它直接作为单片机的复位信号,则单片机的复位时间势必在0.9s以上,这样尽管可以使程序跑飞的单片机复位,但是显然没有做到尽快地引导跑飞的程序到正确的轨道来,如果这样做的话,对于某些单片机应用系统而言可能带来非常严重的后果。图22.12中的三极管q700、q701及其周围阻容元件构成波形转换电路,把较宽的正脉冲变换为较窄的正脉冲,从而较好地解决了上述问题。三极管q700、q701构成的2级直接耦合放大器作为缓冲器使用,它是cd4060的输出端q14的灌电流负载,c701、r705是微分电路。经分析后不难看出,电路中的r707、r705、r701还具有单片机上复位的功能。cpu必须在正确完成所有工作后才能发扫描输入信号,且程序中发扫描输入信号的地方不能太多。否则,在哪里有死循环,看门狗就不产生记满输出信号,不能重新启动cpu。cd4060的记满输出信号不但要接到单片机的rst脚,而且还应接到其他芯片的rst脚,因为程序乱飞后,其他具有rst脚的芯片也混乱了,必须全部复位。 三、软件设计 在进行单片机控制系统设计时,除了系统硬件设计外,大量的工作就是如何设计和调试应用程序。因此,软件设计设计中占重要位置。在单片机控制系统中,大体上可分为数据处理、过程控制两个类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是是单片机按一定的方法进行计算,然后再输出,以便控制生产。为了完成上述任务,在进行软件设计时,通常把整个过程分成若干部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。模块程序设计法的主要优点是:单个模块比起一个完整的程序易编写及调试;模块可以共存,一个模块可以被多个任务在不同条件下调用;模块程序允许分割任务和利用已有程序,为设计者提供方便。本系统软件采用模块化结构,由主程序、电机控制软件、转向控制软件、检测软件、语音软件、显示软件、红外接收软件构成。(一)软件框图软件由命令队列模块、命令执行模块、红外接收模块、障碍检测模块、速度控制模块、转向控制模块、语音软件、显示软件组成。红外接收模块将接收到的信息以及障碍检测模块将检测到的报警信号组装成命令的形式,加入到命令队列中,主程序由命令队列取出一命令并调用解释执行模块执行命令,解释执行模块根据命令的需要调用对应的速度控制模块、转向控制模块、语音软件、显示软件。(二)电机控制软件 由软件产生脉冲宽度调制(pwm),周期为80ms,每个周期内0与1的占空分成8档。 具有的设计为:将t0设计10ms的定时中断,变量time记录一个pwm周期(80ms)内所需要的定时中断个数,变量cpwm_1记录80ms内高电平所需要的定时中断个数,每中断一次,当cpwm_1非零时,输出高电平;当cpwm_1为零时,输出低电平;且cpwm_time与cpwm_1减一,cpwm_time为零时 ,cpwm_time与cpwm_1重新置为初值。对电机的速度和方向控制只需调用函数setmotionspeed()和setmotiondirection()。具体的程序如下:sbit cpwm_runforword=p10;sbit cpwm_runback=p11;unsigned char data cpwm_time;unsigned char data cpwm_1;unsigned char data cpwm_speed;bit bmotionrunforword;/t0计数周期为10ms#define t0timerh 0xd8#define t0timerl 0xf0#define pwm_timeinit 0x08/初始化直流电机控制void initialmotionctrl(void) cpwm_time=pwm_timeinit; cpwm_1=0; cpwm_speed=0;bmotionrunforword=1; tr0=0; th0=t0timerh; tl0=t0timerl; tr0=1; et0=1; void setmotionspeed(unsigned char cspeed) cpwm_speed=cspeed; void setmontiondirection(bit bforword) bmotionrunforword=bforword; void motiondrive(bit bstop)if(bstop) /全部输出1,则电机停止转动 cpwm_runforword=1; cpwm_runback=1; else if(bmotionrunforword) cpwm_runback=1; cpwm_runrorword=0; else cpwm_runforword=1; cpwm_runback=0; void t0countint(void)interrupt 1 tr=0; th0=t0timerh; th0=t0thmerl; if(cpwm_1) motiondrive(1); cpwm_1-; else (motiondrive(0); cpwm_time-; if(cpwm_time=0); cpwm_time=pwm_timeinit; cpwm_1=cpwm_speed; tr0=1; (三)语音系统该语音软件的功能是播放两首简单的音乐:生日快乐和三轮车,播放时只需调用函数music()。具体的程序如下:/number=1 为生日快乐?,number2=为三轮车,void music(unsigned char number)unsigned int k,n;unsigned int soundlong, soundtone;unsigned int i,j,m;for(k=0;k=57)i=0;for(k=0;k=75)j=0;doif(i=75)i=0;if(j=75)j=0;soundlong=soundlongi;soundtone=soundtonej;i+;j+;for(n=0;nsoundlong;n+)for(k=0;k12;k+)p_3=0;for(m=0;msoundtone/2;m+);p3_4=1;for(m=0;msoundtone/2;m+);delay50us(6);:while(soundlongi!=0)|(soundtonej!=0);/延时程序void delay10ms(unsigned char time)unsigned char a,b,c;for(a=0;atime;a+)for(b=0;b10;b+)for(c=0;c120;c+);void delay50us(unsigned char time)unsigned char a,b;for(a=0;atime;a+)for(b=0;b6;b+);unsigned char code soundlong=9,3,12,12,24,9,3,12,12,24, 9,3,12,12,12,12, 9,3,12,12,24,0,/生日快乐end 6,6,9,3,6,6,12, 6,6,6,6,6,6,12, 6,6,9,3,6,6,9,3, 6,3,3,6,3,3,6,6?,0/三轮车end ; unsigned char code soundtone= 212,212,190,212,159,169, 212,212,190,212,142,159, 212,212,106,126,159,169,190, 119,119,126,159,142,159, 0,/生日快乐end 239,239,212,189,159,159,189, 159,159,142,126,120,120,159, 120,120,142,159,189,142,159,189, 239,212,189,159,142,159,189,212,239, 0/三轮车end ;(四)显示软件 液晶模块内部控制器的读写操作、屏幕和光标的操作都是通过指令编程来实现的,具体的操作过程参看前面显示系统的设计。以下为显示函数:/port definitionssbit lcdrs=p33;sbit lcdrw=p31;sbit lcden=p37;sfr dbpport=0x80; /p0?0x80数据端口/内部等待函数unsigned char lcdlcdrs=0;lcdrw=1;_nop_();lcden=1;_nop_();while(dbport&0xb0);lcden=0;return dbport;/向lcd写入命令或数据#define lcd_command 0 /command#define lcd_data 1 /data#define lcd_clear_screen 0x01 /清屏#define lcd_homing 0x02 /光标返回原点void lcd_write(bit style,unsigned char input)lcden=0;lcdrs=style;lcdrw=0; _nop_()dbport=input; _nop_()lcden=1; _nop_()lcden=0; _nop_()lcd_wait();/设置显示模式#define lcd_show 0x04 /显示开#define lcd_hide 0x00 /显示关#define lcd_cursor 0x02 /显示光标#define lcd_no_cursor 0x00 /无光标#define lcd_flash 0x01 /光标闪动#define lcd_no_flash 0x00 /光标不闪动void lcd_setdisplay(unsigned char display mode) lcd_write(lcd_command,0x80|displaymode); /设置输入模式 #define lcd_ac_up 0x02 #define lcd_ac_down 0x00 /default #define lcd_move 0x01 /画面可平移 #define lcd_move 0x00 /default void lcd_setinput(unsigned char inputmnputmode) lcd_write(lcd_command,0x04|inputmode); /移动光标或屏幕#define lcd_cursor 0x02#define lcd_screen 0x08#define lcd_left 0x00#define lcd_right 0x04void lcd_move(unsigned char object,unsigned char derection)if(object=lcd_cursor)lcd_write(lcd_command,0x10|direction);if(object=lcd_command,0x18|direction);/初始化lcdvoid lcd_initial()lcden=0;lcd_write(lcd_command,0x38);lcd_write(lcd_command,0x38);lcd_setdisplay(lcd_show|lcd_no_cursor);lcd_write(lcd_command,lcd_clear_screen);lcd_sstinput(lcd_ac_up|lcd_no_move);void gotoxy(unsigned char x,unsigned chary)if(y=0)lcd_write(lcd_command,0x80|x);if(y=1)lcd_write(lcd_command,0x80|(x-0x40);void print(unsigned char *str) while(*str!=0) lcd_write (lcd_data,*str) str+; (五)红外接收软件解码的关键是如何识别0和1,从位的定义可以发现0、1均以0.56ms的低电平开始,不同的是高电平的宽度不同,0为0.56ms,以后若读到的电平为低,说明该位为0,反之则为1。为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为0,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。根据码的格式,应该等待9ms的起始和4.5ms的结果码完成后才能读码。 #define uint8 unsigned char#define uint16 unsigned char#define uint32 unsigned longuint8 ircommanddata;uint8 da4=0,0,0,0;uint8 table18=0x28,0x7e,0xa2,0x62.0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa7,0x26,0xa1,0xb1,0x34,0xab;sbit ir=p33;void delay(uint16 cnt)while(-cnt);void d870us(void)delay(108); /12mvoid d1000us(void)delay(125);/12mvoid d1740us(void)delay(593);12m/-/ht6221解码程序uint8 irdecode(void)uint8 i,m,n;for(i=0;i10;i+)d870us();if(ir)goto exit;while(ir);d4740us();/开始解码for(m=0;m4;m+)for(n=0;n1;dam=dam|0x80;elsedaam=daam1;daam=daam|0; / while(ir); / while(!ir); if(da0=0x0)&(da1=0xff) if(da2=(da3) return da2; exit: return 0; (六)“看门狗”软件设计单片机应用系统运行正常时,单片机的cpu应在0.9秒内从p3.6口送出一个正脉冲,使看门狗及时清零,也就是说,cpu要在0.9s以内执行一次下面的喂狗程序。喂狗程序段插入到用户应用程序之中。单片机系统的用户应用程序一般由循环结构的主程序和中断服务子程序组成。首先,应尽可能准确地估算个应用功能模块的运行时间,估算运行时间的时候,应考虑程序可能被中断,应把中断程序的运行时间也计算在内。然后,在若干个应用功能模块的运行时间小于0.9s的两个应用功能模块之间插入上面的喂狗程序段。为了防止看门狗非正常失效(已发生程序跑飞但看门狗不产生单片机所需要的复位信号),在用户应用程序中插入喂狗程序时应注意下面两点。 1. 避免在中断服务子程序中插入喂狗程序段 当mcu受干扰而发生程序跑飞,只要mcu片内中断允许控制寄存器不遭破坏,则不论程序飞到什么地方,cpu仍能像程序正常运行时一样响应和执行中断服务子程序。因此,在各中断服务子程序中都不应该插入喂狗程序段。2. 避免在用户应用程序中的局部循环圈内插入喂狗程序段 这样,即使程序跑飞后非正常进入该循环圈内,并且跑飞后的程序在该循环圈内“死循环” ,也会因为看门狗接收不到信号,发生看门狗定时计数溢出,进而使系统恢复正常运行。 喂狗程序具体如下: void feedwatchdog(void) #pragma asm setb p3.6 nop nop clr 3.6 #pragma endasm (七)软件抗干扰技术提高玩具车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰。在单片机控制系统中国,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑将大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、开关量的软件抗干扰技术、指令冗余技术、软件陷阱技术等。1.数字滤波技术 一般单片机应用系统的模拟输入信号中,均含有种种噪音和干扰,他们来自被测量本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪音和干扰。对于这类信号,采用积分时间等于20ms的整数倍的双积分a/d 转换器,可有效消除其影响。后者为随机信号,他不是周期信号。对于随机干扰,可以用数字滤波的方法予以消弱或滤除。所谓数字滤波,就是通过一定的计算或者判断程序减少干扰在有用信号中的比重。故实质上他是一种程序滤波。数字滤波克服了模拟器的不足,它与模拟滤波器相比,有以下几个优点:l 数字滤波是用程序实现的,他不需要增加硬件设备,所以可靠性高,稳定性好。l 数字滤波可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便,功能强的特点。l 数字滤波可以对频率很低的信号实现滤波,克服了模拟滤波器的缺陷。数字滤波器具有以上优点,多以数字滤波在微机应用中得到了广泛应用。2.开关量的软件抗干扰技术 干扰信号多呈毛刺状,作用时间短,利用这一点,在采集某一开关信号量时,可多次重复采集,知道连续两次或两次以上结果完成一致方为有效。若多次采样后,信号总是变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机应用测试基础考试题及答案
- 公务员突发风险防控面试题及答案
- C类IP地址范围识别考试题及答案
- 电容器制造工适应性考核试卷及答案
- 客运车辆驾驶员内部技能考核试卷及答案
- 浆丝机操作工主管竞选考核试卷及答案
- 气瓶充装工基础考核试卷及答案
- 种子繁育员工艺考核试卷及答案
- 桥梁巡视养护工设备维护与保养考核试卷及答案
- 多工序数控机床操作调整工技能比武考核试卷及答案
- 2025+CSCO结直肠癌诊疗指南解读
- 儿童体态课件
- 食堂从业人员培训内容
- 针灸学练习题库含答案
- 悟空识字1-300(带拼音)-可打印
- 建筑工程项目咨询报告范文
- DB37-T 5155-2025 公共建筑节能设计标准
- 小学信息科技课标试题及答案
- 2024版酷家乐课件
- 教师消防培训课件
- 税务停业申请书
评论
0/150
提交评论