找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3266|回復: 0
打印 上一主題 下一主題
收起左側(cè)

有沒有大神用l9110s控制四個直流電機,遇到過這種問題,如下正文

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:376237 發(fā)表于 2018-8-13 10:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
已經(jīng)寫好的前進后退,在一個函數(shù)中調(diào)用正常,到了另外一個地方就會反向,本人用一個l9110s模塊控制四個直流電機,左側(cè)兩個接到一個馬達端口,右側(cè)接一個馬達端口,效果與用兩個驅(qū)動模塊相同。雙電源供電,開發(fā)板P2口前四位控制馬達,有獨立按鍵和定時器兩部分。代碼如下:問題是,分別將定時器和按鍵掃描注釋,相同的函數(shù)出現(xiàn)的現(xiàn)象不同
  1. #include<reg51.h>
  2. #include<reg51.h>
  3. typedef unsigned int  u16;          //對數(shù)據(jù)類型進行重新聲明定義
  4. typedef unsigned char u8;
  5. #define motor P2//p2口控制四個馬達,01口控制左側(cè),23口控制右側(cè)
  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()//右轉(zhuǎn)彎
  23. {
  24. motor=0x09;//0000 1001

  25. }
  26. void zz()//左轉(zhuǎn)彎
  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. }
復制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表