标题:
请问这个程序为什么会这样呢?希望大神帮个忙看看
[打印本页]
作者:
cgycgy
时间:
2019-12-22 23:00
标题:
请问这个程序为什么会这样呢?希望大神帮个忙看看
0.png
(306.76 KB, 下载次数: 32)
下载附件
2019-12-22 23:02 上传
程序在这里;
#include<reg51.h>
#include<stdio.h>
void delay1(void);
void delay2(void);
void display(int);
int bs=0;
main()
{ char a,b,c,d,j,*q,
done1[8]={0x01,0x02,0x04,0x00,0x01,0x04,0x02,0x00},
done2[8]={0x03,0x06,0x05,0x00,0x03,0x05,0x06,0x00}, done3[14]={0x01,0x03,0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00};
L: a=P1;
while(!(a&0x08)) //判断是否启动,若没启动则重新判断
{ P3=0x08;
delay1();
a=P1; }
//...............................................判断工作模式
if(a&0x01) //方式1模型
q=done1;
else if(a&0x02) //方式2模型
q=done2;
else if(a&0x04) //方式3模型
q=done3;
//...............................................判断电机转向
if(a&0x10) //判断电机是否要正转
{ P3=0x10; //P1.4口为1,电机正转,红灯亮
b=0;}
else
{ P3=0x20; //P1.4口为0,电机反转,黄灯亮
if(a&0x04)b=7; //反转时将b置数,使指针指到数组反相序部分
else b=4; }
//....................................................
d=b;
while(1)
{ c=*(q+b); //判断电机步数是否走完
if(c==0)b=d; //步数走完,电机重新再走
else
{ P3=c; //从P3输出电机控制信号
b++;
bs++; //总步数加1
display(bs); //显示步数
j=a;
a=P1;
if(a!=j) //判断P1口状态信号是否改变
{ if(!(a&0x08))bs=0; //若为停止信号,总步数清零
goto L; } //状态信号改变,返回到开始,重新对电机控制
}
}
}
void delay1() //延时5ms子程序
{ int i,j;
for(i=0;i<200;i++)
for(j=0;j<300;j++);
}
void delay2() //延时50us子程序
{ int i,j;
for(i=0;i<10;i++)
for(j=0;j<60;j++);
}
void display(int n)
{unsigned char tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
unsigned char i,k,t,num[4];
num[0]=n%10; //将总步数的各位分别存在num数组中
num[1]=(n/10)%10;
num[2]=(n/100)%10;
num[3]=(n/1000)%10;
for(t=0;t<50;t++) //扫描50次
{ k=0x08; //位选码指向最左一位,第四位
for(i=0;i<4;i++)
{ P2=k; //从P2口输入位选码
P0=~(tab[num[i]]); //取出显示码,并从P0口输出显示码
k=k>>1; //求下一个位选码
delay2();
}
}
}
复制代码
作者:
诸天明月
时间:
2019-12-23 07:49
你没注意共阴还是共阳数码管,你去查看下对应的16进制吧
作者:
moluxiyan
时间:
2019-12-23 10:29
你要问什么
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1