標題:
這個代碼哪里錯了;為什么那個步進電機轉(zhuǎn)的這么慢,而且還只轉(zhuǎn)了半圈求大神幫我改下
[打印本頁]
作者:
zgp535936402
時間:
2018-6-5 22:24
標題:
這個代碼哪里錯了;為什么那個步進電機轉(zhuǎn)的這么慢,而且還只轉(zhuǎn)了半圈求大神幫我改下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit A0= P1^0;
sbit A1 =P1^1;
sbit B0 =P1^2;
sbit B1 =P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
uchar su_du=9; //轉(zhuǎn)速
bit fang_xiang=0; //方向
bit qi_dong=1; //啟動標志
code uchar shu_ma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,2,0xf8,0,0x10}; //數(shù)碼管字段編碼
void yanshi2(uint a) //延時程序
{
while(a--);
}
uchar an_jian() //按鍵檢測
{
{
yanshi2(20000);
if((P1&0x0f)!=0x0f)
{
return P1&0x0f;
}
}
return 0x0f;
}
void yanshi() //步進電機延時時間
{
uint sd1=0;
sd1=8000+5753*(10-su_du);
while(sd1--)
{
if((P1&0x0f)!=0x0f)return; //在延時里面判斷有沒有按鍵按下,有就直接返回
}
}
void bu_jin() //每調(diào)用一次步進電機向指定方向走一步
{
static char j=1;
if(fang_xiang) //判斷方向
{
j++;
if(j==5)j=1;
}
else
{
j--;
if(j==0)j=4;
} P1_6 = 0;
switch(j) //根據(jù)拍數(shù)選擇不同的電壓組合
{
case 1:
A0=1;B0=1;A1=0;B1=0;yanshi(); //ab
break;
case 2:
A0=0;B0=1;A1=1;B1=0;yanshi(); //a~b
break;
case 3:
A0=0;B0=0;A1=1;B1=1;yanshi(); //a~b~
break;
case 4:
A0=1;B0=0;A1=0;B1=1;yanshi(); //ab~
break;
}
}
void xian_shi() //顯示子程序
{
P2=shu_ma[su_du];//把速度顯示到數(shù)碼管
}
void main()
{
while(1){
if (P1_4)
{
qi_dong=1;
fang_xiang=0;
if(su_du<9)su_du++;
}
else
{
qi_dong=0;
fang_xiang=1;
if(su_du<9)su_du--;
}
xian_shi(); //顯示
if(qi_dong)
{
bu_jin(); //步進電機
}
}
}
電路圖.jpg
(284.63 KB, 下載次數(shù): 30)
下載附件
2018-6-5 22:21 上傳
作者:
zgp535936402
時間:
2018-6-5 22:26
跪拜大神降臨
作者:
linlin7077
時間:
2018-6-7 15:12
速度慢應(yīng)該是頻率設(shè)置有問題,還有大體描述下你這個程序大體要實現(xiàn)什么樣的功能,設(shè)置的變量做下備注。每次上電都只轉(zhuǎn)半圈就停下來嗎
作者:
bingzhizhui
時間:
2018-6-7 15:55
跪拜大神降臨
作者:
余生癡夢
時間:
2018-6-8 00:20
跪拜大神降臨
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1