📄 text1
字号:
//********************************************************************************
// 步近电机控制程序
// 完整篇
// 测试可以运行
//********************************************************************************
#include <at89x51.h>
#include <stdio.h>
bit b=0,q=0;
unsigned char code j[3]={9,6,3}; //速度选项
unsigned char code z[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转
unsigned char code f[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};//反转
unsigned char code xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//显示
unsigned char code wx[]={0x01,0x02,0x04,0x10,0x20,0x40,0x80};//位选
unsigned char x,i;
unsigned char n,y,m;
unsigned int c,s,s1,s2,s3,s4;
unsigned char e[7];//缓冲数据
void delay(int a) //延时
{ while(--a); }
void led() // 设定圈数并显示
{
s1=(int)s%10;
s2=(int)s%1000%100/10;
s3=(int)s%1000/100;
s4=(int)s/1000;
e[0]=xs[y]; //速度设定
e[1]=xs[b]; // 正反转
e[2]=xs[q]; //开始
e[3]=xs[s1]; //设定
e[4]=xs[s2];
e[5]=xs[s3];
e[6]=xs[s4];
}
void control()
{
if(b==0) //判断正反转
P1=z[x];
else
P1=f[x];
if(P3_3==0) // 选择正反转
delay(10000);
if(P3_3==0)
b=~b;
if(P3_4==0) //转动速度设定
delay(10000);
if(P3_4==0)
y++;
if(y==3)
y=0;
if(P3_5==0) //转动圈数设定
delay(10000);
if(P3_5==0)
s++;
if(s==10000)
s=0;
}
void main()
{
TMOD=0x11;
TH0=(65536-m*1000)/256;
TL0=(65536-m*1000)%256;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
ET1=1;
EA=1;
while(1)
{
led();
control();
if(P3_2==0) //电机启动选择(1启动,0停止)
delay(10000);
if(P3_2==0)
q=~q;
if(q==0 || c==s*10)//判断是否启动和设定圈数是否已到
ET0=0;
else
{
delay(100);
ET0=1;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 3 //给电机脉冲
{
x++; //每隔(m*1000)就读取一个脉冲
c++;
if(x==8)
x=0;
m=j[y];//代入设定初始数值
TH0=(65536-m*1000)/256;
TL0=(65536-m*1000)%256;
}
void t1(void) interrupt 3 using 1 // 显示部分
{
P2=wx[i];
P0=e[i];
i++;
if(i==7)
i=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -