单片机学习小组
直播中

孙乙鑫

7年用户 239经验值
私信 关注

无线遥控小车程序

  • /*****************************************************
  •         用IR2104加IRF3205MOS管做驱动板74HC00作逻辑驱动IR2104
  •         功能:无线遥控智能小车
  •         单片机;STC12C5608AD
  •         晶振:12M
  •         作者:苏义江
  •         时间:2015-7-18
  •         其他避障,循迹,超声波 后续
  • ****************************************************/
  • #include
  • #define uchar unsigned char
  • #define uint unsigned int
  • ***it dir1        =P1^0;//左电机端口方向控制
  • ***it dir2        =P1^1;//左电机端口方向控制
  • ***it pwm1        =P1^2;//PWM输出
  • ***it dir3        =P1^3;//右电机端口方向控制
  • ***it dir4        =P1^4;//右电机端口方向控制
  • ***it A = P2^0;//无线遥控A键
  • ***it b1= P2^1;//无线遥控B键
  • ***it C = P2^2;//无线遥控C键
  • ***it D = P2^3;//无线遥控D键
  • ***it qian   =P3^0;//按键
  • ***it hou    =P3^1;//按键
  • ***it zuo        =P3^4;//按键
  • ***it you        =P3^5;//按键
  • uchar t=0,pwm=0;//pwm是%0的占空比
  •                                 //t是计数器加1的全局变量
  • void delayms(uint z);
  • void tim0_init();//初始化
  • void qianjin();
  • void houtui();
  • void zuozhuan();
  • void youzhuan();
  • void down();//停止子函数
  • void wuxian();
  • void wuxian()//无线函数
  • {
  •         if(A==1 && b1!=1 && D!=1&& C!=1)//按下A键
  •              {
  •                            qianjin();
  •                  }
  •         if(b1==1 && A!=1 && C!=1&& D!=1)//按下B键
  •              {
  •                             houtui();
  •                  }
  •         if(C==1 && b1!=1 && D!=1&& A!=1)//按下C键
  •              {
  •                            zuozhuan();
  •                  }
  •         if(D==1 && A!=1 && C!=1&& b1!=1)//按下D键
  •              {
  •                            youzhuan();
  •                  }
  •         if(A==1 && b1==1)//同时按下A键和B键
  •              {
  •                            down();
  •                  }
  • }
  • void qianjin()
  • {
  •         dir1=0;//方向
  •          dir2=1;//方向
  •         pwm1=10;//PWM
  •         dir3=0;//方向
  •          dir4=1;//方向
  •         pwm1=10;//PWM
  • }
  • void houtui()
  • {
  •         dir1=1;//方向
  •          dir2=0;
  •         pwm1=10;//PWM
  •         dir3=1;
  •          dir4=0;
  •         pwm1=10;//PWM
  • }
  • void zuozhuan()
  • {
  •         dir1=1;
  •          dir2=0;
  •         pwm1=10;
  •         dir3=0;
  •          dir4=1;
  •         pwm1=10;
  • }
  • void youzhuan()
  • {
  •         dir1=0;
  •          dir2=1;
  •         pwm1=10;
  •         dir3=1;
  •          dir4=0;
  •         pwm1=10;
  • }
  • void down()//停止子函数
  • {
  •         dir1=0;
  •          dir2=0;
  •         pwm1=0;
  •         dir3=0;
  •          dir4=0;
  • }
  • void main()
  • {
  •         tim0_init();
  •         while(1)
  •         {
  •                 wuxian();
  •         }
  • }
  • void delayms(uint z)
  • {
  •         uint s,y;
  •         for(s=z;s>0;s--)
  •         for(y=410;y>0;y--);
  • }
  • void tim0_init()//初始化
  • {
  •         TMOD=0X01;
  •         TH0=(65536-20)/256;//赋初值0.02MS中断100次是1MS就是1KHZ频率
  •         TL0=(65536-20)%256;//赋初值0.02MS
  •         ET0=1;
  •         EA=1;
  •         TR0=1;
  • }
  • void tim0() interrupt 1
  • {
  •         TH0=(65536-20)/256;//赋初值0.02MS中断100次是1MS就是1KHZ频率
  •         TL0=(65536-20)%256;//赋初值0.02MS
  •         t++;
  •         if(t<=98)
  •         {
  •                 pwm1=1;
  •         }
  •         else
  •                 pwm1=0;
  •         if(t==100)
  •         {t=0;}
  • }




更多回帖

发帖
×
20
完善资料,
赚取积分