|
|
本帖最后由 zolch 于 2017-8-24 15:43 編輯
通過(guò)51單片機(jī)接風(fēng)向傳感器采集風(fēng)向信息,再將所采集的風(fēng)向信息顯示在1602上,并利用單片機(jī)將采集到的風(fēng)向信息控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),比如風(fēng)向角度值(1-360度),風(fēng)向增加1度,51控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)1度。現(xiàn)所寫(xiě)的風(fēng)向驅(qū)動(dòng)步進(jìn)電機(jī)程序如下,編譯沒(méi)有問(wèn)題,接到實(shí)物上電機(jī)不轉(zhuǎn),能感受到里面震動(dòng)。現(xiàn)在不知道問(wèn)題出在哪里,希望有大神來(lái)幫忙看下!
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; //啟動(dòng)ad轉(zhuǎn)換
_nop_();
adwr=1;
delayms(1000);
P1=0xff; //讀取P1口之前先給其寫(xiě)全1
adrd=1; //選通AD0804 CS 端
_nop_();
adrd=0; //A/D讀使能
_nop_();
adval=P1; //A/D數(shù)據(jù)讀取賦給P1口
adrd=1;
WD=adval;
WD=WD*72/51; //獲得當(dāng)前時(shí)刻的風(fēng)向值
g=WD; //將當(dāng)前時(shí)刻的風(fēng)向值賦給g
{
if(WD>g) //判斷下一時(shí)刻的風(fēng)向值大于g
{ h=WD; //將下一時(shí)刻的風(fēng)向值賦給h
{ for(l=0;l<(h-g);l++) //循環(huán)h-g次
for(l=1;l>0;l--) //步進(jìn)電機(jī)旋轉(zhuǎn)角度
{
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)字符型強(qiáng)制轉(zhuǎn)換成整形 1602分出 個(gè)位跟小數(shù)點(diǎn)后四位
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);
} |
|