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