单片机控制步进电机停止与正反转单片机控制步进电机停止与正反转
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint count; //当前计数值
uint distance;
bit intt=1;
unsigned char cont=0;
unsigned char co=0;
uchar buf;
//uchar m,lm,cm;
/**************针脚定义**********...
单片机控制步进电机停止与正反转
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint count; //当前计数值
uint distance;
bit intt=1;
unsigned char cont=0;
unsigned char co=0;
uchar buf;
//uchar m,lm,cm;
/**************针脚定义************/
sbit rect_wave=P2^0; //晶振控制信号
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit CLR=P1^3;
sbit DATA=P1^4;
sbit CLK=P1^5;
sbit d=P2^1;
sbit cp=P2^2;
sbit dir=P2^3;
/***********************************/
/**************函数声明************/
void time0over(void); //定时器计时程序 void clrlcd(void); //clr LCD
void c_send(unsigned char y); //发命令 void reset(void); // reset LCD
void d_send(unsigned char x); //发数据 void pos(unsigned char pos); //设定显示位置 void l_delay(unsigned int t); //长延时 void trans(j);
void ret(void); //初始化系统 void retcont(void); //定时器复位 void math(void); //计算测量距离
/***************************/
void init(void)
{ TH1=0xf3;
TL1=0xf3;
PCON=0x80;
TR1=1;
SCON=0x50; /*串口初始化设置,波特率4800BPS*/
}
//*******************************//
void send(uchar dat) /*发送子程序*/
{ //uchar i;
/*发送一个数据*/
SBUF=dat;
while(TI==0);
TI=0;
}
/***********************************/
void turn (void) //电机转动控制
{
unsigned char x;
cont++;
cp=~cp;
l_delay(50);
cp=~cp;
co++;
if(co == 3)
{d=~d;
}
if(co == 4)
{d=~d;
co=0;
}
if (cont == 200) //判断是否进行反转复位
{dir=~dir;
cont=0;
for(x=0;x < 200;x++)
{cp=~cp;
l_delay(5);
cp=~cp;
co++;
if(co == 3)
{d=~d;
}
if(co == 4)
{d=~d;
co=0;
}
}
dir=~dir;
cont=0;
}
}
/**************子程序**********************/
void int0 () interrupt 0 //中断0服务程序
{
EX0=0; //关闭中断
TR0=0; //关闭定时器
TF0=0; //标志位清零
rect_wave=0; //停止发送超声波
intt=0;
}
void work(void)
{
if(!intt)
{
intt=1;
if (distance < 400)
{
buf=distance;
send(buf);
turn();
math();} //计算所测得的距离
l_delay(5); //延时
retcont(); //定时器复位
rect_wave=1;
count=0;
}
}
void math(void) //计算所测得的距离 { uchar m,lm,cm;
cm=distance%10; //取距离的最低位
distance=distance/10; //取距离的次高位
lm=distance%10;
distance=distance/10; //取距离的最高位
m=distance%10;
clrlcd(); //输出计算结果
pos(0);
d_send('d');
d_send('i');
d_send('s');
d_send('=');
//pos(4);
d_send(m+0x30);
d_send(lm+0x30);
d_send(cm+0x30);
d_send('c');
d_send('m');
l_delay(500);
}
void time0over(void) //定时器计时程序
{ TF0=0;
count++;
distance=count;
}
/*
void trans(j)
{
switch(j)
{
case 0: d_send('0');break;
case 1: d_send('1');break;
case 2: d_send('2');break;
case 3: d_send('3');break;
case 4: d_send('4');break;
case 5: d_send('5');break;
case 6: d_send('6');break;
case 7: d_send('7');break;
case 8: d_send('8');break;
case 9: d_send('9');break;
}
}
*/
delay() //延时
{
int i;
for(i=0;i<1000;i++); }
void l_delay(unsigned int t) //延时
{
unsigned int p;
unsigned int j;
for(j=0;j
本文档为【单片机控制步进电机停止与正反转】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。