找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2954|回复: 0
收起左侧

有没有大神用l9110s控制四个直流电机,遇到过这种问题,如下正文

[复制链接]
ID:376237 发表于 2018-8-13 10:30 | 显示全部楼层 |阅读模式
已经写好的前进后退,在一个函数中调用正常,到了另外一个地方就会反向,本人用一个l9110s模块控制四个直流电机,左侧两个接到一个马达端口,右侧接一个马达端口,效果与用两个驱动模块相同。双电源供电,开发板P2口前四位控制马达,有独立按键和定时器两部分。代码如下:问题是,分别将定时器和按键扫描注释,相同的函数出现的现象不同
  1. #include<reg51.h>
  2. #include<reg51.h>
  3. typedef unsigned int  u16;          //对数据类型进行重新声明定义
  4. typedef unsigned char u8;
  5. #define motor P2//p2口控制四个马达,01口控制左侧,23口控制右侧
  6. sbit k1=P3^0;//通过按键控制运动
  7. sbit k2=P3^1;
  8. sbit k3=P3^2;
  9. sbit k4=P3^3;
  10. void delay(u16 j)
  11. {
  12. while(j--);
  13. }
  14. void qj()//前进
  15. {
  16. motor=0xfa; //0000 1010

  17. }
  18. void ht()//后退
  19. {
  20. motor=0xf5;//0000 0101

  21. }
  22. void yz()//右转弯
  23. {
  24. motor=0x09;//0000 1001

  25. }
  26. void zz()//左转弯
  27. {
  28. motor=0x06;//0000 0110

  29. }
  30. void Timer0Init()//定时50ms秒,完成后进行中断
  31. {
  32.         TMOD|=0X01;//0000 0001方式一
  33.          TH0=0x3C;//50ms
  34.     TL0=0xB0;
  35.         ET0=1;//打开定时器0中断允许
  36.         EA=1;//打开总中断        
  37.   TR0=1;
  38. }
  39. void keyscan()
  40. {
  41. if(k1==0)                  //检测按键K1是否按下
  42.         {        
  43.                 delay(1000);   //消除抖动 一般大约10ms
  44.                 if(k1==0)         //再次判断按键是否按下
  45.                 {
  46.                 qj();
  47.                 }
  48.                 while(!k1);         //检测按键是否松开
  49.         }               

  50. if(k2==0)                  
  51.         {        
  52.                 delay(1000);   
  53.                 if(k2==0)        
  54.                 {
  55.                 ht();
  56.                 }
  57.                 while(!k2);         
  58.         }               
  59. if(k3==0)                 
  60.         {        
  61.                 delay(1000);   
  62.                 if(k3==0)         
  63.                 {
  64.     zz();
  65.                 }
  66.                 while(!k3);        
  67.         }               
  68. if(k4==0)                 
  69.         {        
  70.                 delay(1000);   
  71.                 if(k4==0)         
  72.                 {
  73.         yz();
  74.                 }
  75.                 while(!k4);        
  76.         }               
  77. }
  78. void main()
  79. {
  80. Timer0Init();
  81.   while(1)
  82. {
  83. keyscan();
  84. }
  85. }
  86. void Timer0() interrupt 1//interrupt后面无括号
  87. {
  88.   static  u16 i=0;
  89.    TH0=0x3C;//50ms
  90.     TL0=0xB0;
  91.     i++;
  92.   if(i==20)
  93.   {
  94.     qj();
  95.   }  
  96.   if(i==60)
  97.   {
  98.     i=0;
  99.     ht();
  100.   }
  101. }
复制代码





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表