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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2518|回復: 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片免费看| 午夜视频网 | 99久久99久久精品国产片果冰 | www.av在线| 国产精品成人一区 | 99久久免费精品国产免费高清 | 区一区二在线观看 | 国产乱码精品1区2区3区 | 亚洲视频一区二区三区 | 一区二区三区视频在线 | 亚洲欧美视频一区 | 亚洲自拍偷拍av | 精品亚洲一区二区三区四区五区 | 日韩精品久久一区二区三区 | 艹逼网 | aaa在线观看 | 91精品中文字幕一区二区三区 | 日韩一区二区三区在线播放 | 亚洲精品成人在线 | 国产精品波多野结衣 | 91视频观看 | 拍戏被cao翻了h承欢 | 国产精品第2页 | 男女免费观看在线爽爽爽视频 | 国产综合精品一区二区三区 | 中文字幕av第一页 | 亚洲a视| 国产精品美女视频 | 午夜私人影院在线观看 | 亚洲国产成人精品女人久久久 | 色狠狠一区 | 一级毛片在线看 | 久久成人精品视频 | 隔壁老王国产在线精品 | 国产乱码一二三区精品 | 日韩在线免费视频 | 亚洲乱码一区二区三区在线观看 | 日本免费一区二区三区 | 国产成人网 | 日韩一区二区福利 | 成人啊啊啊 |