本帖最后由 zolch 于 2017-8-24 15:43 编辑
通过51单片机接风向传感器采集风向信息,再将所采集的风向信息显示在1602上,并利用单片机将采集到的风向信息控制步进电机的转动,比如风向角度值(1-360度),风向增加1度,51控制步进电机转动1度。现所写的风向驱动步进电机程序如下,编译没有问题,接到实物上电机不转,能感受到里面震动。现在不知道问题出在哪里,希望有大神来帮忙看下!
void main()
{
uchar adval;
uint WD;
uint bai,shi,ge,F1,F2,F3,F4;
init();
wela=1;
P0=0x7f;
wela=0;
while(1)
{
adwr=1;
_nop_();
adwr=0; //启动ad转换
_nop_();
adwr=1;
delayms(1000);
P1=0xff; //读取P1口之前先给其写全1
adrd=1; //选通AD0804 CS 端
_nop_();
adrd=0; //A/D读使能
_nop_();
adval=P1; //A/D数据读取赋给P1口
adrd=1;
WD=adval;
WD=WD*72/51; //获得当前时刻的风向值
g=WD; //将当前时刻的风向值赋给g
{
if(WD>g) //判断下一时刻的风向值大于g
{ h=WD; //将下一时刻的风向值赋给h
{ for(l=0;l<(h-g);l++) //循环h-g次
for(l=1;l>0;l--) //步进电机旋转角度
{
for (t=0; t<8; t++)
{
P1 = FFW1[t]&0x1f;
delay(1) ;
}
}
}
}
else if(WD<g)
{ h=WD;
{ for(l=0;l<(h-g);l++)
for(l=1;l>0;l--)
{
for (t=0; t<8; t++)
{
P1 = FFZ1[t]&0x1f;
delay(1);
}
}
}
}
else
{;}
}
bai=(int)WD/100;
shi=(int)WD%100/10;
ge=(int)WD%10; //(int)字符型强制转换成整形 1602分出 个位跟小数点后四位
F1=(int)(WD*10)%10;
F2=(int)(WD*100)%10;
F3=(int)(WD*1000)%10;
F4=(int)(WD*10000)%10;
lcd_display(bai,shi,ge,F1,F2);
} |