本帖最后由 发烧狂 于 2015-5-9 10:36 编辑
跪求大神给调试下这个程序
原理图还没画完 另外参照教程做了一个 ae2501b电机驱动 不知道对不对 求大神再给做一个 这个是百度给的ae2501b的信息
http://wenku.baidu.com/view/6444c115f18583d049645972.html
#include<AT89X51.H>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*---接口定义 ---*/
sbit Menu = P2^5; //菜单选择
sbit TZDJ = P2^4; //停止电机
sbit ZFZ = P2^3; //正反转选择
sbit DJXZ = P2^2;//电机选择
sbit LED_DK1 = P2^1; //数码管段控第1位
sbit LED_DK2 = P2^0; //数码管段控第2位
sbit ADC0832_CS = P1^1;
sbit ADC0832_CLK = P1^2;
sbit ADC0832_DODI = P1^3; //停止电机
sbit DJ1a = P1^4; //直流电机1控制+
sbit DJ1d = P1^5;//直流电机1控制-
sbit DJ2a = P1^6; //直流电机2控制+
sbit DJ2d = P1^7;//直流电机2控制-
sfr DAT = 0x80; //数码管8位段控数据
sfr JXQ_DAT = 0xB0; //鉴相器8位数据
void Init();
void tzjcl();
void LED_display();
void delay();
uchar Menu_value=0,DJXZ_value=0,ZFZ_value=0,TZD_value=0,TZDJ_value=0;
uchar *LED_1,flag=0,ADC0832_Hd,ADC0832_Ld,i,k,ADC0832_dat=100, H_dat=10;
/*---主函数---*/
void main(void)
{
Init();
while(1)
{
if((Menu=0)||(DJXZ=0)||(ZFZ=0)||(TZDJ=0))
{
TH1 = 0xfc;
TL1 = 0x18;
TR1=1;
}
LED_display();
}
}
void Init()
{
ADC0832_CS = 1;
LED_1=&ADC0832_dat;
TMOD=0x10;
TH1 = 0xfc;
TL1 = 0x18;
EA=1;
ET1=1;
TR1=0;
}
/*---按键判断与处理程序---*/
void t1(void) interrupt 3 using 0
{
TR1=0;
flag=flag+1;
if(flag=1)
{
if(Menu=0)
{
if(Menu_value!=2)
Menu_value=Menu_value+1;
else
Menu_value=0;
}
if(DJXZ=0)
{
if(DJXZ_value!=1)
DJXZ_value=DJXZ_value+1;
else
DJXZ_value=0;
}
if(ZFZ=0)
{
if(ZFZ_value!=1)
ZFZ_value=ZFZ_value+1;
else
ZFZ_value=0;
}
if(TZDJ=0)
{
if(TZDJ_value!=1)
TZDJ_value=TZDJ_value+1;
else
TZDJ_value=0;
}
loop:if((Menu=1)&&(DJXZ=1)&&(ZFZ=1)&&(TZDJ=1))
{
TH1 = 0xfc;
TL1 = 0x18;
TR1=1;
flag=1;
}
else
goto loop;
}
if(flag=2)
{
if((Menu=1)&&(DJXZ=1)&&(ZFZ=1)&&(TZDJ=1))
{
flag=0;
tzjcl();
}
else
goto loop;
}
}
/*---塔吊运行程序---*/
void tzjcl()
{
if(Menu_value=0) //运行电机
{
if(TZDJ_value=0)
{
if(DJXZ_value=0)
{
if(ZFZ_value=0)
{
DJ1a = 1;
DJ1d = 0;
}
else
{
DJ1a = 0;
DJ1d = 1;
}
}
else
{
if(ZFZ_value=0)
{
DJ2a = 1;
DJ2d = 0;
}
else
{
DJ2a = 0;
DJ2d = 1;
}
}
}
else
{
DJ1a = 0;
DJ1d = 0;
DJ2a = 0;
DJ2d = 0;
}
}
if(Menu_value=1) //测量物重
{
loop:ADC0832_Hd= 0;
ADC0832_Ld= 0;
k= 0;
_nop_ ();
ADC0832_CS = 0;
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
ADC0832_CLK = 1;
ADC0832_DODI = 1;
_nop_ ();
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
ADC0832_CLK = 1;
ADC0832_DODI = 0;
_nop_ ();
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
ADC0832_CLK = 1;
_nop_ ();
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
for(i=0;i<8;i++)
{
ADC0832_CLK = 1;
_nop_ ();
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
ADC0832_Hd |= ADC0832_DODI;
ADC0832_Hd<<=1;
}
for(i=0;i<8;i++)
{
ADC0832_CLK = 1;
_nop_ ();
_nop_ ();
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
k|= ADC0832_DODI;
k<<=i;
ADC0832_Ld |= k;
}
ADC0832_CLK = 1;
_nop_ ();
_nop_ ();
ADC0832_CS = 1;
ADC0832_CLK = 0;
_nop_ ();
_nop_ ();
if(ADC0832_Hd=ADC0832_Ld)
{
ADC0832_Hd=ADC0832_dat;
LED_1=&ADC0832_dat;
}
else
goto loop;
}
if(Menu_value=2)
//测量高度
{
H_dat=(JXQ_DAT/16)*10+(JXQ_DAT%16);
LED_1=&H_dat;
}
}
/*---显示函数---*/
void LED_display()
{
uchar code table[10]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f
};
//数码管段码,分别为0到9.
uchar code table2[8]={0x01,0x02}; // 数码管位空序列
uchar table1[2];
table1[0]=*LED_1%10;
table1[1]=*LED_1/10;
LED_DK1=table2[0];
delay();
DAT=table[table1[1]];
LED_DK2=table2[1];
delay();
}
/*---延时函数---*/
void delay()
{
uchar i,j;
for(i=200;i>0;i++)
{
for(j=200;j>0;j++);
}
}
-
-
所需的电机和驱动
-
左图是找的 这个好像也不符合 右图是自己做的
-
-
我程序.rar
下载积分: 积分 -1 分
1.75 KB, 下载次数: 3, 下载积分: 积分 -1 分
好像是系统设置的下载都扣积分 这个我没法设置 程序码的有点乱 那我贴下面了 先谢了
程序贴上面了 求救命 时间紧急
这么多警告 会不会有问题 带警告的都是if语句
我就想问,这个ae2501b电机驱动,你做仿真模型了吗?
前些天把元器件自制出来了,后来发现需要模型才能用 后来放弃了
一周热门 更多>