本帖最后由 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);
} |