单片机课程设计报告-步进电机控制.doc_第1页
单片机课程设计报告-步进电机控制.doc_第2页
单片机课程设计报告-步进电机控制.doc_第3页
单片机课程设计报告-步进电机控制.doc_第4页
单片机课程设计报告-步进电机控制.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计报告步进电机控制姓 名:班 级: 10电信3 学 号: 201030580313/05/10指导老师: 日期: 2013.06.04 华南农业大学工程学院摘要步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。它是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。本系统主要根据步进电机在实际生活的应用,利用STC89C52单片机,驱动芯片ULN2003和4*4键盘完成对步进电机24BYJ48各种运行方式的控制,同时也可以通过红外遥控操控步进电机进行一系列的操作,并最终以液晶显示的方式将其工作状态反馈到终端的一体化系统,实现人性化、智能化、高效节能的一体式应用系统。关键词: 步进电机;单片机STC89C52;红外遥控;角度控制目录一、设计背景4二、系统方案42.1系统框架42.2方案论证4三、硬件电路63.1系统总电路63.2电路单元6四、软件系统134.1系统主程序模块134.2正转功能154.3反转功能174.4加速功能194.5减速功能214.6固定转角功能234.7信息显示功能254.8中断27五、元件清单28六、PCB板图29七、课程总结30八、程序代码31九、参考资料44一、设计背景步进电动机是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。随着微电子和计算机技术的发展,步进电动机的需求量与日俱增,研制步进电机驱动器及其控制系统具有十分重要的意义。二、系统方案2.1 系统框架系统是采用STC89C52单片机及驱动芯片ULN2003完成步进电机各种运行方式的控制,通过键盘和红外遥控操控步进电机进行启动/停止,加速,减速,正/反转控制,转动固定角度和测速等一些列的操作,并最终以液晶显示的方式将其工作状态反馈到终端的一体化系统,系统设计框架如图1所示:STC89C52时钟电路复位电路驱动电路步进电机键盘控制电路程序下载模块液晶显示电路红外遥控器红外接收头图-1 总体设计框图2.2 方案论证2.2.1. 方案1基于电子电路的控制:步进电机受电脉冲信号控制,电脉冲信号的产生、分配、放大全靠电子元器件的动作来实现。由于脉冲控制信号的驱动能力一般都很弱,因此必须有功率放大驱动电路。步进电机与控制电路、功率放大驱动电路组成一体,构成步进电机驱动系统。此种控制电路设计简单,功能强大,可实现一般步进电机的细分任务。这个系统由三部分组成:脉冲信号产生电路、脉冲信号分配电路、功率放大驱动电路。此种方案即可为开环控制,也可闭环控制。开环时,其平稳性好,成本低,设计简单,但未能实现高精度细分。采用闭环控制,即能实现高精度细分,实现无级调速。闭环控制是不断直接或间接地检测转子的位置和速度,然后通过反馈和适当的处理,自动给出脉冲链,使步进电机每一步响应控制信号的命令,从而只要控制策略正确电机不可能轻易失步。该方案多通过一些大规模集成电路来控制其脉冲输出频率和脉冲输出数,功能相对较单一,如需改变控制方案,必须需重新设计,因此灵活性不高。2.2.2. 方案2基于单片机的控制:采用单片机来控制步进电机,实现了软件与硬件相结合的控制方法。用软件代替环形分配器,达到了对步进电机的最佳控制。系统中采用单片机接口线直接去控制步进电机各相驱动线路。由于单片机的强大功能,还可设计大量的外围电路,键盘作为一个外部中断源,设置了步进电机正转、反转、档次、停止等功能,采用中断和查询相结合的方法来调用中断服务程序,完成对步进电机的最佳控制,显示器及时显示正转、反转速度等状态。环形分配器其功能由单片机系统实现,采用软件编程的办法实现脉冲的分配。本方案有以下优点:(1)单片机软件编程可以使复杂的控制过程实现自动控制和精确控制,避免了失步、振荡等对控制精度的影响;(2)用软件代替环形分配器,通过对单片机的设定,用同一种电路实现了多相步进电机的控制和驱动,大大提高了接口电路的灵活性和通用性;(3)单片机的强大功能使显示电路、键盘电路、复位电路等外围电路有机的组合,大大提高系统的交互性。2.2.3. 方案确定方案二较方案一更容易实现、结构也相对简单。本次实训时间上也比较紧,因此经小组共同讨论决定采用方案二,系统框图见图-1。实现的功能包括:从键盘上输入数字使显示器显示,按键1实现电机正转,并在1602显示标志“Forward”,可通过按键9来控制停止,并通过单片机计算其转速显示在液晶上; 按键2实现电机反转,并在1602显示标志”Backward“;按键3实现电机加速,每转一圈转速增加1倍,转3圈后停止;按键4实现电机减速,每转一圈转速减小1倍,转3圈后停止;按键5可以控制步进电机转动固定角度,比如正转45度;按键6实现步进电机反转45度;按键7清屏;按键8显示作者信息。按键10启动遥控模式,并可以通过遥控器实现以上所有操作。三、 硬件电路系统主要由三大模块构成,包括驱动电路模块、状态显示模块和控制模块,可以通过控制脉冲个数来控制角位移量,从而精确地控制转动角度;同时也可以通过控制脉冲频率来控制电机转动的角度和加速度,从而达到调速的目的。3.1 系统总电路图-2 系统总电路图3.2 电路单元3.2.1 复位电路复位电路,就是利用它把电路恢复到起始状态。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路工作原理如图-3所示,VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S,C放电。S松手,C又充电,在10K电阻上出现电压,使得单片机复位,几个毫秒后,单片机进入工作状态。图-3 复位电路图3.2.2 时钟电路80C52单片机的时钟信号通常用两种电路形式电路得到:内部震荡方式和外部中断方式。在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式其电容值一般在530pf,晶振频率的典型值为12MHz,采用6MHz的情况也比较多,内部振荡方式所得的时钟信号比较稳定,实用电路实用较多。时钟电路是计算机的心脏,它控制着计算机的工作节奏,可以通过提高时钟频率来提高CPU的速度,本次设计采用的晶振为12MHz,其电路如下图所示:图-4 时钟电路图3.2.3 程序下载模块通过下载电路,可以把需要应用的程序载入到单片机芯片AT89C52之中进行调试。图-5 下载模块电路图3.2.4 键盘模块本系统采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,控制信号由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘还可以做特别功能键使用,键盘的每个按键功能可以在程序设计中设置。图-6 键盘电路图3.2.5 红外控制模块红外控制模块主要由红外遥控发射装置、红外接收设备、遥控微处理机等组成,其具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列特点,同时,由于红外遥控器件,工作电压低,功耗小,外围电路简单,因此,在日常生活中广泛应用,如彩电,录像机,音响空调,风扇,等其它的小型电器上。本系统主要以AT89C52 系列单片机作为主控芯片,红外线编码接收模块,红外线编码发送模块组成。利用单片机AT89C52对多个红外遥控编码的脉冲宽度进行测量,并原封不动地把发射信号中高、低电平的时间宽度记忆至扩展存储区的指定地址。当要发射红外信号时,从扩展存储区中还原出相应的红外遥控编码,并调制到 40KHz 的载波信号上,最后通过三极管放大电路驱动红外发光二极管发射红外信号,达到学发射和接收的目的,从而实现利用红外遥控控制步进电机运转的目的。图-7 红外遥控电路图3.2.6 液晶显示模块液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用,根据显示内容可以分为字符型液晶,图形液晶,根据显示容量又可以分为单行16 字,2 行16 字,两行20 字等等。 本系统采用的是16 字X2 行的字符型液晶模块LCD1206,可以提高系统显示效果能力,有效地将系统运转信息反馈给用户,其显示部分引脚接口如图-8所示。这是一种通用模块,与数码管相比该模块有如下优点: (1)位数多,可显示32位,显示能力强于数码管,电路更加简单;(2)显示内容丰富,可显示所有数字和大、小写字母;(3)程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而1602自动完成此功能。图-8 液晶显示电路图3.2.7 步进电机驱动模块步进电机不能直接接到交直流电源上工作,而必须使用专用设备步进电机驱动器.步进电机驱动系统的性能,除与电机本身的性能有关外,也在很大程度上取决于驱动器的优劣。典型的步进电机驱动系统是由步进电机控制器、步进电机驱动器和步进电机本体三部分组成。步进电机控制器发出步进脉冲和方向信号,每发一个脉冲,步进电机驱动器驱动步进电机转子旋转一个步距角,即步进一步。步进电机转速的高低、升速或降速、启动或停止都完全取决于脉冲的有无或频率的高低。控制器的方向信号决定步进电机的顺时针或逆时针旋转。本系统采用ULN2003构建步进电机的驱动电路,ULN2003是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,能高效驱动步进电机,其芯片接口如下图所示:图-9 步进电机驱动电路图3.2.8 步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制,步进电机工作原理如下图所示:图-10 四相步进电机示意图3.2.9 89C52单片机单片机(single-chip microcomputer)是把微型计算机主要部分都集成在一块芯片上的单芯片微型计算机。图-11为单片机的典型结构图。由于单片机的高度集成化,传送距离,优化了结构配置,大大地提高了系统的可靠性及运行速度,同时它的指令系统又很适合于工业控制的要求,所以单片机在工业过程及设备控制中得到了广泛的应用。本系统采用的是89C52单片机,89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似电机控制等应用场合。图-11 单片机结构图四、 软件系统4.1 系统主程序模块4.1.1 系统流程图开启系统电源后,系统首先进行初始化,接着进行键盘的检测,当检测到有按键触发时,系统进入判断流程,根据P3口的输入,系统分别做出正转、反转、正转45度角、反转45度角、加速、减速、清屏、显示系统信息、开启红外遥控、停止遥控等一系列操作,并最后将目前系统运行的状态输出到液晶加以显示;当系统开启了红外遥控功能,系统便可接受红外信号,进行无线操控系统;当系统接收到停止命令时,系统即马上中断当前的操作,进入液晶显示模式,并恢复到系统初始状态,等待按键的输入,整体系统流程图如下图所示:图-12 系统流程图4.1.2 系统仿真图下图为本系统的系统仿真图,在软件系统上成功模式了整个系统的运作情况,实现了步进电机正转、反转、正转45度角、反转45度角、加速、减速、转速检测等基本功能,并成功的将系统运转信息显示在液晶上,实现了在软件上对系统进行检测、校对等一系列操作。图-13 系统仿真图4.2 正转功能4.2.1 正转流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为正转触发时,在单片机与驱动电路的驱动下,步进电机进行正转操作,并将系统目前运转状态显示在液晶上,下图为系统正转流程图:图-14 正转流程图4.2.2 正转仿真图在软件系统仿真下,当触发系统正转按键时,如下图所示,步进电机进行正转操作,与此同时液晶显示系统当前所处状态:模式(MODE)处于正转模式(Forward),转动圈数(RoundNum)为1圈。图-15 正转仿真图4.3 反转功能4.3.1 反转流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为反转触发时,在单片机与驱动电路的驱动下,步进电机进行反转操作,并将系统目前运转状态显示在液晶上,下图为系统反转流程图:图-16 反转流程图4.3.2 反转仿真图在软件系统仿真下,当触发系统反转按键时,如下图所示,步进电机进行反转操作,与此同时液晶显示系统当前所处状态:模式(MODE)处于反转模式(Backward),转动圈数(RoundNum)为2圈。图-17 反转仿真图4.4 加速功能4.4.1 加速流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为加速触发时,在单片机与驱动电路的驱动下,步进电机进行加速运转,并将系统目前运转状态显示在液晶上,下图为系统加速流程图:图-18 加速流程图4.4.2 加速仿真图在软件系统仿真下,当触发系统加速按键时,如下图所示,步进电机进行加速操作,与此同时液晶显示系统当前所处状态:模式(MODE)处于正转模式(Forward),同时液晶显示(SPEED UP)加速提示。图-19 加速仿真图4.5 减速功能4.5.1 减速流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为减速触发时,在单片机与驱动电路的驱动下,步进电机进行减速运转,并将系统目前运转状态显示在液晶上,下图为系统减速流程图:图-20 减速流程图4.5.2 减速仿真图在软件系统仿真下,当触发系统减速按键时,如下图所示,步进电机进行减速操作,与此同时液晶显示系统当前所处状态:模式(MODE)处于正转模式(Backward),同时液晶显示(SPEED DW)减速提示。图-21 减速仿真图4.6 固定转角功能4.6.1 固定转角流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为固定正转45度或是反转45度触发时,在单片机与驱动电路的驱动下,步进电机进行正转45度或是反转45度角操作,并将系统目前运转状态显示在液晶上,下图为系统加速流程图:图-22 固定转角流程图4.6.2 固定转角仿真图在软件系统仿真下,当触发系统固定正转45度或是反转45度按键时,如下图所示,步进电机进行正转45度或是反转45度角操作,与此同时液晶显示系统当前所处状态:模式(MODE)处于正转模式(Forward)或是反转模式(Backward),同时角度(Angle)显示(+45)或(-45)提示。图-23 固定转角仿真图4.7 信息显示功能4.7.1 信息显示流程图开启系统电源后,系统进入初始化状态,并同时进行键盘的检测,当检测到有按键触发时,系统即进行逻辑选择判断,当判断为信息显示触发时,在单片机驱动下,液晶显示系统基本信息,下图为系统信息显示流程图: 图-24 信息显示流程图4.7.2 信息显示仿真图在软件系统仿真下,当触发系统信息显示按键时,如下图所示,液晶显示系统基本信息:2010 CLASS 3 ,日期DATE:2013.06.03。图-25 信息显示仿真图4.8 中断4.8.1 中断流程图步进电机的转动主要是给电机各绕组按一定的时间间隔连续不断地按规律通入电流,步进电机才会旋转,时间间隔越短,速度就越快。在这个系统中,这个时间间隔是用定时器重复中断一定次数产生的,即调节时间间隔就是调节定时器的中断次数,因而在定时器中断程序中,要做的工作主要是判断电机的运行状态,并发送停止标志位,使步进电机退出循环状态,以及保存当前的各种状态。程序流程图如下图所示。中断返回T0中断入口Flag=0恢复现场保护现场电机正/反转中?NY图-26 中断程序流程图五、 元件清单表1 元件清单元件类型型号数量STC89C521LCD16021键盘4*41步进电机5线4相1驱动芯片ULN20031MAX2321晶振12M2DC直插式电源座1电阻10K若干电位器10K19脚排阻10K*81电容33pF若干10uF若干开关按钮开关2发光二极管蓝色3串口插座1USB母口转串口线1支撑铜柱4电池5V1六、 PCB板图图-27 PCB图七、 课程总结这次课程设计根据课题要求,复习了所学的单片机和步进电机的内容,通过查询相关的资料,初步掌握了步进电机控制的基本原理和步进电机转动编程的方法,步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日增加,在各个国民经济领域仍将起到重要作用。根据课程设计的要求和自己通过参考有关资料,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。在写程序时,在每条指令后都写好注释,以便在程序出错的检查过程中可以更容易查找得到。 基于单片机的步进电机控制系统设计课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。在这次设计过程中,我们感到自己的综合应用能力有待进一步加强。在今后的学习过程中,我们会更加重视实践动手操作能力,全面提高综合素质。八、 程序代码#include /包含头文件,内含特殊功能寄 存器的定义#include /标准输入输出#include sbit RS = P24; /Pin4sbit RW = P25; /Pin5sbit E = P26; /Pin6sbit stop = P33;sbit IR = P32; /红外接口#define uchar unsigned char#define uint unsigned int#define Data P0 /数据端口char data TimeNum=;char data Test1=;unsigned char irtime; /红外用全局变量bit irpro_ok,irok;bit irflag;/红外标志bit Flag;/定义正反转标志位unsigned char idata IRcord4; /处理后的红外码,分别是 客户码,客户码,数据码,数据码反码unsigned char idata irdata33; /33个高低电平的时间数据uchar code F_Rotation8=0x08,0x09,0x01,0x03,0x02,0x06,0x04,0x0c;uchar code B_Rotation8=0x0c,0x04,0x06,0x02,0x03,0x01,0x09,0x08;char code Tab16=0123456789ABCDEF; void InitLcd();void ShowString(unsigned char line,char *ptr);void ShowChar(unsigned char pos,unsigned char c);void WriteData(unsigned char c);void WriteCommand(unsigned char c);void DelayMs(uint ms);void DelayUs(uint us);uchar keyscan(void);/键盘扫描void zhengzhuan(void);/正转void fanzhuan(void);/反转void zhuan45(void);/正转45度void fanzhuan45(void);/反转45度void speedup(void);/加速void speeddw(void);/减速void hongwai(void);/红外接收void Ir_work(void);void Ircordpro(void);void TIM0init(void);void EX0init(void);void main(void)uchar key;InitLcd(); /初始化LCDDelayMs(25); /延时保证信号稳定EA=1; /全局中断开/EX0=1; /外部中断0开IT1=1; /边沿触发EX0init(); /初始化外部中断1,EX1=0TIM0init(); /初始化定时器0sprintf(Test1,Please press key!); /打印输出第一行信息,保存在 Test1变量中ShowString(0,Test1);/显示Test1到第一行sprintf(TimeNum,2013.06.03 WORK); ShowString(1,TimeNum);while(1) key=keyscan(); /调用键盘扫描 switch(key) case 0x7e: sprintf(Test1,Mode: Forward );ShowString(0,Test1);sprintf(Test1,Round Num: );ShowString(1,Test1);Flag=1;zhengzhuan(); break; case 0x7d: sprintf(Test1,Mode: Backward );ShowString(0,Test1);sprintf(Test1,Round Num: );ShowString(1,Test1);Flag=1;fanzhuan(); break; case 0x7b:break;/ 不用 case 0x77:break; case 0xbe: sprintf(Test1,Mode: Forward );ShowString(0,Test1);sprintf(Test1,Angle: +45 );ShowString(1,Test1);zhuan45(); break; case 0xbd:sprintf(Test1,Mode: Backward );ShowString(0,Test1);sprintf(Test1,Angle: -45 );ShowString(1,Test1);fanzhuan45(); break; case 0xbb:break; case 0xb7:break; case 0xde:sprintf(Test1,Mode: Forward );ShowString(0,Test1);sprintf(Test1,Speed Up );ShowString(1,Test1);speedup();break; case 0xdd: sprintf(Test1,MODE: Forward );ShowString(0,Test1);sprintf(Test1,Speed Dowm );ShowString(1,Test1);speeddw(); break; case 0xdb:break; case 0xd7: sprintf(Test1,Infrared Control);ShowString(0,Test1);sprintf(TimeNum, );ShowString(1,TimeNum);hongwai(); break; case 0xee:WriteCommand(0x01); break; /c 显示清屏 case 0xed:sprintf(Test1, 2010 CLASS 3 );ShowString(0,Test1);sprintf(TimeNum,DATE: 2013.06.03);ShowString(1,TimeNum); break; /d 显示信息 case 0xeb:break; case 0xe7:break;void DelayUs(uint us) while(-us);void DelayMs(uint ms) while(-ms) DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); void WriteCommand(unsigned char c) DelayMs(5);/操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;void WriteData(unsigned char c) DelayMs(5); /操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos=0x10) p=pos+0xb0; /是第二行则命令代码为0xc0 else p=pos+0x80; /是第一行则命令代码为0x80 WriteCommand(p);/写命令 WriteData(c); /写数据void ShowString(unsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i16;i+) ShowChar (l+,*(ptr+i);/循环显示16个字符 l=0x10或0x00void InitLcd() DelayMs(15); WriteCommand(0x38); /display mode WriteCommand(0x38); /display mode WriteCommand(0x38);/display mode WriteCommand(0x06); /显示光标移动位置 WriteCommand(0x0c); /显示开及光标设置 WriteCommand(0x01); /显示清屏uchar keyscan(void) /键盘扫描函数,使用行列反转 扫描法 uchar cord_h,cord_l;/行列值中间变量 P3=0x0f; /行线输出全为0 cord_h=P3&0x0f; /读入列线值 if(cord_h!=0x0f) /先检测有无按键按下 DelayUs(100); /去抖 if(cord_h!=0x0f) cord_h=P3&0x0f; /读入列线值 P3=cord_h|0xf0; /输出当前列线值 cord_l=P3&0xf0; /读入行线值 return(cord_h+cord_l); /键盘最后组合码值,退出该扫 描程序 return(0xff); /返回该值void ISR_Key(void) interrupt 2 using 1 /中断入口函数:按下P3.3触 发一次 DelayUs(500); if(!stop) Flag=0;irflag=0; void zhengzhuan(void)int i,j,k=0;P3=0x7f; EX1=1;while(Flag) for(j=0;j8;j+) for(i=0;i8;i+) /4相 P1=F_Rotationi; /输出对应的相 可以自行换成 反转表格 DelayUs(400); /改变这个参数可以调整电机 转速 ,数字越小,转速越大 k+; EX1=0;Test111=0+k/64; ShowString(1,Test1);void fanzhuan(void)int i,j,k=0;P3=0x7f; /变成独立矩阵 EX1=1; /开中断 while(Flag) for(j=0;j8;j+) for(i=0;i8;i+) /4相 P1=B_Rotationi; /输出对应的相 可以自行换成 反转表格 DelayUs(400); /改变这个参数可以调整电机 转速 ,数字越小,转速越大 k+; EX1=0;Test111=0+k/64; ShowString(1,Test1);void zhuan45(void)int i,num;for(num=0;num64;num+) for(i=0;i8;i+) /4相 P1=F_Rotationi; /输出对应的相 可以自行换成 正转表格 DelayUs(400); /改变这个参数可以调整电机转速 ,数字越小,转速越大 void fanzhuan45(void)int i,num;for(num=0;num64;num+) for(i=0;i8;i+) /4相 P1=B_Rotationi; /输出对应的相 可以自行换成 反转表格 DelayUs(400); /改变这个参数可以调整电机 转速 ,数字越小,转速越大 void speedup(void)int i,num,level,time;time=3600;for(level=0;level3;level+)for(num=0;num128;num+) /每转1圈后就速度增加1倍 for(i=0;i8;i+) /4相8拍 P1=F_Rotationi; DelayUs(time); time=time/2;void speeddw(void)int i,num,level,time;time=400;for(level=0;level3;level+)for(num=0;num128;num+) /每转1圈后就速度增加1倍 for(i=0;i8;i+) /4相 P1=F_Rotationi; /输出对应的相可以自行换成正转表格 DelayUs(time); /改变这个参数可以调整电机 转速 ,数字越小,转速越大 time=time*3;void hongwai(void)irflag=1;P3=0x7f;EX0=1;EX1=1;while(irflag)/主循环 if(irok) /如果接收好了进行红外处理 Ircordpro(); irok=0;/只需看IRcord2即可知道按下按键 if(irpro_ok) /如果处理好后进行工作处理, 如按对应的按键后显示对应的数字等 Ir_work(); EX1=0;EX0=0;/*定时器0初始化*/void TIM0init(void)/定时器0初始化 TMOD=0x02;/定时器0工作方式2,TH0是 重装值,TL0是初值 TH0=0x00; /重载值 TL0=0x00; /初始化值 ET0=1; /开中断 TR0=1; /*外部中断初始化*/void EX0init(void) IT0 = 1; /指定外部中断0下降沿触发,INT0 (P3.3)/ EX1 = 1; /使能外部中断/ EA = 1; /开总中断/*定时器0中断服务函数*/void tim0_isr (void) interrupt 1 using 1/定时器0中断服务函数 irtime+; /用于计数2个下降沿之间的时间/*外部中断1函数*/void ex0_isr (void) interrupt 0 using 1/外部中断1服务函数 static unsigned char i; /接收红外信号处理 static bit startflag; /是否开始处理标志位 if(startflag) if(irtime=33)/引导码 TC9012的头码,接收时间在为9S,下降沿触发,一体化接收电平与发射电平相反 i=0; irdatai=irtime;/存储33个电平中每个电平的持续时间,用 于以后判断是0还是1 irtime=0; i+; if(i=33) irok=1; /已经接收了32位码,提示可以解码 i=0; Flag=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论