《基于电动机的单片机实验和C语言开发精品资料.doc》由会员分享,可在线阅读,更多相关《基于电动机的单片机实验和C语言开发精品资料.doc(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、专业综合课程设计能力拓展课程设计任务书学生姓名: 杨 柳 专业班级: 电信 1005 班 指导教师: 刘运苟 工作单位: 信息工程学院 题 目: 基于电动机的单片机实验和C语言开发初始条件:(1) 提供实验室机房;(2) 模拟、数字电子技术的基本理论学习。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求):(1)设计一种简单的(步进)电动机(MOTOR)控制模块;(2)实现按键对步进电机的启动、转动、停止或调速等控制;(3)要求进行电路实验或仿真;(4)并使用C语言进行程序的开发;(5)对结果进行分析;(6)要求阅读相关参考文献不少于5篇;(7)根据课程设计有关规
2、范,按时、独立完成课程设计说明书。时间安排: (1) 布置课程设计任务,查阅资料,确定方案 四天; (2) 进行编程设计 一周; (3) 完成课程设计报告书 三天;指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 I目录摘要I1.概论11.1 课题的来源11.2 课题研究的意义11.3 课题国内研究现状21.4 课题研究的主要内容22.系统设计原理32.1 系统原理框图32.2 系统工作原理32.3 系统流程图43.系统组成部分53.1 单片机模块53.2 步进电机模块53.3 驱动的工作原理63.4 液晶显示的工作原理73.5 键盘检测的工作原理74.系统原理图84.1 系统原理
3、总图84.2 键盘接口电路84.3 LCD显示电路94.4 步进电机以及驱动电路105.系统软件仿真115.1 步进电机转速控制仿真115.2 步进电机八四拍控制仿真115.3 步进电机转动方向仿真125.4 步进电机的启动和停止功能136.结果分析147.心得体会15参考文献16附件:程序代码17武汉理工大学能力拓展训练课程设计摘要随着微电子和计算机技术的发展,它的需求量与日俱增,在各个国民经济领域都有应用。步进电机是机电数字控制系统中常用的执行元件,由于其精度高、体积小、控制方便灵活,因此在智能仪表和位置控制中得到了广泛的应用。本论文主要介绍了基于单片机的步进电机控制的规则、硬件结构、软件
4、代码的编写及工作原理和液晶模块LCD1602的详细介绍。模拟出单片机系统下的步进电机转速控制,具有任意转速选择、转动时间、正反转、加速和减速设置、系统低功耗、可实现在线调试等特点。本系统是以单片机为其控制核心,以有源晶振构成的电路作为时钟信号,通过键盘输入选择向单片机控制系统发出步进转动控制命令,控制系统接收命令后做出一系列必要的判断后,控制电机的转速、转向等。本设计已通过了实验仿真,运行稳定,达到了基本的设计要求。控制系统通过单片机控制器、I/O接口、中断、键盘、LCD显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相/八
5、相步进电机的正反转,急停,加速/减速等功能。关键词:单片机;步进电机;LCD 1602;按键控制I1.概论1.1 课题的来源步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。步进电机广泛应用在生产实践的各个领域。它最大的应用是在数控机床的制造中,因为步进电机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以被认为是理想的数控机床的执行元件。早期的步进电机输出转矩比较小,无法满足需要,在使用中和液压扭矩放大器一同组成液压脉冲马达。随着步进电动机技术的发展,步进电动机已经
6、能够单独在系统上进行使用,成为了不可替代的执行元件。比如步进电动机用作数控铣床进给伺服机构的驱动电动机,在这个应用中,步进电动机可以同时完成两个工作,其一是传递转矩,其二是传递信息。步进电机也可以作为数控蜗杆砂轮磨边机同步系统的驱动电动机。除了在数控机床上的应用,步进电机也可以并用在其他的机械上,比如作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。 步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。1.2 课题研究的意义 对基于单片机控制的步进电机的转速控制进行
7、设计的目的:一方面是对所学知识的综合运用,可以更好地学习单片机的应用技术,巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力,培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力,以及通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。另一方面步进电机可以发挥其结构简单、可靠性高和成本低的特点。使用恰当的时候,甚至可以和直流伺服电动机性能相媲美。1.3 课题国内研究现状 上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区
8、别,也是依靠气隙磁导的变化来产生电磁转矩。到了80年代后,由于廉价的微型计算机以多功能的姿态出现,步进电动机的控制方式更加灵活多样。原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。计算机则通过软件来控制步进电机,更好地挖掘出电动机的潜力。因此,用计算机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。步进电机靠一种叫环形分配器的电子开关器件,通过功率放大器使励磁绕组按照顺序轮流接通直流电源。由于励磁绕组在空间中按一定的规律
9、排列,轮流和直流电源接通后,就会在空间形成一种阶跃变化的旋转磁场,使转子步进式的转动,随着脉冲频率的增高,转速就会增大。步进电机的旋转同时与相数、分配数、转子齿轮数有关。 现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。1.4 课题研究的主要内容 本文针对步进电机控制的设计,首先介绍了选题的要求,之后详细叙述了软件和硬件的设计过程。 硬件部分是由中央处理器(AT89C51单片机),控制部分(独立式按键系统),显示部分(160
10、2LCD液晶显示模块),驱动部分(ULN2003A芯片)组成。软件部分的主要内容是通过对步进电机的控制、驱动程序进行编写和调试以实现步进电机的功能。通过硬件和软件调试,并针对问题分析修改后,步进电机系统可以稳定运行。步进电机系统中各个部分之间通过数据的传送最终完成了整个步进电机的运行、显示和进行按键的功能。 最后论文对设计进行了总结,对设计中可以进一步改善的地方提出了建议。162.系统设计原理2.1 系统原理框图本设计要分为两大块:一为硬件电路组成部分,一为软件程序设计部分。在硬件电路里主要包括晶振部分、键盘输入控制部分、电机驱动电路及液晶显示部分等与单片机控制模块;软件编程方面主要是子程序和
11、主程序的编写,包括:初始化代码、液晶驱动代码、按键检测代码、脉冲驱动代码、步进马达控制代码等。AT89C51单片机控制检测功能按钮晶振电路复位电路液晶显示电路步进驱动电路步进电机步进电机控制是一个比较精确的控制,本次选择用AT89C51单片机来控制ULN2003A驱动器来驱动步进电机,使步进电机能够有规律的进行起停、正转、反转、四相、八相等功能,同时显示当前运行状态。下面是步进电机控制原理框图2.1所示。图2.1 系统原理框图2.2 系统工作原理单片机采集按键的控制输入,通过扫描按键的状态来控制步进电机工作。启动/暂停键和控制步进电机转动的启动或暂停;正转/反转键控制步进电机的转动方向;八拍/
12、四拍键控制步进电机的工作方式;加速键和减速键一起控制步进电机的转动速度。最后将步进电机的转速和当前的状态(正反转、八四拍)显示出来,便于直观的观察。2.3 系统流程图变量、端口定义主函数LCD初始化While(1)电机转速处理电机信息显示键盘扫描脉冲驱动先初始化步进电机的速度,然后将速度显示在液晶上;接着一直扫描键盘的控制信息,根据对应的按键执行相应的功能;最后立即将其功能显示在LCD1602上。整个流程图如图2.2所示。图2.2 系统流程图3.系统组成部分3.1 单片机模块Atmel公司生产的AT89C51单片机是一种低功耗、低电压、高性能的8位单片机,它采用CMOS和高密度非易失性存储技术
13、,而且其输出引脚和指令系统都与MCS-51兼容;片内的Flash ROM允许在系统内改编程序或用常规的非易失性编程器来编程,内部除CPU外,还包括256字节RAM,4个8位并行I/O口,5个中断源,2个中断优先级,2个16位可编程定时计数器,89C51单片机是一种功能强、灵活性高且价格合理的单片机,完全满足本系统设计需要。包括复位电路和晶振电路。 3.2 步进电机模块四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。1四相步进电机的工作原理:当某一相绕组通电时,对应的磁极产生磁场,并与转子形成磁路,这时,如果定子和转子小齿没有对齐,在磁场的
14、作用下,由于磁通具有力图走磁阻最小路径的特点,则转子将转动一定的角度,使转子与定子的齿相互对齐,由此可见,错齿是促使电机旋转的原因。2步进电机的静态指标及术语:相数:产生不同队N、S磁场的激磁线圈对数,常用m表示。拍数:完成一个磁场周期性变化所需脉冲用n表示,或指电机转过一个齿距角所需脉冲数。以四相电机为例,有四相四拍运行方式ABBCCDDAAB,四相八拍运行方式AABBBCCCDDDAA。步距角:对应一个脉冲信号,电机转子转过的角位移用表示。=360度(转子齿角运行拍数),以常规二、四相,转子齿角为50齿角电机为例。四相运行时步距角zz x为=360度/(50*4)=1.8度,八拍运行时步距
15、角为=360度/(50*8)=0.9度。静转矩:电机在额定静态作业下,电机不做旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积的标准,与驱动电压及驱动电源等无关。虽然静态转矩与电磁激磁匝数成正比,与定子和转子间的气隙有关。但过分采用减小气隙,增加励磁匝数来提高静转矩是不可取的,这样会造成电机的发热及机械噪音。3四相步进电机的脉冲分配规律:目前,对步进电机的控制主要有分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。本设计利用单片机软件进行环形脉冲分配。本设计的电机工作方式为四相单四拍和八拍,根据步进电机的工作的时序和波形图,总结出其工作方式为四相单四拍时的脉冲
16、分配规律,八拍的脉冲分配规律,在每一种工作方式中,脉冲的频率越高,其转速就越快,但脉冲频率高到一定程度,步进电机跟不上频率的变化后电机会出现失步现象,所以脉冲频率一定要控制在步进电机允许的范围内。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.1.a、b、c所示。a单四拍 b.双四拍 c.八拍图3.1 步进电机工作时序波形图3.3 驱动的工作原理步进电机常用
17、的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。为了防止电机过流及改善驱动特性,需加限流电阻。由于步进电机锁步时,限流电阻要消耗掉大量的功率,故限流电阻要有较大的功率容量,并且开关管也要有较高的负载能力。步进电机的另一种驱动方式是高低压驱动,即在电机移步时,加额定或超过额定值的电压,以便在较大的电流驱动下,使电机快速移步;而在锁步时,则加低于额定值的电压,只让电机绕组流过锁步所需的电流值。这样,既可以减少限流电阻的功率消耗 ,又可以提高电机的运行速度,但这种驱动方式的电路要复杂一些。驱动脉冲的分配可以使用硬件方法,即用脉冲分配器实现。但硬件方法结构复杂,成本也较高。3.4 液晶显示
18、的工作原理LM032L采用标准的14脚接口,其中:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命
19、令。第714脚:D0D7为8位双向数据线。引脚图如图3.2所示。图3.2 液晶原理图3.5 键盘检测的工作原理独立式按键是指用I0口线构成的单个按键电路,每个独立式按键单独占有一根I0口线,每根I0口线上按键的工作状态不会影响其他IO口线的工作状态,即一个按键对应着个端口输入,每一个按键都有一个按键电路来判断其是否按下,低电平有限。本设计共有5个按键,分别用来设置启停、正转和反转(控制电机的正反转向)、加速和减速(控制转速,以十转为基本单位进行递加或递减)、八相和四相(控制电机的工作模式)。K1K5分别与P3.0P3.4相接。4.系统原理图4.1 系统原理总图系统硬件电路原理图如下图4.1所示
20、,5个独立按键分别与单片机相连接,控制步进电机的转动速度、方向、启动和停止。当有按键按下时,键盘扫描程序就会辨认出所按下的键来改变步进电机的工作方式。通过单片机的P0口连接到LCD032L的数据段,显示步进电机的转动速度、转动方向和八拍四拍工作。使用ULN2003A驱动器驱动步进电机,接入单片机的P10P13端口。图4.1 系统电路设计图4.2 键盘接口电路键盘如图4.2所示,共有5个按键。启动/暂停键接端口P3.0,控制步进电机转动的启动或暂停。正转/反转键接端口P3.1,控制步进电机的转动方向。八拍/四拍键接外部中断0,控制步进电机的工作方式。加速键和减速键分别接外部中断1和定时器0,控制
21、步进电机的转动速度。通过程序实时扫描键盘,并判断当键盘被按下后转到键盘处理子程序。图4.2 键盘接口电路4.3 LCD显示电路在该步进电机的控制器中,电机可以正反转,可以加速、减速,以及启停,为了方便知道电机的运行状态和电机的转速的大小,这里设计了电机转速和电机的工作状态的显示电路。选取的是20*2位显示的LM032L型号的液晶,与单片机的连接电路如下图4.3所示。其中VSS、VDD接+5V电源,VEE接地;D0D7接单片机的P0口;RS、RW、E接P2.0-P2.2口以完成控制。图4.3 液晶显示电路4.4 步进电机以及驱动电路P1口低四位输出经过非门接入ULN2003A驱动器,来驱动步进电
22、机。通过单片机的P1.0-P1.3输出脉冲到ULN2803的1B4B口,经信号放大后从1C4C口分别输出到电机的A、B、C、D相。如下图4.4所示。图4.4 步进电机以及驱动电路5.系统软件仿真5.1 步进电机转速控制仿真按下加速键,控制步进电机的转动速度,直到液晶显示器显示SPEED(n/min):040和STATE:ZZ AL:0.9,过程中明显看出步进电机转速逐渐增加,其中SPEED表示电机的转速,STATE表示当前电机的状态,ZZ表示正转,AL表示角度为0.9。如图5.1所示。图5.1 步进电机加速功能仿真图 按减速键的时候,液晶显示器SPEED(n/min)显示的数字逐渐变小,步进电
23、机转动速度也越来越慢,直到SPEED(n/min):15和STATE:ZZ AL:0.9。如图5.2所示。图5.2 步进电机减速功能仿真图5.2 步进电机八四拍控制仿真当然,八拍/四拍键是控制步进电机工作方式的,其作用也是控制步进电机的转动速度。其中八拍工作方式控制步进电机转动的速度,是四拍工作方式的两倍。当在八拍工作方式下,控制加速键,使液晶显示器显示SPEED(n/min):040和AL:1.8。如图5.3所示。图5.3 步进电机八拍功能仿真图当再次按下八拍/四拍键时,使步进电机的工作方式为四拍,此时液晶显示器显示AL:0.9。如图5.4所示。可以明显看出,八拍工作方式控制电机转速,是四拍
24、工作方式的两倍。图5.4 步进电机四拍功能仿真图5.3 步进电机转动方向仿真步进电机转动方向初始状态为顺时针方向,液晶显示器显示ZZ,如图5.5所示。图5.5 步进电机正转功能仿真图当按下正转/反转键的时候,电动机转动方向为逆时针方向,液晶显示器显示FZ,FZ表示反转即逆时针方向(ZZ表示顺时针方向)。如图5.6所示。图5.6 步进电机反转功能仿真图 再次按下正转/反转键,电动机转动方向改为顺时针方向,从此可以看出,可以很好的控制电动机的顺时针和逆时针转动,符合设计要求。5.4 步进电机的启动和停止功能 当按下启动/暂停键,步进电机停止转动,且液晶显示器显示PAUSE,如下图5.7所示。图5.
25、7 步进电机暂停功能仿真图当再次按下按下启动/暂停键,步进电机又接着转动,液晶显示器显示和停止之前的内容。如图5.8所示。由此看出,可以很好的控制步进电机的启动和停止,符合设计要求。图5.8 步进电机启动恢复功能仿真图6.结果分析1加速/减速按钮功能:按下加速键,这个过程中可以明显的看出步进电机转速逐渐增加,即可以看到液晶显示SPEED(n/min):017直到显示SPEED(n/min):048。同理,按减速键的时候,显示的数字逐渐变小,步进电机转动速度也越来越慢。液晶显示器也会从SPEED(n/min):048降到SPEED(n/min):017。从此可以看出,说明加速/减速功能能很好的实
26、现,符合要求。2八拍/四拍功能:当前液晶显示SPEED(n/min):020和AL:0.9,工作在四拍方式下。按下八拍/四拍键后,步进电机的转动速度明显加快,液晶显示SPEED(n/min):040和AL:1.8。当再次按下八拍/四拍键,使步进电机的工作方式为四拍,此时液晶显示器显示SPEED(n/min):020和AL:0.9。可知八拍工作方式控制步进电机转动速度,是四拍工作方式的两倍。从此可以看出,可以很好的控制电机的四拍和八拍模式下转动的切换,符合设计要求。3正转/反转功能:步进电机转动方向初始状态为顺时针方向,可以看到电机顺时针旋转,液晶显示器也显示STATE:ZZ。当按下正转/反转键
27、的时候,电动机转动方向为逆时针方向,液晶显示器显示STATE:FZ。再次按下正转/反转键,电动机转动方向改为顺时针方向,液晶显示器又显示STATE:ZZ。从此可以看出,可以很好的控制电动机的顺时针和逆时针转动的切换,符合设计要求。4启动/暂停功能当按下启动/暂停键,步进电机停止转动,且液晶显示器显示PAUSE,当再次按下按下启动/暂停键,步进电机又接着转动,液晶显示器显示和停止之前的内容一样。再次按下启动/暂停键,步进电机停止转动,且液晶显示器显示PAUSE。从此可以看出,本设计可以很好的控制步进电机的启动和停止功能,符合设计要求。综上所述,本方案可以很好的满足课设的要求,而且更易扩展,更人性
28、化。7.心得体会本次课题的设计题目是基于电动机的单片机仿真和C语言开发,主要实现步进电机的转速控制,转动方向控制,以及其启动和停止功能等。之前对步进电机几乎不了解,经过一个星期的学习、设计、仿真、调试,最终得出结果,基本完成设计要求。在这次课程设计中最直接的获益便是让我们都更好的掌握单片机这项技能,对单片机原理这个课程有了更全观的了解,在巩固了理论知识的同时,还能付诸实践,提高我们的动手能力。在学习单片机原理这门课程时所用到的编程语言是汇编语言,但这次课设要求使用C语言开发,参考一些书籍资料,学习运用C语言来编写单片机控制程序,幸好有C语言基础,所以编程学习起来还是蛮快的,不过懂的也不是很多。
29、本次其中涉及到对LM032L作为液晶显示的编程,也卡住了我,通过学习,了解其显示字符的编程方法,也较轻松的解决了。这次程序没有运用到中断服务,也是比较可惜的一点,如果要用中断写程序时注意对中断的允/禁控制,每当中断进来之后,要关闭中断,然后执行中断内部程序,最后要开中断,才能保证整个硬件系统的顺利运行。最后,就是要对按键进行延时去抖,这里的延时不能太短,才能看到液晶显示的数字较为流畅。为了完成这个设计,这次用的是proteus进行连接硬件原理图和进行仿真,用Keil软件对程序进行编译,写进89C51芯片上。这两个软件操作起来还是很简单的,可能是之前做过几个课设都用到这些软件,因此对他们也是很熟
30、悉了。还有这次用到了ULN2003A驱动器来驱动步进电机工作,虽然之前对这个芯片不了解,但是通过查资料,也很快明白了这个芯片的连接方法和基本使用方法,总之还是比较顺利的。而步进电机的转动速度是靠延时程序来控制的,步进电机每转动一个角度的延时越短则步进电机转动越快,反之则转动越慢。我觉得这次单片机课程设计很有意义,又让我多了解了一些关于单片机的运用,为了这次课设复习了相关单片机的知识,也额外的学习了如何运用C语言来对单片机进行编程,不仅加深了对书本的学习,学会了从文献中找出解决之道,很有益处。并且也知道了自己身上所欠缺的,对单片机的编程还是显得不够熟练,特别是C语言编程,要继续努力,把单片机学得
31、更好。参考文献1 姚燕南,薛钧义.微型计算机原理与接口技术.北京:高等教育出版社.20042 张鑫,华臻,陈书谦.单片机原理及应用.北京:电子工业出版社.20083 徐维祥,刘旭敏.单片微型计算机原理及应用.大连:大连理工大学出版社.20064 Machines, computations, and universality. MCU 2004. Russia: Saint Petersburg.20045 王守中,聂元铭. 51单片机开发入门与典型实例. 人民邮电出版社.20096 汪道辉.单片机系统设计与实践.北京:电子工业出版社.20067 于永,戴佳. 51单片机C语言常用模块与综合系
32、统设计. 电子工业出版社.2007附件:程序代码#include#define uchar unsigned char#define uint unsigned intsbit lcdrs=P20;/读写选择端sbit lcdrw=P21;/数据/命令选择端sbit lcden=P22;/使能端uchar Speedchar=SPEED(n/min):;uchar Statechar=STATE:;uchar Anglechar=AL:; uchar STATE_CW=ZZ;uchar STATE_CCW=FZ;uchar Angle1=0.9;uchar Angle2=1.8;uchar S
33、PEED3=000;uchar QT=PAUSE;/*驱动电机的码表*/uchar code table1=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9;/八拍正转uchar code table2=0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1;/八拍反转uchar code table3=0xf6,0xfc,0xf9,0xf3;/四拍正转uchar code table4=0xf3,0xf9,0xfc,0xf6;/四拍反转uint RunSpeed=70;uint i=0;uint a=5;/*标志位定义*/uchar fl
34、ag=0;/运行状态,正转/反转(0/1)uchar angle=0;/步距角状态,八拍/四拍(0/1)uchar pause=0;/启动/暂停(0/1)/*延时函数*/void delay(uint z)/延时1MSuint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*1602显示函数*/*写指令*/void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;/*写数据*/void write_data(uchar date)lcdrs=1;P0=date;delay(5);
35、lcden=1;delay(5);lcden=0;/*初始化*/void init()lcdrw=0;lcden=0;write_com(0x01);/显示清屏write_com(0x38);/显示模式设置write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/字符时整体不移动/*LCD状态显示*/*显示速度*/void Showstate5()write_com(0x80+0x0d);for(i=0;i3;i+)write_data(SPEEDi);delay(1);/*显示角度*/void Showstate4()write_com(0xc9+0x03);
36、if(angle=0)/0.9for(i=0;i3;i+)write_data(Angle1i);delay(1);else/1.8for(i=0;i3;i+)write_data(Angle2i);delay(1);/*显示状态*/void Showstate3()write_com(0xc0+0x06);if(flag=0)/正转for(i=0;i2;i+)write_data(STATE_CWi);delay(1);else/反转for(i=0;i2;i+)write_data(STATE_CCWi);delay(1);/*显示暂停*/void Showstate2()write_com
37、(0x01);write_com(0x80);for(i=0;i5;i+)write_data(QTi);delay(1);/*显示主程序*/void Showstate1()write_com(0x01);write_com(0x80);for(i=0;i13;i+)/先显示速度字样write_data(Speedchari);delay(1);Showstate5();/显示速度write_com(0xc0);for(i=0;i6;i+)/先显示状态字样write_data(Statechari);delay(1);Showstate3();/显示状态write_com(0xc9);for
38、(i=0;i=15)RunSpeed=RunSpeed-a;/加速if(angle=0)DoSpeed(RunSpeed);Showstate5();elseDoSpeed(RunSpeed/2);Showstate5();break;case 0xef: /P3.3按下if(RunSpeed0;delay-)for(i=0;i220;i+);/*脉冲输出程序*/void pulse() uint j;if(!pause)if(flag=0)&(angle=0)/flag=0正转 angle=0 0.9 for(j=0;j8;j+)P1=table1j;/8拍正转clock(RunSpeed);/控制转速if(flag=1)&(angle=0)/flag=1反转 angle=0 0.9for(j=0;j8;j+)P1=table2j;/8拍反转clock(RunSpeed);/控制转速if(flag=0)&(angle=1)/flag=0正转 angle=1 1.8for(j=0;j4;j+)P1=table3j;/4拍正转