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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2621|回復: 0
打印 上一主題 下一主題
收起左側

單片機模仿舵機測試儀 按鍵控制 源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:210365 發表于 2021-8-19 22:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想模仿舵機測試儀,但是把旋鈕改成按鍵,用按鍵控制檔位, 空檔-1檔-2檔-3檔-空檔 循環
現在遇到兩個問題,請教高手:
1。按鍵反應不是很靈敏,有時要按好幾次才有用
2。 從空檔 - 1檔 -2檔 -3檔 切換正常,但從3檔切換到空檔時切換不到了,會跳到1檔,不知道是什么問題

單片機代碼如下:
  1. #include <REG51.H>
  2. #include <intrins.h>  
  3.    
  4. #define uint unsigned int   
  5. #define uchar unsigned char   
  6.    
  7. sbit motor=P3^2;    //接舵機
  8. sbit key=P3^4;   //用按鍵控制檔位, 空檔-1檔-2檔-3檔-空檔 循環
  9. sbit led=P3^3;  //led閃動幾次表明當前檔位
  10. uint a;             //轉動角度  
  11. uchar num=1;
  12. uchar dangwei=0; //擋位
  13. int i;
  14. sfr AUXR=0x8E;



  15. void delay(unsigned char z)
  16. {
  17.          unsigned char x,y;
  18.          for(x=125;x>0;x--)
  19.                  for(y=z;y>0;y--);
  20. }

  21. //延時1毫秒
  22. void Delay1ms()                //@12.000MHz
  23. {
  24.         unsigned char i, j;

  25.         i = 12;
  26.         j = 169;
  27.         do
  28.         {
  29.                 while (--j);
  30.         } while (--i);
  31. }

  32. //延時n毫秒函數
  33. void DelayMs(unsigned int n)
  34. {
  35.    do
  36.    {
  37.           Delay1ms();
  38.    }while(n--);

  39. }

  40. void delayms1(void)                   //延時函數
  41. {
  42.   unsigned int i;

  43.   i = 1000;
  44.   while(i--);
  45. }

  46. //閃燈函數 根據n確定閃爍間隔毫秒
  47. void Flash(unsigned int n)
  48. {
  49.    
  50.     led=1;
  51.           DelayMs(n);
  52.           led=0;
  53.           DelayMs(n);

  54. }
  55.    
  56. void T0_time() interrupt 1   
  57. {   
  58.     switch(num)   
  59.     {   
  60.         case 0:   
  61.             TH0=(58300-a*120)/256;   
  62.             TL0=(58300-a*120)%256;   
  63.             motor=1;   
  64.             num=1;   
  65.             break;   
  66.         case 1:   
  67.             TH0=(15800+a*121)/256;   
  68.             TL0=(15800+a*121)%256;   
  69.             motor=0;   
  70.             num=2;   
  71.             break;   
  72.         case 2:   
  73.             TH0=0x27;   
  74.             TL0=0xc4;   
  75.             motor=0;   
  76.             num=3;   
  77.             break;   
  78.         case 3:   
  79.             TH0=0x27;   
  80.             TL0=0xc4;   
  81.             motor=0;   
  82.             num=4;   
  83.             break;   
  84.         case 4:   
  85.             TH0=0x27;   
  86.             TL0=0xc4;   
  87.             motor=0;   
  88.             num=0;   
  89.             break;   
  90.            
  91.     }      
  92. }


  93. void T0_init()   
  94. {   
  95.     AUXR=0X80;   
  96.     TMOD|=0x01;   
  97.     TH0=0x27;   
  98.     TL0=0xc4;   
  99.     EA=1;   
  100.     ET0=1;   
  101.     TR0=1;      
  102. }   
  103.    
  104. void main(void)   
  105. {   
  106.     T0_init();
  107.         
  108.          
  109.         
  110.           key=1;

  111.     dangwei=0; //默認檔位0,空檔
  112.     a=25;             //舵機初始位置
  113.       
  114.     while(1)
  115.                 {


  116.                                 //a=150; //最高轉角,對比舵機測試儀得到
  117.         //a=25;  //最低轉角,對比舵機測試儀得到

  118.                         
  119.          if (key==0)
  120.          {      
  121.                  DelayMs(3); //按下延時,消抖
  122.                  
  123.                  if (key==0) {
  124.                         
  125.                         led = 1;
  126.                         
  127.                   dangwei = dangwei + 1;  //按鍵增加檔位
  128.                                           
  129.                         
  130.                 }
  131.          }
  132.          
  133.          
  134.       if (dangwei > 3)  //當前檔位是最高檔時,轉空檔
  135.                         {
  136.                                 led = 1;
  137.                                 dangwei = 0;  //空檔
  138.                                 a = 25;
  139.                         }         
  140.                   

  141.    if (dangwei == 0) {   //空檔
  142.                  
  143.                  a=25; led = 1;
  144.                  
  145.          } else if (dangwei ==1) {   //低速
  146.                  
  147.       a = 70; Flash(200); led=1; DelayMs(1000);
  148.                  
  149.          } else if (dangwei == 2) {  //中速
  150.                  
  151.                   a =110; Flash(200);Flash(200);  led=1; DelayMs(1000);
  152.                  
  153.          } else if (dangwei == 3) {  //全速
  154.                  
  155.                  a=150; Flash(200);Flash(200);Flash(200);  led=1; DelayMs(1000);
  156.                  
  157.          }
  158.                         

  159.                
  160.         }           
  161. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 三级特黄特色视频 | 国产清纯白嫩初高生视频在线观看 | 香蕉一区 | 日韩在线 | 国产午夜久久 | 成人av观看| 日韩成人在线视频 | 免费国产一区二区 | 久久激情视频 | 一区二区三区高清在线观看 | 福利网站在线观看 | 九一视频在线播放 | 日韩在线欧美 | 欧美性a视频| 91大片 | 久久爱黑人激情av摘花 | 亚洲免费视频在线观看 | 国产精品成人国产乱 | 每日更新av | 国产综合精品 | 最新国产在线 | 午夜激情视频 | 精品久久久久久亚洲精品 | 亚洲福利精品 | 黑人精品欧美一区二区蜜桃 | 欧州一区二区三区 | 在线观看亚洲精品视频 | 成人精品鲁一区一区二区 | 免费视频99 | 久久久免费毛片 | 一区二区三区高清 | 97国产精品| 中文字幕精品视频 | 操视频网站 | 一区二区三区免费 | av成年人网站 | 欧美日本韩国一区二区 | 欧美影院 | 日韩精品一区二区三区在线播放 | 操操网站 | 女同久久另类99精品国产 |