步进电机正反转程序 一

合集下载

PLC实现步进电机的正反转及调整控制

PLC实现步进电机的正反转及调整控制

实训课题三PLC实现步进电机正反转和调速控制一、实验目的1、掌握步进电机的工作原理2、掌握带驱动电源的步进电机的控制方法3、掌握DECO指令实现步进电机正反转和调速控制的程序二、实训仪器和设备1、FX2-48MR PLC 一台2、两相四拍带驱动电源的步进电机一套3、正反切换开关、起停开关、增减速开关各一个三、步进电机工作原理步进电机是纯粹的数字控制电动机,它将电脉冲信号转换成角位移,即给一个脉冲信号,步进电机就转动一个角度,图3-1是一个三相反应式步进电机结图。

从图中可以看出,它分成转子和定子两部分。

定子是由硅钢片叠成,定子上有六个磁极(大极),每两个相对的磁极(N、S极)组成一对。

共有3对。

每对磁极都绕有同一绕组,也即形成1相,这样三对磁极有3个绕组,形成三相。

可以得出,三相步进电机有3对磁极、3相绕组;四相步进电机有4对磁极、四相绕组,依此类推。

反应式步进电动机的动力来自于电磁力。

在电磁力的作用下,转子被强行推动到最大磁导率(或者最小磁阻)的位置,如图3-1(a)所示,定子小齿与转子小齿对齐的位置,并处于平衡状态。

对三相异步电动机来说,当某一相的磁极处于最大导磁位置时,另外两相相必处于非最大导磁位置,如图3-1(b)所示,即定子小齿与转子小齿不对齐的位置。

图3—1三相反应式步进电动机结构图把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。

错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的结构中必须保证有错齿的存在,也就是说,当某一相处于对齿状态时,其它绕组必须处于错齿状态。

本实验的电机采用两相混合式步进电机,其内部上下是两个磁铁,中间是线圈,通了直流电以后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。

因为中间连接的电磁铁的两根线不是直接连接的,是采用在转轴的位置用一根滑动的接触片。

这样如果电磁铁转过了头,原先连接电磁铁的两根线刚好就相反了,所以电磁铁的N极S极就和以前相反了。

步进电机转速转向程序(仅供参考)

步进电机转速转向程序(仅供参考)

附录Ⅱ:/************************************************************* *************************************************************/#include "reg52.h"#include <intrins.h>sbit ForeWordLed=P1^0;#define Set_ForeWordLed ForeWordLed=0;#define ReSet_ForeWordLed ForeWordLed=1;sbit BackWordLed=P1^1;#define Set_BackWordLed BackWordLed=0;#define ReSet_BackWordLed BackWordLed=1;sbit AddSpdLed=P1^3;#define Set_AddSpdLed AddSpdLed=0;#define ReSet_AddSpdLed AddSpdLed=1;sbit SubSpdLed=P1^5;#define Set_SubSpdLed SubSpdLed=0;#define ReSet_SubSpdLed SubSpdLed=1;sbit ResetLed=P1^7;#define Set_ResetLed ResetLed=0;#define ReSet_ResetLed ResetLed=1;sbit ReSetKeyIn=P2^0; //0 低表有代输入sbit SubSpdKeyIn=P2^1;sbit AddSpdKeyIn=P2^2;sbit BackWordKeyIn=P2^3;sbit ForeWordKeyIn=P2^4;unsigned int motorSpdDelayUs;//A-AB-B-BC-C-CD-D-DA#define A_run P0=0x01;#define AB_run P0=0x03;#define B_run P0=0x02;#define BC_run P0=0x06;#define C_run P0=0x04;#define CD_run P0=0x0C;#define D_run P0=0x08;#define DA_run P0=0x09;unsigned char nowWordFlg;/****************************************************************** 函数功能:延时US入口函数:unsigned char us_value返回参数:无/******************************************************************/ void delay_us(unsigned int value) //delay about 1 us{while(value--){_nop_();}}/****************************************************************** 函数功能:延时MS入口函数:unsigned int ms_value返回参数:无/******************************************************************/ void delay_ms(unsigned int ms_value) //delay about 1 ms{unsigned int k,i;for(k=0;k<ms_value;k++){i=200;while(i--){_nop_();}}}/****************************************************************** 函数功能:电机正转程序入口函数:返回参数:无/******************************************************************/ void motor_Foreward(){A_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);DA_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:电机反转程序入口函数:返回参数:无/******************************************************************/ void motor_Backward(){DA_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);A_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ForeWordKeyIn(){if(!ForeWordKeyIn){delay_ms(10);if(!ForeWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_BackWordKeyIn(){if(!BackWordKeyIn){delay_ms(10);if(!BackWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取加速按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_AddSpdKeyIn(){if(!AddSpdKeyIn){delay_ms(10);if(!AddSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_SubSpdKeyIn(){if(!SubSpdKeyIn){delay_ms(10);if(!SubSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ReSetKeyIn(){if(!ReSetKeyIn){delay_ms(10);if(!ReSetKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:主函数入口函数:无返回参数:无/******************************************************************/ void main(){P0=0xff;P1=0xff;P2=0xff;motorSpdDelayUs=500;while(1){if(read_ReSetKeyIn()) //参数复位{motorSpdDelayUs=500;nowWordFlg=1;ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;Set_ResetLed;while(read_ReSetKeyIn());ReSet_ResetLed ;}if(read_SubSpdKeyIn()) //减速{ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;Set_SubSpdLed;while(read_SubSpdKeyIn()){if(motorSpdDelayUs<1000) motorSpdDelayUs+=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_SubSpdLed;}if(read_AddSpdKeyIn()) //加速{ReSet_BackWordLed;ReSet_ForeWordLed;Set_AddSpdLed;ReSet_SubSpdLed;while(read_AddSpdKeyIn()){if(motorSpdDelayUs>100) motorSpdDelayUs-=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_AddSpdLed;}if(read_ForeWordKeyIn()) //前进{Set_ForeWordLed;ReSet_BackWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_ForeWordKeyIn())motor_Foreward();ReSet_ForeWordLed;}if(read_BackWordKeyIn()) //后退{Set_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_BackWordKeyIn())motor_Backward();ReSet_BackWordLed;}};}。

单片机数码管显示+步进电机正反加速转动C语言程序

单片机数码管显示+步进电机正反加速转动C语言程序
void key ()
{
if(jia_key == 0)
{
delay(5);
if(jia_key == 0)
{
num++; //速度标识位
feng_ming_qi();
while(jia_key == 0) ;
for(k=125;k>0;k--);
}
/***************************************************************************************************/
void xianshi ( )//显示程序
{
delay(50);
if(zf_key ==0)
{
flag=~flag;
feng_ming_qi();
while(zf_key == 0);
}
}
if(stop_key == 0)
{
{
uchar j;
uint i;
for(j=0+table_begin;j<4+table_begin;j++)
{
P1 = code_table[j];
for(i=0;i<maichong;i++)
{
xianshi();
}
{
tong = 0xff;
tong = on[0];//位选为0;
liang = table[show_num];
delay(3);
liang = 0xff;
}
/***************************************************************************************************/

步进电机正反转程序

步进电机正反转程序

步进电机正反转程序#include <reg51.h> //51芯片管脚定义头文件#include <intrins.h> //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码sbit K1 = P3^2; //正转sbit K2 = P3^3; //反转sbit K3 = P3^4; //停止sbit BEEP = P3^6; //蜂鸣器/********************************************************//*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms/*/********************************************************/void delay(uint t){uint k;while(t--){for(k=0; k<125; k++){ }}}/********************************************************** /void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/********************************************************** /void beep(){uchar i;for (i=0;i<100;i++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器}/********************************************************/ /*/*步进电机正转/*/********************************************************/ void motor_ffw(){uchar i;uint j;for (j=0; j<8; j++) //转1*n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = FFW[i]; //取数据delay(2); //调节转速}}}/********************************************************//*/*步进电机反转/*/********************************************************/ void motor_rev(){uchar i;uint j;for (j=0; j<8; j++) //转1×n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = REV[i]; //取数据delay(2); //调节转速}}}/******************************************************** ** 主程序**********************************************************/main(){uchar r,N=64; //N 步进电机运转圈数while(1){if(K1==0){beep();for(r=0;r<N;r++){motor_ffw(); //电机正转if(K3==0){beep();break;} //退出此循环程序}}else if(K2==0){beep();for(r=0;r<N;r++){motor_rev(); //电机反转if(K3==0){beep();break;} //退出此循环程序}}elseP1 = 0xf0;}}/********************************************************/。

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。

所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。

•驱动器信号端定义:PUL+:脉冲信号输入正。

( CP+ )PUL-:脉冲信号输入负。

( CP- )DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。

•电机绕组连接A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。

•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。

不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。

输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。

在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。

按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。

注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。

2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。

步进电机正反转实验报告

步进电机正反转实验报告

步进电机正反转实验报告步进电机正反转实验报告一、实验名称:步进电机正反转训练二、控制要求要求实现电机的正转三圈,反转三圈,电机正转和反转的频率可不相同,然后这样循环3次,3次后电机停止转动。

三、PLCI/O地址分配表PLC的I/O地址Y0电机转向输出点Y1电机的转速输出点连接的外部设备控制转速点CP控制转向点CW四、程序梯形图五、程序分析:M11、M12、M13的波形图M21、M22、M23的波形图电机正转的频率是20赫兹,通过MOV指令送到D5中,在电机正传三圈后,电机反转,反转的频率是40赫兹,通过MOV指令送到D5中。

电机正转3次,反转2次,再通过M23得电进入正转,重复上面的循环,即电机正转后再反转,M23才得电一次,所以可以加一个M23控制一个计数器计数,当计数器计数到3时,再通过计数器的常闭开关把M10线圈断电,从而实现电机停止。

扩展阅读:微机实验报告步进电机正反转及调速设计微机原理与接口设计实验报告步进电机正反转及调速设计专业:机械设计制造及其自动化班级:10090112小组成员:周先军10901239张赓10901240胡一国08901312组别:B5摘要:本系统是基于STM8系列单片机的步进电机转速转向控制器。

该系统采用STM8S103F3P6单片机作为主控制器,运用L298全桥驱动器驱动步进电机,通过摇杆、按键控制电机转速,并且通过1602液晶显示器显示当前转速。

该系统中使用的四相步进电机,具有控制精度高,转动扭矩大等特点,实际生产中有广泛的运用。

系统中除了传统按键控制外,还增加遥控控制,单片机通过AD读取摇杆控制信号,实时控制电机转速。

整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。

关键词:控制单片机控制驱动电路正反转摇杆四相步进电机STM8L2一、系统方案1.1控制系统方案方案一:采用8086系列单片机。

8086是Inter系列的16位微处理器,数据处理能力强。

步进电机程序流程图

步进电机程序流程图

图1 主程序流程图说明:1、flag_stop为电机转动或停止标志位,为0表示转动,为1表示定时转动,默认为1,通过某一按键会改变该位的值;2、flag_mode为电机正转或反转标志位,为0表示正转,为1表示反转,默认为0,同过某一按键会改变改位的值;图2 按键处理函数流程图图3 电机转步函数流程图下面是诗情画意的句子欣赏,不需要的朋友可以编辑删除!!谢谢1. 染火枫林,琼壶歌月,长歌倚楼。

岁岁年年,花前月下,一尊芳酒。

水落红莲,唯闻玉磬,但此情依旧。

2. 玉竹曾记凤凰游,人不见,水空流。

3. 他微笑着,在岁月的流失中毁掉自己。

4. 还能不动声色饮茶,踏碎这一场,盛世烟花。

5. 红尘嚣浮华一世转瞬空。

6. 我不是我你转身一走苏州里的不是我。

7. 几段唏嘘几世悲欢可笑我命由我不由天。

8. 经流年梦回曲水边看烟花绽出月圆。

9. 人生在世,恍若白驹过膝,忽然而已。

然,我长活一世,却能记住你说的每一话。

10. 雾散,梦醒,我终于看见真实,那是千帆过尽的沉寂。

11. 纸张有些破旧,有些模糊。

可每一笔勾勒,每一抹痕迹,似乎都记载着跨越千年万载的思念。

12. 生生的两端,我们彼此站成了岸。

13. 缘聚缘散缘如水,背负万丈尘寰,只为一句,等待下一次相逢。

14. 握住苍老,禁锢了时空,一下子到了地老天荒15. 人永远看不破的镜花水月,不过我指间烟云世间千年,如我一瞬。

16. 相逢一醉是前缘,风雨散,飘然何处。

17. 虚幻大千两茫茫,一邂逅,终难忘。

相逢主人留一笑,不相识,又何妨。

18. 天下风云出我辈,一入江湖岁月催;皇图霸业谈笑间,不胜人生一场醉。

19. 得即高歌失即休,多愁多恨亦悠悠,今朝有酒今朝醉,明日愁来明日愁。

20. 直道相思了无益,未妨惆怅是清狂。

21. 看那天地日月,恒静无言;青山长河,世代绵延;就像在我心中,你从未离去,也从未改变。

22. 就这样吧,从此山水不相逢。

23. 人天自两空,何相忘,何笑何惊人。

电机正反转简单程序

电机正反转简单程序

电机正反转简单程序引言电机正反转是在许多电气控制和机器人领域中常见的需求。

通过编写简单的程序,我们可以实现对电机的正向和反向旋转控制。

本文将介绍如何编写一个简单的程序来实现电机的正反转。

什么是电机正反转?在控制电机时,正反转是指改变电机的旋转方向。

电机正转是指电机按照设定的方向进行旋转,而电机反转则是电机按照相反的方向进行旋转。

通过控制电机的正反转,我们可以实现精确的运动控制和机器人运动的调整。

电机正反转的原理电机正反转的实现原理基于电机的构造和控制电路。

常见的电机类型包括直流电机和交流电机。

无论是直流电机还是交流电机,它们的正反转控制原理都是通过控制电极之间的电流流向来实现的。

在直流电机中,通过改变直流电源的电极连接方式,可以改变电流在电机绕组中的流向,从而改变电机的旋转方向。

在交流电机中,可以通过改变电机的相序来改变绕组中电流的流向,进而改变旋转方向。

编写电机正反转程序的步骤编写电机正反转程序的步骤主要包括以下几个方面:1. 确定电机类型和控制方式首先,我们需要确定使用的电机类型和控制方式。

根据不同的电机类型和控制方式,编写电机正反转程序的方法会有所不同。

例如,直流电机的正反转控制需要改变电机电极的连接方式,而交流电机的正反转控制需要改变电机的相序。

2. 确定控制电路和接口在编写程序之前,我们需要确定控制电路和接口。

控制电路和接口用于将控制信号传输到电机,从而实现对电机正反转的控制。

常见的电机控制电路和接口包括H桥电路、驱动模块和微控制器。

3. 编写程序根据电机类型和控制方式,我们可以编写相应的程序。

程序的主要任务是向电机发送控制信号以实现正反转。

在编写程序时,需要根据电机的规格和特性设置合适的参数,如电机转速、转向等。

4. 测试和调试完成程序编写后,我们需要进行测试和调试,以确保程序能够正常运行。

在测试和调试过程中,我们可以通过观察电机的转动方向和速度来验证程序的正确性。

如果程序存在问题,可以对程序进行调试和修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机正反转程序一
#include &lt;reg51.h&gt; //51芯片管脚定义头文件
#include &lt;intrins.h&gt; //内部包含延时函数_nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码
sbit K1 = P3^2; //正转
sbit K2 = P3^3; //反转
sbit K3 = P3^4; //停止
sbit BEEP = P3^6; //蜂鸣器
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k&lt;125; k++)
{ }
}
}
/**********************************************************/
void delayB(uchar x) //x*0.14MS
{
uchar i;
while(x--)
{
for (i=0; i&lt;13; i++)
{ }
}
}
/**********************************************************/
void beep()
{
uchar i;
for (i=0;i&lt;100;i++)
{
delayB(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}
/********************************************************/ /*
/*步进电机正转
/*
/********************************************************/ void motor_ffw()
{
uchar i;
uint j;
for (j=0; j&lt;8; j++) //转1*n圈
{
if(K3==0)
{break;} //退出此循环程序
for (i=0; i&lt;8; i++) //一个周期转45度
{
P1 = FFW[i]; //取数据
delay(2); //调节转速
}
}
}
/********************************************************/ /*
/*步进电机反转
/*
/********************************************************/ void motor_rev()
{
uchar i;
uint j;
for (j=0; j&lt;8; j++) //转1×n圈
{
if(K3==0)
{break;} //退出此循环程序
for (i=0; i&lt;8; i++) //一个周期转45度
{
P1 = REV[i]; //取数据
delay(2); //调节转速
}
}
}
/******************************************************** *
* 主程序
*
*********************************************************/ main()
{
uchar r,N=64; //N 步进电机运转圈数
while(1)
{
if(K1==0)
{
beep();
for(r=0;r&lt;N;r++)
{
motor_ffw(); //电机正转
if(K3==0)
{beep();break;} //退出此循环程序
}
}
els
e if(K2==0)
{
beep();
for(r=0;r&lt;N;r++)
{
motor_rev(); //电机反转
if(K3==0)
{beep();break;} //退出此循环程序
}
}
else
P1 = 0xf0;
}
}
/********************************************************/。

相关文档
最新文档