久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4940|回復: 6
收起左側

51單片機6自由度機械臂調試程序,帶LCD1602PWM顯示

[復制鏈接]
ID:527441 發表于 2019-5-5 10:55 | 顯示全部樓層 |閱讀模式
以前學習51的時候為了調試機械臂角度編寫的程序,用在開發板上也比較方便,但是由于是普通的舵機,不是總線的,所以需要自己洞洞板焊一個供電帶電路。

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <lcd1602.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit duoji0=P2^0;          //PWM輸出
  6. sbit duoji1=P2^1;
  7. sbit duoji2=P2^2;
  8. sbit duoji3=P2^3;
  9. sbit duoji4=P3^1;
  10. sbit duoji5=P3^0;

  11. #define GPIO_KEY P1

  12. unsigned int k0;   
  13. unsigned int k1;
  14. unsigned int k2;
  15. unsigned int k4;
  16. unsigned int k3;
  17. unsigned int k5;         //定義下降沿節點

  18. uint dsip[8]={0};
  19. uint j=0;
  20. unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','D',' '};

  21. void delayms(uint xms)
  22. {
  23.   uchar j;
  24.         uint i;
  25.         for(i=xms;i>0;i--)
  26.         for(j=112;j>0;j--);
  27. }

  28. void time0() interrupt 1   
  29. {
  30.         static uint ii0=0;
  31.   TH0=(65536-100)/256;      //以20ms為一個周期,以0.1ms為一個脈沖寬度
  32.   TL0=(65536-100)%256;
  33.   ii0++;
  34.   
  35.         if(ii0<=k0)                     
  36.     duoji0=1;    //0號舵機pwm輸出
  37.   else
  38.     duoji0=0;   
  39.        
  40.         if(ii0<=k1)    //1號舵機pwm輸出                     
  41.     duoji1=1;
  42.   else
  43.     duoji1=0;

  44.   if(ii0<=k2)    //2號舵機pwm輸出                       
  45.     duoji2=1;
  46.   else
  47.     duoji2=0;  

  48. if(ii0<=k3)     //3號舵機pwm輸出                    
  49.     duoji3=1;
  50.   else
  51.     duoji3=0;
  52.        
  53.          if(ii0<=k4)   //4號舵機pwm輸出                     
  54.     duoji4=1;
  55.   else
  56.     duoji4=0;
  57.        
  58.          if(ii0<=k5)   //5號舵機pwm輸出                     
  59.     duoji5=1;
  60.   else
  61.     duoji5=0;
  62.        
  63.         if(ii0==200)
  64.     ii0=0;
  65. }

  66. void time0init()
  67. {
  68.   TMOD=0x01;
  69.   TH0=(65536-100)/256;
  70.   TL0=(65536-100)%256;
  71.   TR0=1;
  72.   ET0=1;
  73.   EA=1;
  74. }


  75. char KeyDown()
  76. {
  77.         uchar KeyValue=20;
  78.         uchar a=0;
  79.         GPIO_KEY=0x0f;
  80.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  81.         {
  82.                 delayms(10);//延時10ms進行消抖
  83.                 if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
  84.                 {       
  85.                         //測試列
  86.                         GPIO_KEY=0X0F;
  87.                         switch(GPIO_KEY)
  88.                         {
  89.                                 case(0X07):        KeyValue=0;break;
  90.                                 case(0X0b):        KeyValue=1;break;
  91.                                 case(0X0d): KeyValue=2;break;
  92.                                 case(0X0e):        KeyValue=3;break;
  93.                         }
  94.                         //測試行
  95.                         GPIO_KEY=0XF0;
  96.                         switch(GPIO_KEY)
  97.                         {
  98.                                 case(0X70):        KeyValue=KeyValue;break;
  99.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  100.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  101.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  102.                         }
  103.                         while((a<50)&&(GPIO_KEY!=0xf0))         //檢測按鍵松手檢測,當按鍵等于0xf時候跳出循環
  104.                         {
  105.                                 delayms(100);
  106.                                 a++;
  107.                         }
  108.                 }
  109.         }
  110.         return KeyValue;
  111. }

  112. void count()
  113. {
  114.        
  115.           LcdWriteData(ASCII[0]);
  116.           LcdWriteData(ASCII[11]);
  117.     LcdWriteData(ASCII[k0/10]);       
  118.                 LcdWriteData(ASCII[k0%10]);       
  119.           LcdWriteData(ASCII[12]);
  120.        
  121.           LcdWriteData(ASCII[1]);       
  122.           LcdWriteData(ASCII[11]);
  123.                 LcdWriteData(ASCII[k1/10]);       
  124.                 LcdWriteData(ASCII[k1%10]);       
  125.           LcdWriteCom(0x80+0x40);
  126.        
  127.           LcdWriteData(ASCII[2]);       
  128.           LcdWriteData(ASCII[11]);
  129.                 LcdWriteData(ASCII[k2/10]);       
  130.                 LcdWriteData(ASCII[k2%10]);       
  131.     LcdWriteData(ASCII[12]);
  132.        
  133.           LcdWriteData(ASCII[3]);
  134.           LcdWriteData(ASCII[11]);
  135.                 LcdWriteData(ASCII[k3/10]);       
  136.                 LcdWriteData(ASCII[k3%10]);
  137.                
  138. }

  139. void main()
  140. {         
  141.   time0init();
  142.         k0=15;
  143.         k1=9;
  144.         k2=16;
  145.         k3=14;
  146.         k4=8;
  147.         k5=8;
  148.         LcdInit();
  149.         count();
  150.        
  151.         while(1)
  152.   {
  153.                 uchar KeyValue1=20;
  154.           KeyValue1=KeyDown();
  155.                
  156.        
  157.        
  158.        
  159.                        
  160.        
  161.                
  162.                 if(KeyValue1==0&&k0<=20&&k0>=8)        //0號舵機高電平時間增加
  163.           {
  164.                      k0++;       
  165.                      if(k0==21)
  166.                                          k0=20;
  167.                                  KeyValue1=20;LcdWriteCom(0x01);        count();
  168.     }               
  169.        
  170.     if(KeyValue1==4&&k0<=20&&k0>=8)         //0號舵機高電平時間減少
  171.           {
  172.       
  173.                      k0--;       
  174.                      if(k0==7)
  175.                                          k0=8;
  176.               KeyValue1=20;        LcdWriteCom(0x01);count();
  177.     }       
  178.                
  179.                 if(KeyValue1==1&&k1<=20&&k1>=8)        //1號舵機高電平時間增加
  180.           {
  181.       
  182.                      k1++;       
  183.                      if(k1==21)
  184.                                          k1=20;
  185.       KeyValue1=20;        LcdWriteCom(0x01);count();
  186.     }               
  187.        
  188.     if(KeyValue1==5&&k1<=20&&k1>=8)
  189.           {
  190.       
  191.                      k1--;       
  192.                      if(k1==7)
  193.                                          k1=8;
  194.               KeyValue1=20;        LcdWriteCom(0x01);count();
  195.     }       
  196.                
  197.                 if(KeyValue1==2&&k2<=20&&k2>=8)       //2號舵機高電平時間增加
  198.           {
  199.       
  200.                      k2++;       
  201.                      if(k2==21)
  202.                                          k2=20;
  203.       KeyValue1=20;        LcdWriteCom(0x01);count();
  204.     }               
  205.        
  206.     if(KeyValue1==6&&k2<=20&&k2>=8)
  207.           {
  208.       
  209.                      k2--;       
  210.                      if(k2==7)
  211.                                          k2=8;
  212.               KeyValue1=20;        LcdWriteCom(0x01);count();
  213.     }       
  214.                
  215.                 if(KeyValue1==3&&k3<=20&&k3>=8)       //3號舵機高電平時間增加
  216.           {
  217.       
  218.                      k3++;       
  219.                      if(k3==21)
  220.                                          k3=20;
  221.               KeyValue1=20;        LcdWriteCom(0x01);count();
  222.     }               
  223.        
  224.     if(KeyValue1==7&&k3<=20&&k3>=8)
  225.           {
  226.       
  227.                      k3--;       
  228.                      if(k3==7)
  229.                                          k3=8;
  230.               KeyValue1=20;        LcdWriteCom(0x01);count();
  231.     }       
  232.                
  233.                 if(KeyValue1==8&&k4<=20&&k4>=8)       //4號舵機高電平時間增加
  234.           {
  235.       
  236.                      k4++;       
  237.                      if(k4==21)
  238.                                          k4=20;
  239.               KeyValue1=20;LcdWriteCom(0x01);        count();
  240.     }               
  241.        
  242.     if(KeyValue1==12&&k4<=20&&k4>=8)
  243.           {
  244.       
  245.                      k4--;       
  246.                      if(k4==7)
  247.                                          k4=8;
  248.               KeyValue1=20;        LcdWriteCom(0x01);count();
  249.     }       
  250.                
  251.                 if(KeyValue1==9&&k5<=20&&k5>=8)       //5號舵機高電平時間增加
  252.           {
  253.       
  254.                      k5++;       
  255.                      if(k5==21)
  256.                                          k5=20;
  257.               KeyValue1=20;LcdWriteCom(0x01);        count();
  258.     }               
  259.        
  260.     if(KeyValue1==13&&k5<=20&&k5>=8)
  261.           {
  262.       
  263.                      k5--;       
  264.                      if(k5==7)
  265.                                          k5=8;
  266.               KeyValue1=20;        LcdWriteCom(0x01);count();
  267.     }       
  268.                
  269.   }       
  270. }               
  271.        
復制代碼

所有資料51hei提供下載:
51arm1602pwm.rar (44.41 KB, 下載次數: 94)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:527441 發表于 2019-5-5 10:57 | 顯示全部樓層
如果大家需要使用機械臂的話,給大家推薦一個黑科技模塊:PCA9685,iic總線通信的,很方便
回復

使用道具 舉報

ID:165117 發表于 2019-5-5 16:55 | 顯示全部樓層
謝謝樓主的共享,有沒有電路圖??  
回復

使用道具 舉報

ID:527441 發表于 2019-5-6 12:28 | 顯示全部樓層
gdatgb 發表于 2019-5-5 16:55
謝謝樓主的共享,有沒有電路圖??

lcd1602地電路圖可以參考普中的51開發板,是在那個上面實現的,舵機部分也就是供電線,共GND,然后信號線連接在51上面
回復

使用道具 舉報

ID:165117 發表于 2019-5-6 14:35 | 顯示全部樓層
snorlaxcy 發表于 2019-5-6 12:28
lcd1602地電路圖可以參考普中的51開發板,是在那個上面實現的,舵機部分也就是供電線,共GND,然后信號線 ...

好的,謝謝了!                        
回復

使用道具 舉報

ID:683198 發表于 2020-1-7 20:35 來自手機 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:582255 發表于 2021-1-24 15:19 | 顯示全部樓層
這個硬件實現了沒
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色免费网址大全 | av网站免费观看 | 一区二区在线 | wwww.xxxx免费 | 韩日av在线 | 国产成人免费网站 | 在线亚洲精品 | 一区二区在线 | 色女人天堂 | 国产福利91精品一区二区三区 | 国产乱码一二三区精品 | 夜久久 | 91社区在线观看 | 日本特黄特色aaa大片免费 | 亚洲精品久久久一区二区三区 | 精品欧美一区二区中文字幕视频 | 日韩色图视频 | 成年人在线观看 | 中文字幕一区二区三区四区五区 | 视频三区 | 久久人人国产 | 久草新在线| 超碰精品在线观看 | 中文字幕亚洲区一区二 | 亚洲国产精品suv | 亚洲在线看 | 91在线精品播放 | 在线观看亚洲一区二区 | 毛片软件 | 91精品国产一区二区三区香蕉 | 久久国产精品久久国产精品 | 亚洲视频一区在线观看 | 精品视频一区二区三区 | 国产乱码精品一区二区三区五月婷 | 国产成人免费在线观看 | 欧美日韩高清一区二区三区 | 欧美一级免费 | 精品久久久久久久久久久久久久 | 97国产在线观看 | 99re在线视频| 久久电影一区 |