標題: c52 L298控制2相4線步進電機 按鍵正反轉 按轉 不按不轉 [打印本頁]
作者: 57185490 時間: 2018-6-14 12:31
標題: c52 L298控制2相4線步進電機 按鍵正反轉 按轉 不按不轉
本帖最后由 57185490 于 2018-6-14 12:39 編輯
通過別人的程序修改的
主要作用 按鍵正反轉
按下轉 松開按鍵不轉
適合監控云臺------------------------編譯后 實際控制云臺成功。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*****P1.0=A ;P1.1=A` ;P1.2=B ;P1.3=B`****/
/*****P1.4=C; P1.5=C’; P1.6=D; P1.7=D’這個是用兩個L298 驅動,如果一個的就用P1.0-P1.3******/
code unsigned charrunz[8]={0x05,0x01,0x09,0x08,0x0a,0x02,0x06,0x04}; //正轉的數組
code unsigned charrunf[8]={0x04,0x06,0x02,0x0a,0x08,0x09,0x01,0x05}; //反轉的數組
code ucharrun1z[8]={0x50,0x10,0x90,0x80,0xa0,0x20,0x60,0x40};//這個是第二個L298正轉數組
code uchar run1f[8]={0x40,0x60,0x20,0xa0,0x80,0x90,0x10,0x50};//這個是第二個L298反轉數組
uchar keycan=0; //啟動哪個數組,用switch 函數
uint y=50;/轉速調整,延時時間,越高越慢
sbit P2_0=P2^0;//按鍵
sbit P2_1=P2^1;//
sbit P2_2=P2^2;//
sbit P2_3=P2^3;//
void delay(i)//延時 i=y
{
uchar j,k;
for(j=0;j<i;j++)
for(k=0;k<250;k++);
}
void delay1(uint b)//這個是按鍵按下時 延時,沒什么大作用!第二個L298沒有使用此延時,運行正常!應該可以不用
{
uchar g;
for(;b>0;b--)
{
g=250;
while(--g);
g=249;
while(--g);
}
}
/********************************************************************
1號 L298 正轉
*********************************************************************/
void zrun()// 正轉運行
{
uchar z;
for(z=0;z<8;z++)
{
P1=runz[z];
delay(y);
if(P2_0==1)// 監測按鍵是否松開,松開為高電平 1
delay1(10);//延時 確定按鍵松開,不使用也可以
if(P2_0==1)//確定按鍵松開
{
P1 &= 0x00;// P1 “與”運算 全部清零,不運行
z = 7;//終止這個運行程序
}
}
}
/********************************************************************
反轉
*********************************************************************/
void frun()//
{
uchar z;
for(z=0;z<8;z++)
{
P1=runf[z];
delay(y);
if(P2_1==1)
delay1(10);
if(P2_1==1)
{
P1 &= 0x00;
z = 7;
}
}
}
void zrun1()//第二個L298的正轉
{
uchar z;
for(z=0;z<8;z++)
{
P1=run1z[z];
delay(y);
If(P2_2==1)
{
P1 &= 0x00;
z = 7;
}
}
}
void frun1()//反轉
{
uchar z;
for(z=0;z<8;z++)
{
P1 = run1f[z];
delay(y);
If(P2_3==1)
{
P1 &= 0x00;
z = 7;
}
}
}
/********************************************************************
主程序
*********************************************************************/
void main()
{
while(1)
{
if(P2_0==0) //監測按鍵
delay1(10);
if(P2_0==0)
{
keycan=1; //給keycan賦值
}
if(P2_1==0)
delay1(10);
if(P2_1==0)
b {
keycan=2;
}
if(P2_2==0) // ????
delay1(10);
if(P2_2==0)
{
keycan=3;
}
if(P2_3==0)
delay1(10);
if(P2_3==0)
{
keycan=4;
}
switch (keycan)//運行各函數
{
case 1: zrun(); break;
case 2: frun(); break;
case 3:zrun1(); break;
case 4:frun1(); break;
}
}
}
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |