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