这个简单,让我来教楼主怎么玩
首先我说下思路:
我们采用P1口来采集ADC0832的8位数据,用P0.0口控制步进电机动作,利用T0的时间中断来采集P1口的ADC0832数据并做出比较后设置步进电机启动标志位start=1;并设置他的运行频率,当然,楼主没说怎么比较,我这就只是写了个简单的例子,一通百通,希望对你有帮助
下面是程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned int m=0,n=0; //设置循环的周期
unsigned char start=0,t0temp=0;
sbit Y0=P0^0; //控制步进电机的管脚
delay()
{
unsigned char i,j;
for(i=m;i>0;i--)
for(j=n;i>0;j--);
}
main()
{
//自检测T0时间设置
ET0=1;
TMOD|=0x01;
TH0=0XFC; //1ms中断扫描
TL0=0X66;
IT0=1; //下降沿触发
TR0=0; //关闭扫描
/
#include?<reg52.h> ?
#include?<intrins.h>
#define?uint?unsigned?int
#define?uchar?unsigned?char
#define?_Nop()?_nop_()
#define?motor?P0?
sbit?P12?=?P1^2;?
sbit?P11?=?P1^1;?
sbit?P10?=?P1^0;?
sbit?led1?=?P1^3;?
sbit?led2?=?P1^4;?
uchar?code?table1[]={0xf3,0xf6,0xfc,0xf9};?
uchar?code?table2[]={0xf3,0xf9,0xfc,0xf6};?
void?delay_1ms(uchar?x)
{
uchar?j;
while(x--)?{?for(j=0;j<125;j++);?}
}
void?main()
{
uchar?yunzhuang=0;? uchar?count=0;? motor?=?0xf0;?while(1){ if(yunzhuang==0){
motor?=?0xf0;?
led1=0;led2=0;
}
else?if(yunzhuang==1){led1=0;led2=1; ?//等于0为点亮LED灯
motor?=?table1[count];?
}
else?if(yunzhuang==2){led1=1;led2=0; ?//等于0为点亮LED灯
motor?=?table2[count];?
}
count++; if(count>=4)?count=0; delay_1ms(5); if(P12==0){delay_1ms(3);
if(P12==0){
yunzhuang?=?1;
}
}
else?if(P11==0){delay_1ms(3);
if(P11==0){
yunzhuang?=?0;
count?=?0;
}
}
else?if(P10==0){delay_1ms(3);
if(P10==0){
yunzhuang?=?2;
}
}
}}
用单片机的四个口接uln的四个输入,然后uln四个输出接步进电机的ABCD,剩下的那一根红线是接VCC的。控制单片机四个口的输出控制正反转
uchar zheng[8] ={0x01,0X03,0x02,0X06,0x04,0X0C,0x08,0X09};//正转 电机导通相序 A-AB-B-BC-C-CD-D-DA
uchar fan[8]={0X09,0X08,0X0C,0X04,0X06,0X02,0X03,0X01};//反转 电机导通相序 DA-D-CD-C-BC-B-AB
void zhengzhuan()//正转函数
{
uchar a;
for(a=0;a<8;a++)
{
SM=zheng[a];
delay(speed);//过多长时间让a自加,每次自加使电机导通线圈改变进而转动。
//通过调节a自加的时间来改变转动一个角度的时间,即角速度 ,delay是延时函数
}
}
void fanzhuan()//反转函数
{
uchar b;
for(b=0;b<8;b++)
{
SM=fan[b];
delay(speed);
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报