欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于AT89C51单片机的电机控制综合课程设计.doc

    • 资源ID:4144702       资源大小:8.01MB        全文页数:27页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于AT89C51单片机的电机控制综合课程设计.doc

    基于AT89C51单片机的电机控制综合设计目录1 系统的设计11.1设计的目的和要求11.2系统原理12 系统的构成22.1控制器部分22.1.1控制器分析22.1.2控制器主要功能特性22.1.2控制器引脚功能描述32.2 数据显示部分42.2.1 12864液晶显示模块概述42.2.2 基本参数42.2.3模块引脚说明52.2.4 具体指令介绍:52.2.5显示坐标关系83 硬件电路设计83.1 LCD控制电路原理图83.2电机控制电路93.3速度反馈电路103.4 MCU接口113.5 按键电路114 软件设计124.1程序要求124.2 程序流程图124.3 程序清单124.3.1 LCD驱动程序124.3.2 主函数程序175程序的调试215.1 编程软件KEIL C51简介215.2 程序编译和调试216 结语251 系统的设计1.1设计的目的和要求基于AT89C51单片机的电机控制综合系统,以电机为被控对象,由AT89C51单片机作为控制器,结合速度反馈和LCD液晶显示模块,组成一个有较好控制性和实时性的电机控制综合系统。1.2系统原理MCU外围电路电机速度反馈LCD模块图1.1 系统原理图系统的原理如上图1.2所示,控制器AT89C51通过外围电路控制电机转动。由速度反馈电路反馈电机的速度信息,并进行伺服计算和控制。整个系统的主要信息可以在LCD显示模块上显示。2 系统的构成2.1控制器部分2.1.1控制器分析AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.1.2控制器主要功能特性·与MCS-51 兼容 ·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路2.1.2控制器引脚功能描述AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个IO 口线,两个16位定时计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。(本文由 点梦时刻 倾情奉献)Vcc:电源电压GND:地P0口是一组8 位漏极开路型双向IO 口,也即地址数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口是一个带内部上拉电阻的8位双向IO口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。FIash编程和程序校验期间,P1接收低8位地址。P2口是一个带有内部上拉电阻的8位双向IO口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRI 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。(本文由 点梦时刻 倾情奉献)P3口是一组带有内部上拉电阻的8 位双向IO 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3口除了作为一般的IO口线外,更重要的用途是它的第二功能,如下表2.1.2所示:表2.1 P3口第二功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外中断0)P3.3INT1(外中断1)P3.4T0(定时计数器0外部输入)P3.5T1(定时计数器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST :复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。(本文由 点梦时刻 倾情奉献)ALEPROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的l6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的DO 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。EA VPP: 外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1: 振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。2.2 数据显示部分2.2.1 12864液晶显示模块概述12864液晶显示模块是128×64 点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置国标GB2312 码简体中文字库(16X16 点阵)、128 个字符(8X16 点阵)及64X256 点阵显示RAM(GDRAM)。可与CPU 直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。2.2.2 基本参数 液晶屏类型 STN FSTN 模块显示效果: 黄绿底黑字 蓝底白字 白底黑字 视角 6点钟 12点钟 驱动方式 1/64 DUTY 1/9 BIAS 背光 LED白色 LED黄绿色 控制器 KS0108或兼容 ST7920 T6963C 数据总线 8 位并口/6800 方式 串口 温度特性 工作温度:-20+70 储藏温度:-30+80 点阵格式 128 x 642.2.3模块引脚说明表2.2 LCD引脚说明引脚名称方向说明引脚名称方向说明1VSS-电源负极11DB4I/O数据42VDD-电源正极 (+5v)12DB5I/O数据53VO-LCD 偏压输入(悬空)13DB6I/O数据64RSH/L数据/命令选择端(片选信号输入)14DB7I/O数据75R/WH/L读/写控制信号(串行数据输入)15PSBH/LH:并行数据模式 L:串行数据模式6EH,H/L使能信号(串行移位脉冲输入)16NC-空脚7DB0I/O数据017/RSTH/L复位端(L:复位)8DB1I/O数据118NC-空脚9DB2I/O数据219BLA-背光源正极10DB3I/O数据320BLK-背光源负极2.2.4 具体指令介绍:1、清除显示(指令代码为01H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLL H功能:清除显示屏幕,把DDRAM 位址计数器调整为“00H”。2、位址归位(02H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLH X功能:把DDRAM 位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM。3、点设定(07H/04H/05H/06H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLHI/D S功能:设定光标移动方向并指定整体显示是否移动。I/D=1 光标右移,I/D=0 光标左移。SH=1 且DDRAM 为写状态:整体显示移动,方向由I/D 决定(I/D=1 左移,I/D=0 右移)SH=0 或DDRAM 为读状态:整体显示不移动4、显示状态开/关(08H/0CH/0EH/0FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLHDC B功能: D=1;整体显示ON C=1;游标ON B=1;游标位置ON.5、游标或显示移位控制(10H/14H/18H/1CH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLHS/CR/LX X功能:10H/14H:光标左/右移动;18H/1CH:整体显示左右移动,光标跟随移动,AC 值不变6、功能设定(36H/30H/34H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHDL XO REX X功能:DL=1(必须设为1) RE=1;扩充指令集动作 RE=0:基本指令集动作5、游标或显示移位控制(10H/14H/18H/1CH)7、设定CGRAM 位址(40H-7FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLH AC5AC4AC3AC2AC1 AC0功能:设定CGRAM 位址到位址计数器(AC)8、设定DDRAM 位址(80H-9FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0功能:设定 DDRAM 位址到位址计数器(AC)9、读取忙碌状态(BF)和位址(BF=1, 状态忙)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H LBFAC6AC5AC4AC3AC2AC1 AC0功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值10、写资料到RAM(本文由 点梦时刻 倾情奉献)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LHD7D6D5D4D3D2D1 D0功能:写入资料到内部的 RAM(DDRAM/CGRAM/TRAM/GDRAM)11、读出RAM 的值CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HHD7D6D5D4D3D2D1 D0功能:从内部 RAM 读取资料(DDRAM/CGRAM/TRAM/GDRAM)12、待命模式(01H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLL H功能:进入待命模式,执行其他命令都可终止待命模式13、卷动位址或IRAM 位址选择(02H/03H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLH SR功能:SR=1;允许输入卷动位址 SR=0;允许输入IRAM 位址14、反白选择(04H05H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLHR1 R0功能:选择 4 行中的任一行作反白显示,并可决定反白的与否15、睡眠模式(08H/0CH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHHX1REG L功能:SL=1;脱离睡眠模式 SL=0;进入睡眠模式16、扩充功能设定(36H/30H/34H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLHS/CR/LX X功能:RE=1;扩充指令集动作 RE=0;基本指令集动作 G=1;绘图显示ON G=0;绘图显示OFF17、设定IRAM 位址或卷动位址(40H-7FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLHAC5AC4AC3AC2AC1 AC0 功能:SR=1;AC5AC0 为垂直卷动位址 SR=0;AC3AC0 写ICONRAM 位址18、设定绘图RAM 位址(80H-FFH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0功能:设定 GDRAM 位址到位址计数器(AC)2.2.5显示坐标关系X 坐标Line1 80H 81H 82H 83H 84H 85H 86H 87HLine2 90H 91H 92H 93H 94H 95H 96H 97HLine3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FHLine4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH3 硬件电路设计3.1 LCD控制电路原理图图3.1 LCD控制电路原理图3.2电机控制电路电机H桥控制电路如下图3.2所示。当DCMotorA为高电平时,NPN型三极管Q4导通,则PNP型三极管Q2和NPN型三极管Q6会同时导通;同时DCMotorB为低电平,NPN型三极管Q5关闭,则PNP型三极管Q3和NPN型三极管Q7会同时关闭。此时,电流将从MOTOR B经过电机向MOTORA方向流动,如此驱动电机正向转动。反之,DCMotorA为低电平,DCMotorB为高电平,电机为反向转动。如此可以实现电机的正反转控制。调节DCMotorA或DCMotorB的导通时间,可以实现电机的调速控制。(本文由 点梦时刻 倾情奉献)图3.2 电机控制电路图3.3 速度反馈电路3.3速度反馈电路速度反馈电路如上图3.3所示。当光耦Optoisolator1导通时,PNP型三极管Q1导通,指示灯LED1发光,此时DCMotorSpeed端口为低电平。当光耦Optoisolator1不导通时,指示灯LED1不发光,此时DCMotorSpeed端口为高电平。电机带了一个有四个缺口的转盘,如此。当电机转动一圈时,会有4个脉冲输入给单片机,对这些脉冲进行计数,可以计算出电机的转动速度。(本文由 点梦时刻 倾情奉献)由于装在电机上的码盘格数比较少,而我们程序中速度的级数为255,相对较大。给速度计数的T0计数器,为满足系统的实时控制性,则获取速度数据的时间应该尽量短(即程序中T0定时器初始化程序中的Delay延时)。同时,这一时间又要满足当给定速度最大时,仍有足够的时间能够对速度反馈值进行正确的计数。所以这一时间不能够太短。合理的确定这一时间的方法是,给定电机速度为255,让其全速转动。此时,从小到大更改计数延时Delay()的时间,然后在液晶显示器上观察反馈的速度值,当其刚好为255时,此时的延时Delay()时间为系统的的最佳速度采样时间。经过上述处理后,我们发现获得的这个延时时间是相对比较长的,这是因为当给定速度较大时,电机需要转几十圈才能反馈出实际的速度值,所以反馈速度所需的时间比较长,实时控制的能力相对较差。为克服以上系统的缺点,可以通过减少速度的级数,即减小Pwm_MAX的值来实现。但是速度的级数减少后,电机调速的连续性就必然会降低,电机在速度动态变化过程中的稳定性就会相应降低。另外,还可以采用增加电机码盘格数的方法来实现速度反馈的快速性和准确性,借此可以在较合理的时间内得到电机速度的准备值。第二种改进方案更为合理和科学。3.4 MCU接口图3.4 MCU接口3.5 按键电路图3.5 按键电路按键电路如上图3.5所示。当任意一个按键KEY被按下时,P2.0P2.2引脚会对应的的产生一个低电平。4 软件设计4.1程序要求开启中断开始LCD初始化显示预处理初值设定按键处理速度计算数据处理返回中断服务电机控制图4.1 程序流程图我们使用语言对AT89C51进行控制程序的编写。程序中使用到的资源有两个定时器资源,T0工作在16位外部计数模式,用于速度的反馈和计算等数据处理。T1工作在8位定时器自动重载模式,引脚P3.4接计数信息输入端口。在T1的定时溢出中断程序中进行速度的产生及对电机的控制操作。系统使用到5个普通I/O口资源。P1.6和P1.7为控制电机转动的两路控制信号。P2.0作为加速按键信息输入端口,P2.1作为减速按键信息输入端口,P2.2作为方向控制键信息输入端口。(本文由 点梦时刻 倾情奉献)程序运行时,先进行LCD控制程序的初始化并对显示进行预处理。然后读预设速度初值,由T1中断服务程序产生PWM速度控制信号,T0反馈速度信息并进行速度的计算处理。KEY1和KEY2可对速度进行加减操作。KEY3可对电机进行正反转的控制操作。程序的编写要遵循性保证系统稳定性的前提下消耗尽量少消耗资源的原则,并要考虑实际的可操作性和满足系统在各种工作环境下能稳定正常运行的要求。4.2 程序流程图4.3 程序清单4.3.1 LCD驱动程序/*LCD.C128×64 LCD驱动程序头文件*/#ifndef LCD_H_#define LCD_H_#include<REG51.H>sbit LCD_BL=P14; /定义背光控制信号void LcdLightOn();/点亮背光灯void LcdLightOff();/熄灭背光灯void LcdClear();/清屏void LcdInit();/初始化void LcdPutChar(unsigned char c);/显示ASC码void LcdPuts(unsigned char*s); /显示字符串#endif /LCD_H_/*LCD.C128×64 LCD驱动程序*/#include <INTRINS.H>#include <ABSACC.H>unsigned char LcdCursor; /定义屏幕光标(取值063,光标本身不可见)int i,j;void LcdLightOn() /功能:点亮背光灯LCD_BL = 1;void LcdLightOff() /功能:熄灭背光灯LCD_BL = 0;/*函数:LcdGetBF()返回:BF=1,表示忙,不可进行任何操作BF=0,表示不忙,可以进行正常操作*/bit LcdGetBF()/功能:读出状态位BFunsigned char dat;dat = XBYTE0xD002;/XBYTE的定义见<ABSACC.H>return (bit)(dat & 0x80);void LcdWriteCmd(unsigned char cmd) /功能:向LCD发送命令while ( LcdGetBF() );XBYTE0xD000 = cmd;void LcdWriteDat(unsigned char dat)/ 功能:向LCD写入数据while ( LcdGetBF() );XBYTE0xD001 = dat;unsigned char LcdReadDat() /功能:从LCD读出数据volatile unsigned char dat;while ( LcdGetBF() );dat = XBYTE0xD003;dat = XBYTE0xD003;/需要连续执行两次才能够读出真正的数据return dat;/*函数:LcdSetAC()功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值*/void LcdSetAC(unsigned char ac)ac &= 0x3F;ac |= 0x80;LcdWriteCmd(ac);void LcdClear()/功能:LCD清屏,并使光标回到0LcdWriteCmd(0x01);/清屏命令LcdCursor = 0;void LcdDelay(unsigned char t) /功能:延时(t*100)个机器周期unsigned char n;don = 49;while ( -n != 0 ); while ( -t != 0 );void LcdInit()/功能:LCD初始化LcdWriteCmd(0x30);/设置基本指令集LcdDelay(3);LcdWriteCmd(0x30);/设置基本指令集(需要再执行一次)LcdDelay(1);LcdWriteCmd(0x0C);/开启显示LcdDelay(3);LcdClear();/清屏LcdDelay(250);LcdWriteCmd(0x06);/设置进入点LcdDelay(10);void LcdCheckAC() /功能:根据光标位置调整ACswitch ( LcdCursor )case 16:LcdSetAC(16);break;case 32:LcdSetAC(8);break;case 48:LcdSetAC(24);break;case 64:LcdCursor = 0;LcdSetAC(0);break;default:break;void LcdPutChar(unsigned char c) /功能:显示ASCII码LcdWriteDat(c);LcdCursor+;LcdCheckAC();void LcdPutHZ(unsigned char ch, unsigned char cl) /功能:显示汉字if ( LcdCursor & 0x01 )/显示汉字时,必须偶地址对准,即光标位置不能是奇数LcdPutChar(' ');/额外输出一个空格LcdWriteDat(ch);LcdWriteDat(cl);LcdCursor += 2;LcdCheckAC();void LcdPuts(unsigned char *s) /功能:显示字符串unsigned char ch, cl;for (;)ch = *s+;if ( ch = '0' ) break;if ( ch < 0x80 )LcdPutChar(ch);elsecl = *s+;LcdPutHZ(ch,cl);4.3.2 主函数程序/*显示主程序*/#include<REG51.H>unsigned char SD4='1','2','3','4'/速度设定unsigned char FK4='2','2','3','4'/速度反馈unsigned int D=0; /方向控制中间变量unsigned int Pwm=0; /速度产生中间变量unsigned int Pwm_Value=0; /速度计算中间量 unsigned int Value=0; /速度初值 sbit KEY1=P20; /按键sbit KEY2=P21;sbit KEY3=P22;sbit MotorA=P16; /两个电机控制端sbit MotorB=P17; bit SWTR; /延时程序变量bit SWTF;unsigned int SWTV; #define Pwm_MAX 255 /速度级数/*/函数:Delay()延时1ms 65.53st>0时,延时(t*0.001)st=0时。延时65.53s/*/void Delay(unsigned int T) /延时程度SWTV=T;SWTR=1;while(!SWTF);SWTR=0;SWTF=0;void KEY() /按键处理函数if(KEY1=0)Pwm_Value=Pwm_Value+1;if(KEY2=0)Pwm_Value=Pwm_Value-1; if(Pwm_Value>255) Pwm_Value=255; if(Pwm_Value<0) Pwm_Value=0;if(KEY3=0) if(D=0) D=1;else D=0;void PWM_Init() /速度产生函数staticunsigned char t=0;t+;if(t>Pwm_MAX) t=0;if(t<=Pwm_Value) Pwm=1;else Pwm=0;if(D=0)MotorA=0;MotorB=Pwm;elseMotorA=Pwm;MotorB=0; void Show_Value(unsigned char CH) /数据显示函数 int i; for(i=0;i<4;i+) LcdPutChar(CHi);void Show_Init() /数据显示预处理函数LcdWriteCmd(0x80);LcdPuts("速度设定");LcdWriteCmd(0x90);LcdPuts("速度反馈");LcdWriteCmd(0x88);LcdPuts("速度方向");LcdWriteCmd(0x98);LcdPuts("测控071 ");LcdWriteCmd(0x9c);LcdPuts(" 29号 ");void T_int()/定时器初始化函数TMOD&=0x00;TMOD=0x25;TH1=TL1=0xa4;TH0=TL0=0;ET1=1;TR1=1;EA=1;void MeasureSpeed()/速度反馈及信息处理函数unsigned int m; TH0=TL0=0; TR0=1; Delay(2400); TR0=0; TF0=0; m=2*(TH0*255+TL0);if(m>Value) Pwm_Value+;if(m<Value) Pwm_Value-;FK3=(m%10)+48;FK2=(m/10%10)+48;FK1=(m/100%10)+48;FK0=(m/1000%10)+48;SD3=(Pwm_Value%10)+48;SD2=(Pwm_Value/10%10)+48;SD1=(Pwm_Value/100%10)+48;SD0=(Pwm_Value/1000%10)+48;void main()/主函数部分 unsigned char i; MotorA=0; MotorB=0;EA=0; T_int(); /定时器初始化 Delay(50); LcdInit();/LCD初始化 /*/ for(i=0;i<2;i+)LcdLightOff();Delay(660);LcdLightOn();Delay(660); Delay(660)

    注意事项

    本文(基于AT89C51单片机的电机控制综合课程设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开