找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1831|回复: 1
打印 上一主题 下一主题
收起左侧

AT89C51单片机驱动步进电机控制系统程序改错

[复制链接]
跳转到指定楼层
楼主
at89c51单片机驱动步进电机,可以实现加减速,启动暂停和通过键盘输入设定最高转数,调试运行后有问题,电机不转,只有转数在计数,程序有误,求大神修改
#include <at89x51.h>
#define uchar unsigned char
//uchar code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};
char seg_0[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
char seg_point[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E};
int a=0, b=0,c=0x01;
unsigned int t,key,x=0,y,z=0,m=0,n;
char ge,shi,bai,qian,wan;
char age,ashi,abai,aqian,awan;
uchar readkey;
uchar x_temp,y_temp;
void delay(char i)
{char j=0,n=0;
for(;j<i;j++)
{for(;n<100;n++)
{
}
}
}
void time0() interrupt 1
{ TH0=(65536-t)/256;
TL0=(65536-t)%256;
if(b)
{
if(z/4<x||x==0)
{
if(a)
{
if(c&0x08)
{
c=0X01;
z++;
}
else
{
c<<=1;
}
P3=c;
}
else
{
z=0;
}
}
else if(z/4==x) {a=0;}
}
else
{
if(z/4<x||x==0)
{
if(a)
{
if(c&0x01)
{
c=0X08;
z++;
}
else
{
c>>=1;
}
P3=c;
}
else
{
z=0;
}
}
else if(z/4==x) {a=0;}
}
}
void time1() interrupt 3
{
TH1=0xd8;
TL1=0xef;
if(a)
{
P2=0XFE;
P0=seg_0[ge];
delay(5);
P2=0XFD;
P0=seg_0[shi];
delay(5);
P2=0XFB;
P0=seg_0[bai];
delay(5);
P2=0XF7;
P0=seg_0[qian];
delay(5);
P2=0XEF;
P0=seg_0[wan];
delay(5);
if(b==0)
{
P2=0XdF;
P0=0x40;
}
}
else
{
P2=0XFE;
P0=seg_0[age];
delay(5);
P2=0XFD;
P0=seg_0[ashi];
delay(5);
P2=0XFB;
P0=seg_0[abai];
delay(5);
P2=0XF7;
P0=seg_0[aqian];
delay(5);
P2=0XEF;
P0=seg_0[awan];
delay(5);
}
}
void Key_Scan(void)
{
P1=0x0f;
x_temp=P1&0x0f;
if(x_temp!=0x0f)
{
P1=0xf0;
y_temp=P1&0xf0;
readkey=x_temp|y_temp;
readkey=~readkey;;
x++;
switch(readkey)
{
case 0x11:key=0; break;
case 0x21:key=1; break;
case 0x41:key=2;break;
case 0x81:key=3; break;
case 0x12:key=4;break;
case 0x22:key=5;break;
case 0x42:key=6; break;
case 0x82:key=7; break;
case 0x14:key=8; break;
case 0x24:key=9; break;
case 0x44:key=10;break;
case 0x84:key=11;break;
case 0x18:key=12;break;
case 0x28:key=13;break;
case 0x48:key=14;break;
case 0x88:key=15;break;
default: key=16;break;
}
}
}
main()
{
int i;
int j;
t=30000;
TH0=(65536-t)/256;
TL0=(65536-t)%256;
TMOD=0X11;
TR0=0X01;
TF0=0X00;
PT0=0;
ET0=0X01;
TH1=0xd8;
TL1=0xef;
TR1=0X01;
TF1=0X00;
PT1=1;
ET1=0X01;
EA=0X01;
P3=0x01;
P2=0XFE;
key=0;
while(1)
{
j=z/4;
i=j;
ge=i%10;
i=j/10;
shi=i%10;
i=j/100;
bai=i%10;
i=j/1000;
qian=i%10;
i=j/10000;
wan=i%10;
P1=0x0f;
if(P1!=0x0f&&a==0)
{
if(P1!=0x0f&&a==0)
{
Key_Scan();
}
if(key==15)
{
age=0;
ashi=0;
abai=0;
aqian=0;
awan=0;
x=0;
m=0;
}
else if(m<6553)
{
m=m*10+key;
age=m%10;
n=m/10;
ashi=n%10;
n=m/100;
abai=n%10;
n=m/1000;
aqian=n%10;
n=m/10000;
awan=n%10;
x=m;
}
while(P1!=0xf0);
}
while(P3_7)
{
while(P3_7);
a=~a;
}
while(P3_6)
{
while(P3_6);
b=~b;
}
while(P3_5)
{
while(P3_5);
if(t<=40000)
{
t=t+10000;
}
}
while(P3_4)
{
while(P3_4);
if(t>=20000)
{
t=t-10000;
}
}
}
}

7MDQBY753(1H[(ZUZ{FXITK.png (187.71 KB, 下载次数: 44)

7MDQBY753(1H[(ZUZ{FXITK.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:749922 发表于 2020-5-12 14:20 | 只看该作者
请问你解决了吗,我也在网上查到了这个,然后仿真的时候单片机全部输出高电平,想有人解答以下。你应该注释以下感觉看得更清楚。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表