大学毕业论文__单片机控制步进电机_汇编程序.doc
毕业论文题 目: 简易步进电机微机控制装置 步进电机智能控制系统摘要 本毕业设计的内容是利用计算机软件(上位机)与单片机(下位机)的串口通信,达到上位机控制下位机实现步进电机的启动、停止、正转、反转、加速、减速和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用屏幕LCM显示增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。关键字:步进电机、液晶显示、单片机、串口通信 目 录步进电机智能控制系统2摘要2关键字2引言4第一章 步进电机与驱动电路51.1 什么是步进电机51.2 步进电机的种类51.3 步进电机的特点51.4 步进电机的原理51.5 步进电机的驱动6第二章 方案设计与论证72.1控制系统电路设计72.2键盘设计92.3显示电路设计92.4驱动电路设计9第三章 电路设计103.1系统电路图错误!未定义书签。3.2器件资料12第四章 系统软件设计144.1程序流程图144.2程序设计14第五章 调试总结145.1操作控制155.2设计过程中遇到的主要问题以及解决办法155.3 心得体会155.4致谢语16第六章附录16附录一:词语解释166.1什么是保持转矩(HOLDING TORQUE)156.2什么是DETENT TORQUE166.3步进电机温度过高会不会使电机的磁性材料退磁176.4为什么步进电机的力矩会随转速的升高而下降17附录二:引用文献17附录三:原程序18引言上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区别,也是依靠气隙磁导的变化来产生电磁转矩。在本世纪初,由于资本主义列强争夺殖民地,造船工业发展很快,同时也使得步进电动机的技术得到了长足的进步。到了80年代后,由于廉价的微型计算机以多功能的姿态出现,步进电动机的控制方式更加灵活多样。原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。现在的步进电机广泛应用在生产实践的各个领域。它最大的应用是在数控机床的制造中,因为步进电机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以被认为是理想的数控机床的执行元件。早期的步进电机输出转矩比较小,无法满足需要,在使用中和液压扭矩放大器一同组成液压脉冲马达。随着步进电动机技术的发展,步进电动机已经能够单独在系统上进行使用,成为了不可替代的执行元件。步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,即当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。其优点是结构简单、运行可靠、控制方便。尤其是步距值不受电压、温度的变化的影响、误差不会长期积累,这给实际的应用带来了很大的方便。比如步进电动机用作数控铣床进给伺服机构的驱动电动机,在这个应用中,步进电动机可以同时完成两个工作,其一是传递转矩,其二是传递信息。步进电机也可以作为数控蜗杆砂轮磨边机同步系统的驱动电动机。除了在数控机床上的应用,步进电机也可以并用在其他的机械上,比如作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。计算机通过软件来控制步进电机,更好地挖掘出电动机的潜力。因此,用计算机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。第一章 步进电机与驱动电路1.1 什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。1.2 步进电机的种类步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。1.3 步进电机的特点1精度高 一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反 转控制及制动等,这是步进电动机最突出的优点2过载性好 其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合;3控制方便 步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;4整机结构简单 传统的机械速度和位置控制结构比较复杂,调整困难,使用步进电机后,使得整机的结构变得简单和紧凑。1.4 步进电机的原理图1是一种四相可变磁阻型的步进电机结构示意图。这种电机定子上有八个凸齿,每一个齿上有一个线圈。线圈绕组的连接方式,是对称齿上的两个线圈进行反相连接,如图中所示。八个齿构成四对,所以称为四相步进电机。图1 它的工作过程是这样的:当有一相绕组被激励时,磁通从正相齿,经过软铁芯的转子,并以最短的路径流向负相齿,而其他六个凸齿并无磁通。为使磁通路径最短,在磁场力的作用下,转子被强迫移动,使最近的一对齿与被激励的一相对准。在图1(a)中A相是被激励,转子上大箭头所指向的那个齿,与正向的A齿对准。从这个位置再对B相进行激励,如图1中的(b),转子向反时针转过15°。若是D相被激励,如图1中的(c),则转子为顺时针转过15°。下一步是C相被激励。因为C相有两种可能性:ABCD或ADCB。一种为反时针转动;另一种为顺时针转动。但每步都使转子转动15°。电机步长(步距角)是步进电机的主要性能指标之一,不同的应用场合,对步长大小的要求不同。改变控制绕组数(相数)或极数(转子齿数),可以改变步长的大小。它们之间的相互关系,可由下式计算:L360 P×N式中:L为步长;P为相数;N为转子齿数。在图1中,步长为15°,表示电机转一圈需要24步。1.5 步进电机的驱动 混和步进电机的工作原理 在实际应用中,最流行的还是混和型的步进电机。但工作原理与图1所示的可变磁阻型同步电机相同。但结构上稍有不同。例如它的转子嵌有永磁铁。激励磁通平行于X轴。一般来说,这类电机具有四相绕组,有八个独立的引线终端,如图2a所示。或者接成两个三端形式,如图2b所示。每相用双极性晶体管驱动,并且连接的极性要正确。图3所示的电路为四相混和型步进电机晶体管驱动电路的基本方式。它的驱动电压是固定的。表1列出了全部步进开关的逻辑时序。步数Q1Q2Q3Q41101021001301014011051010表1第二章 方案设计与论证2.1控制系统电路设计本设计是利用计算机软件(上位机)与单片机(下位机)的串口通信,达到上位机控制下位机实现步进电机的启动、停止、正转、反转、加速、减速和状态显示的目的。下位机系统框图如图2.11所示:时钟和复位电路计算机(上位机)(下位机)单片机驱动电路液晶显示步进电机键盘图2.11 其中计算机(上位机)模块的界面如图2.12所示: 图2.12计算机模块设计的原理是: 当电机启动按钮时,步进电机根据制定的状态开始转动,其状态可根据正反转按钮进行切换,并且可通过加减速按钮对步进电机的速度进行适当的调节,必要时还可在计算机模块的软件界面对步进电机的速度进行显示。下位机模块设计的原理:步进电机的控制可以用硬件,也可以用软件通过单片机实现。硬件方法是采用脉冲分配器芯片进行通用换相控制;而软件方法是用单片机产生控制脉冲来控制步进电机的运行状态,这种方法可简化电路,降低成本。因此这边我们选用软件的方法,即利用单片机定时中断的方法实现电机的正反转。由于单片机的驱动电流一般都比较小,不能直接驱动电机工作,所以单片机的I/O输出必须接驱动电路,才能控制电机工作。必要时还可以通过液晶显示模块来显示步进电机的状态(正转显示为“zhengzhuan”, 反转显示为“fanzhuan”)。2.2键盘设计该系统中只运用到五个控制按钮,即 “暂停”,“加速”,“减速”,“启动-正转”,“启动-反转”,由于按钮较少,所以采用独立键电路,这种按键电路的按键结构相对行列式按键电路更简单,更使人易懂。2.3显示电路设计方案一:如图2.31,采用LED数码管动态显示数据与个项参数,方法简单,容易控制,成本低。缺点:耗电量大,显示内容单一,不适合本电路使用。方案二:如图2.32,采用LCM 液晶显示屏显示数据与个项参数,技术成熟,显示内容直观,校果好;因此选用本方案。P00P01P02P03P04P05P06P07P25P26P27AT89S51MCUP24IN 1IN 2IN 3IN 4OUT 4OUT 3OUT 2OUT 1ULM2003abfcgdeLED1aabbcfdcegfdgeabfcgdeabfcgdehLED2LED3LED4hhhh P00P01P02P03P04P05P06P07P25P26P27AT89S51MCURSR/WED0D1D2D3D4D5D6D7LCM图2.31 图2.322.4驱动电路设计驱动电路可分为:三极管直接驱动(图3),采用斩波恒流驱动方式(图2.41)和芯片驱动电路等。驱动电路的性能直接关系到步进电机走步的准确与稳定。本电路采用驱动芯片ULN2803。ULN2803是一种大电流高电压型器件,外电路简单(图2.42)。图2.41图2.42第三章 电路设计3.1、设计要点和软硬环境错误!未找到索引项。1、步进电机的设计要点和软硬件环境步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。即步进电机是将电脉冲信号转换为机械角位移的执行元件。步进电机的控制可以用硬件,也可以用软件通过单片机实现。硬件方法是采用脉冲分配器芯片进行通用换相控制;而软件方法是用单片机产生控制脉冲来控制步进电机的运行状态,这种方法可简化电路,降低成本。在用软件控制时,主要设计要点如下:l 判断旋转方向;l 按相序确定控制字;l 按顺序输入控制字;l 确定控制步数和每一步的延时时间。由于单片机的驱动电流一般都比较小,不能直接驱动电机工作,所以单片机的I/O口输出必须接驱动电路,即功率驱动,才得以控制电机正常工作。控制框图如下图所示:控制按钮单片机AT89S51功率驱动步进电机液晶显示模块(2)、上位机的主要设计要点 上位机的主要设计要点:l 运用VB开发软件绘制一个控制界面;l 通过VB软件编程,使得每个按钮输出指定的信号;l 借助虚拟串口软件和串口调试助手软件,进行在线调试;l 和步进电机结合进行调试。(3)、相关参数设定: 这里采用四相六线步进电机,这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成。其相序A-AB-B-BC-C-CD-D-DA。所以其正转控制脉冲为:01h,09h,08h,0ch,04h,06h,02h,03h,00h;反转控制脉冲为:01h,03h,02h,06h,04h,0ch,08h,09h,00h。单片机的晶振为12MHZ;(4)、系统电路图: 一、单片机最小系统的硬件原理接线图:1、 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF2、 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF3、 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理4、 接配置:EA(PIN31)。说明原因。二、单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)1、 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)3、 一个串行通信接口;(SCON,SBUF)4、 一个中断控制器;(IE,IP)根据以上的方案比较与论证确定总体方案,确定硬件原理图。原理图如下:图103.2主要器件资料AT89S51单片机AT89S51是美国 ATMEL 公司生产的低功耗、高性能 CMOS 8 位单片机,片内含 8k bytes 的可系统编程的 Flash 只读程序 存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。它集 Flash 程序存储器 既可在线编程(ISP)也可用传统方法进行编程及通用 8 位微处理器于单片芯片中,ATMEL 公司的功能强大,低价位 AT89S51 单片机可以提供许多高性价比的应用场合,可灵活应用于各种控制领域。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程Flash,使得 AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。89S51相对于89C51增加的新功能包括: 1、 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低! 2、ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。 3、最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。 4、 具有双工UART串行通道。 5、 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。 6、双数据指示器。 7、 电源关闭标识。 8、 全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。 9、兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。 10、比较结果:就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。 ULN2803步进电机控制器ULN2803是一种大电流型高电压器件 ,步进电机控制器。内部电路如图11图11第四章 系统软件设计4.1程序流程图4.1电机是否工作正反转显示正转显示反转是否停机是否停机处理电机速度处理电机速度停机返回开始显示清零NYN N反转正转YYY开始始程序初使化串口是否发送数据调用子程序结束 图4.14.2程序设计根据要求,可以将程序分为以下几个部份:(1) 键盘输入程序设计 本系统使用的键盘较少,因此采用独立式键盘接口设计。独立式键盘适用于按键数量较少的场合。独立键盘工作原理:通过上拉电阻接到+5V上。无按键,处于高电平状态,有键按下电平为低。在消除抖动影响上是可以采用了软件消抖方法:在第一次检测到有键按下时,执行一段延时子程序后(约10ms),再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。 (2) 步进电机运行步数控制程序 此方案采用单相和双相交差通电处理方式。此方法具有运行速度稳定,运行步数准确无误等优点。第五章 调试总结5.1操作控制:本电路经调试符合题目要求,各项技术指标均达到设计的目的。具体操作控制方法如下:1、当电机启动按钮时,步进电机根据制定默认状态(正转)开始转动;2、当电机停止按钮时,步进电机停止转动;3、当电机加速按钮时,步进电机速度快速转动;4、当电机减速按钮时,步进电机速度缓慢转动;5、当电机反转按钮时,步进电机反转;6、当电机正转按钮时,步进电机正转;7、当电机退出按钮时,控制界面关闭。5.2 设计过程中遇到的主要问题以及解决办法1、起初液晶显示模块LCM的RS脚,RW脚,E脚和按钮模块的按钮共用P2口,在调试时,调用液晶显示时,会出现混乱,即整个控制不能正常工作,最后分离P2口,让液晶显示模块LCM的RS脚,RW脚,E脚接至P0口,这样则避免了混乱的情况。2、步进电机在仿真调试的时候,出现往返转的情况,即不能正常转动,PROTEUS中的步进电机MOTOR -STEPPER,不知道具体型号,即不知道其内部接线结构,经过反复的调试,才得以解决问题。在仿真调试成功的前提下,进行硬件调试的时候,出现步进电机不转的情况,这是因为仿真的步进电机和硬件的步进电机是两个不同的型号,不同步进电机所允许的最快转动速率是不同的,在设置延时程序的时间参数时,一旦超过此值,电机就不能启动。所以硬件调试时,需要重新设置延时程序的时间参数,问题才得以解决。3、 液晶和单片机接在一起烧写程序时,在检测器件的时候,会提示检测不到器件,使得程序无法正常烧写到单片机里面去,只有先断开液晶显示模块与单片机的连接,才能把总程序烧写进去,然后再重新连接单片机和液晶显示模块即可。5.3 心得体会步进电机的控制可以用硬件,也可以用软件通过单片机实现。本系统采用了软件方法,即用单片机产生控制脉冲来控制步进电机的运行状态,这种方比采用硬件方法,即采用脉冲分配器芯片进行通用换相控制,电路更加简单,成本更低。目前在大多工厂或公司的数控机床在使用步进电机的制造中,还未能实现智能化的系统控制,所以现在用计算机控制步进电机,使其智能化已经成为了一种必然的趋势,也符合数字化的时代趋势。 在做本次设计的过程中,我感触最深的当属查阅大量的设计了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的。在这次课程设计中,我们运用到了以前所学的专业课知识,如:汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。设计结束了,但是从中得到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。此次设计更锻炼了我的毅力,我觉得做任何事情要善始善终,不要中途放弃,只要自己认真的去对待,再难的问题也能找到办法解决。最后感谢指导老师在我们遇到困难时,给予我们的建议与鼓励。5.4 致谢语第六章附录附录一:词语解释6.1什么是保持转矩(HOLDING TORQUE) 保持转矩(HOLDING TORQUE)是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成为了衡量步进电机最重要的参数之一。比如,当人们说2N.m的步进电机,在没有特殊说明的情况下是指保持转矩为2N.m的步进电机。6.2什么是DETENT TORQUE DETENT TORQUE 是指步进电机没有通电的情况下,定子锁住转子的力矩。DETENT TORQUE 在国内没有统一的翻译方式,容易使大家产生误解;由于反应式步进电机的转子不是永磁材料,所以它没有DETENT TORQUE。6.3步进电机温度过高会不会使电机的磁性材料退磁步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。6.4为什么步进电机的力矩会随转速的升高而下降 当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。附录二:引用文献1 何丽民,单片机初级教程,北京航空航天大学出版社;2 沙占友,王彦朋,孟志永,单片机外围电路设计,电子工业出版社;3 童诗白,华成英,模拟电子技术基础,北京高等教育出版社;4 康华光,陈大钦,电子技术基础,北京高等教育出版社;5 黄继昌,张海贵,郭继忠,实用单元电路及其应用,人民邮电出社;6 谢宜仁,单片机实用技术问答,人民邮电出版社;7 张迎新 单片机初级教程单片机基础,北京航空航天大22附录三:原程序lcdrs bit p1.0;lcdrs=1选择数据寄存器,lcdrs=0选择指令寄存器lcdrw bit p1.1;lcdrw=1选择读操作,lcdrw=0选择写操作lcdep bit p1.2;ldep由1->0时,液晶模块执行命令k1 equ p3.2;控制电机正转k2 equ p3.3;控制电机反转k3 equ p3.4;控制电机停止k4 equ p2.7;控制传感器ys1 equ 32h;控制电机定时停止ys2 equ 33h;控制电机定时停止org 0hljmp mainorg 0bhljmp t0dsorg 30hstart: mov sp,#5fhmov p0,#0ffhmov p1,#0ffhmov p2,#0ffh mov p3,#0ffhmov 30h,#00mov 31h,#00main:mov ys1,#22mov ys2,#40jnb k1,keyf1;按键子程序jnb k2,keyf2jnb k3,keyf3jnb k4,keyf4sjmp startkeyf1:acall xs1acall yyjmp mainkeyf2:acall xs2acall f_mjmp mainkeyf3:acall xs3mov p2,#0ffhjmp startkeyf4:acall xs2acall f_macall bjsjmp $jmp main;步进电机子程序;;正转子程序z_mm: mov r0,#08hz_m1: mov a,r0 mov dptr,#table movc a,a+dptr mov p2,a acall delayts djnz r0,z_m1ret;反转子程序f_m : mov r0,#0ah f_m1: mov a,r0 mov dptr,#table movc a,a+dptr mov p2,ajz f_m jnb k3,keyf3 acall delaytsinc r0djnz ys2,f_m1 djnz ys1,f_m1mov p2,#0ffhretdelayts:mov R6,#10;电机调试延时D1: mov R7,#220 djnz R7 ,$ djnz R6,d1 retbj:dlv:mov r2,#08hdlv1:mov r3,#0fahdlv2:cpl p3.7lcall delay10msdjnz r3,dlv2djnz r2,dlv1ret;控制码表table: db 0f1h,0f5h,0f4h,0f6h db 0f2h,0fah,0f8h,0f9h db 00h db 00h,0f1h,0f5h,0f4h,0f6h db 0f2h,0fah,0f8h,0f9h db 00h;国歌音乐yy:mov tmod,#01hmov ie,#82hmov 31h,#00start0:mov dptr,#songmov 30h,#low songnext1:mov a,30hmov dptr,#table1movc a,a+dptr mov r2,ajz end0anl a,#0fhmov r5,amov a,r2swap aanl a,#0fhjnz singclr tr0jmp dl1sing:dec amov 22h,arl amov dptr,#table1movc a,a+dptrmov th0,amov 21h,amov a,22hrl ainc amovc a,a+dptrmov tl0,amov 20h,asetb tr0;音乐开启dl1:call delay22inc 30hjmp next1end0:clr tr0rett0ds:push accpush pswsetb rs1clr rs0mov tl0,20hmov th0,21hcpl p3.7pop pswpop accretidelay22:mov r4,#3dl2:lcall z_mm;调用电机正转djnz r4,dl2djnz r5,delay22retorg 300htable1: dw 64260,64400,64524,64580dw 64684,64777,64820,64898dw 64968,65030,650658,65110dw 65157,65178,65217song:db 02h,12h db 46h,42h db 43h,41h,82h,21h,31h db 44h,44hdb 02h,62h,43h,61h,84h,84hdb 63h,61h,43h,61h,83h,61h,54h,58hdb 94h,84h,54h,64h,82h,62h,02h,82h,62h,51h,61h,51h,61h,44h,64hdb 04h,13h,21h,42h,42h,63h,61h,82h,82h,52h,51h,51h,24h,54hdb 12h,46h,42h,66h,62h,88hdb 43h,61h,82h,94h,84hdb 63h,41h,81h,81h,82h,62h,02h,42h,02hdb 84h,44hdb 63h,41h,81h,81h,82h,62h,02h,42h,02hdb 14h,44h,14h,44h,14h,44h,44h,04h,00h;液晶显示子程序;lcmxs:xs1:mov a,#01h;清除lcd内容acall lcd_wcmdmov a,#2;2秒延时acall delayacall lcd_init;lcd出始化mov a,#10;10msacall delaymov a,#080h;设置显示位置为第1行第0个字符acall lcd_wcmdmov dptr,#tab1;在第1行 显示字符"raise a flag"acall dispmov a,#10;10msacall delayretxs2:mov a,#01h;清除lcd内容acall lcd_wcmdmov a,#2;2秒延时acall delayacall lcd_init;lcd出始化mov a,#10;10msacall delaymov a,#0c0hacall lcd_wcmdmov a,#2;2秒延时acall delaymov dptr,#tab2;在第2行 显示字符"lower the flag"acall dispretxs3: mov a,#01h;清除lcd内容acall lcd_wcmdmov a,#2;2秒延时acall delaymov a,#0c0hacall lcd_wcmdmov dptr,#tab3;在第2行 显示字符"stop"acall dispretlcd_init:;lcd出始化设定mov a,#01h;清除lcd内容acall lcd_wcmdmov a,#2;2秒延时acall delaymov a,#38h;显示模式设置(使用8位数据,显示二行,使用5*7的字符)acall lcd_wcmdmov a,#2acall delaymov a,#0eh;显示开及光标设置acall lcd_wcmdmov a,#2acall delaymov a,#06h;显示光标移动设置acall lcd_wcmdmov a,#2acall delayretdelay:setb rs0;选择第一组为当前工作寄存器mov r7,ad2:mov r6,#250;1秒延时d3:nopnopdjnz r6,d3djnz r7,d2clr rs0;恢复第0组为当前工作寄存器retdisp:mov r1,#0next:mov a,r1movc a,a+dptrcjne a,#21h,ds1 retds1:acall lcd_wdatmov a,#02acall delayinc r1sjmp next tab1:db " raise a flag"db "!"tab2: db " lower the flag"db "!"tab3: db " stop"db "!"lcd_wdat:setb lcdrs;选择数寄存器clr lcdrw;写操作clr lcdep;无使能mov p0,a;写入要显示的字符数据nop;延时nopnopnopsetb lcdep;使能nop nopnopnopclr lcdepretlcd_wcmd:clr lcdrs;选择指令寄存器clr lcdrw;写操作clr lcdep;无使能nopnopmov p0,a;写入命令nopnop;延时nopnopsetb lcdep;使能nopnopnopnopclr lcdepret;延时子程序;delay10ms:mov r7,#1d4: mov r6,#250d5: nop nop djnz r6,d5 djnz r7,d4 ret en