dda算法控制电机_单片机控制步进电机c语言程序

//============步进电机正反转调速&1602显示=================

#include &ltreg52.h&gt //52芯片管脚定义头文件

#include &ltintrins.h&gt //内部包含延时函数 _nop_();

#define uchar unsigned char

#define uint unsigned int

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //正转相序表

uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //反转

sbit K1 = P3^2; //运行与停止

sbit K2 = P3^3; //设定圈数

sbit K3 = P3^4; //方向转换

sbit K4 = P3^5; //速率调整

sbit BEEP = P3^6; //蜂鸣器

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

bit on_off=0; //运行与停止标志

bit direction=1; //方向标志

bit rate_dr=1; //速率标志

bit snum_dr=1; //圈数标志

uchar code cdis1[ ] = {" STEPPING MOTOR "};

uchar code cdis2[ ] = {"CONTROL PROCESS"};

uchar code cdis3[ ] = {" STOP "};

uchar code cdis4[ ] = {"NUM: RATE: "};

uchar code cdis5[ ] = {" RUNNING "};

uchar m,v=0,q=0;

uint number=0,number1=0;

uchar snum=10,snum1=10; //预设定圈数

uchar rate=2; //预设定速率

uchar data_temp,data_temP1,data_temp2;

/********************************************************/

/*

/* 延时t毫秒

/* 11.0592MHz时钟,延时约1ms

/* /********************************************************/

void delay(uint t)

{

uchar k;

while(t--)

{

for(k=0; k&lt125; k++){ }

}

}

/********************************************************/

void delayB(uchar x) //x*0.14ms

{

uchar i;

while(x--)

{

for (i=0; i&lt13; i++){ }

}

}

/********************************************************/

void beep()

{

uchar j;

for (j=0;j&lt100;j++)

{

delayB(4);

BEEP=!BEEP; //BEEP取反

}

BEEP=1; //关闭蜂鸣器

delay(170);

}

/********************************************************/

/*

/*检查LCD忙状态

/*lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。

/*

/********************************************************/

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

/********************************************************/

/*

/*写指令数据到LCD

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

/*

/********************************************************/

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

/********************************************************/

/*

/*写显示数据到LCD

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。

/*

/********************************************************/

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值