找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7991|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

紅外控制舵機(jī)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:93295 發(fā)表于 2016-3-15 10:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
紅外控制舵機(jī)
  1. /*******************************************************************************
  2. *具體操作:        使用配套的遙控,按按鍵,查看顯示屏鍵值。                                                   *
  3. *        鍵值表:   45H    46H      47H                                                 *
  4. *                                   44H    40H      43H                                                                                   *
  5. *                                   07H    15H      09H                                                                                   *
  6. *                                   16H    19H      0DH                                                                                   *
  7. *                                   0CH    18H      5EH                                                                                   *
  8. *                                   08H    1CH      5AH                                                                                   *
  9. *                                   42H    52H      4AH                                                                                   *
  10. *******************************************************************************/
  11. #include<reg52.h>
  12. #define uchar unsigned char
  13. sbit IR=P3^3;                                //紅外中斷引腳
  14. sbit wela=P2^6;                                //數(shù)碼管為選位
  15. sbit dula=P2^5;                                //數(shù)碼管段選為
  16. sbit PWM=P1^5;                                //PWM信號輸出
  17. uchar IRCOM[7];                                //鍵值存儲
  18. uchar code tab[]={                        //共陽極數(shù)碼管段選數(shù)組
  19. 0xc0,0xf9,0xa4,0xb0,0x99,
  20. 0x92,0x82,0xf8,0x80,0x90};
  21. uchar dj,count;                                        //dj舵機(jī)角度標(biāo)識引腳
  22. void delay0(uchar x)                        //延時0.14ms
  23. {
  24.         uchar i;
  25.         while(x--)
  26.         {
  27.                 for(i=0;i<13;i++);
  28.         }
  29. }
  30. void inter() interrupt 2                //外部中斷
  31. {       
  32.         unsigned char j,k,N=0;
  33.         EX1=0;
  34.         delay0(15);
  35.         if(IR==1)
  36.         {
  37.                 EX1=1;
  38.                 return;
  39.         }
  40.         while(!IR)
  41.                 delay0(1);                           //跳過9ms低電平引導(dǎo)碼
  42.         for(j=0;j<4;j++)
  43.         {
  44.                 for(k=0;k<8;k++)
  45.                 {
  46.                         while(IR)
  47.                                 delay0(1);                //跳過4.5ms的高電平
  48.                         while(!IR)
  49.                                 delay0(0);                //跳過0.56ms低電平
  50.                         while(IR)                        //計算高電平的時間
  51.                         {
  52.                                 delay0(1);
  53.                                 N++;
  54.                                 if(N>=30)                //高電平過長終止外部中斷
  55.                                 {
  56.                                         EX1=1;
  57.                                         return;
  58.                                 }
  59.                         }
  60.                         IRCOM[j]=IRCOM[j]>>1;//向右移位補(bǔ)零
  61.                         if(N>=8)
  62.                         {
  63.                                 IRCOM[j]=IRCOM[j]|0X80;
  64.                         }                                         //如果為高電平IRCOM為1
  65.                         N=0;       
  66.                 }
  67.         }
  68.   if(IRCOM[2]!=~IRCOM[3])                 //原碼與反碼對比驗證,如果不正確則停止
  69.   {
  70.           EX1=1;
  71. //        IROK=0;
  72.         return;       
  73.   }
  74.   IRCOM[4]=IRCOM[2]>>4;                //高四位變低四位
  75.   IRCOM[5]=IRCOM[2]&0X0F;        //取鍵值得低四位
  76.   IRCOM[7]=IRCOM[4]*16+IRCOM[5];//十六進(jìn)制換算成十進(jìn)制
  77.   EX1=1;
  78. }
  79. void delay(unsigned int z)
  80. {
  81.         unsigned int x,y;
  82.         for(x=z;x>0;x--)
  83.                 for(y=110;y>0;y--);
  84. }
  85. void display(uchar num)                  //十進(jìn)制鍵值顯示
  86. {
  87.         uchar         bai,shi,ge;
  88.         bai=num/100;
  89.         shi=(num%100)/10;
  90.         ge=num%10;
  91.         wela=1;
  92.         P0=0x01;
  93.         wela=0;
  94.         P0=0XFF;
  95.         dula=1;
  96.         P0=tab[bai];
  97.         dula=0;
  98.         delay(5);

  99.         wela=1;
  100.         P0=0X02;
  101.         wela=0;
  102.         P0=0xff;
  103.         dula=1;
  104.         P0=tab[shi];
  105.         dula=0;
  106.         delay(5);

  107.         wela=1;
  108.         P0=0x04;
  109.         wela=0;
  110.         P0=0xff;
  111.         dula=1;
  112.         P0=tab[ge];
  113.         dula=0;
  114.         delay(5);
  115.         switch(num)
  116.         {
  117.                 case 7:
  118.                                 dj--;
  119.                                 count=0;
  120.                                 if(dj==0)
  121.                                         dj=1;
  122.                 break;
  123.                 case 21:               
  124.                                 dj++;
  125.                                 count=0;
  126.                                 if(dj==6)
  127.                                         dj=5;
  128.                 break;       
  129.                 default:
  130.                 break;                       
  131.                 }
  132. }
  133. /*void IRscan(uchar num)
  134. {
  135.         uchar temp;
  136.         temp=num;
  137.         if(IROK!=0)
  138.         {
  139.                 switch(num)
  140.                 {
  141.                         case 7:
  142.                                                 dj--;
  143.                                                 count=0;
  144.                                                 if(dj==0)
  145.                                                 dj=1;
  146.                         break;
  147.                         case 21:               
  148.                                                 dj++;
  149.                                                 count=0;
  150.                                                 if(dj==6)
  151.                                                 dj=5;
  152.                         break;       
  153.                         default:
  154.                         break;                       
  155.                 }
  156.                 IROK=0;
  157.         }
  158. }  */
  159. void main()
  160. {
  161.         EA=1;          //全局中斷開
  162.     EX1=1;         //外部中斷1開
  163.     IT1=1;
  164.         TMOD=0X010;
  165.         TH1=0XFE;
  166.         TL1=0X0C;
  167.         ET1=1;
  168.         TR1=1;
  169.         count=0;
  170.         while(1)
  171.         {       
  172. //                IRscan(IRCOM[7]);
  173.                 display(IRCOM[7]);
  174.                 delay(2);
  175.         }
  176. }
  177. void time1() interrupt 3
  178. {
  179.         TH1=0XFE;
  180.         TL1=0X0C;
  181.         count++;
  182.         if(count<dj)
  183.                 PWM=1;
  184.         else
  185.                 PWM=0;
  186.         count=count%40;
  187. }
復(fù)制代碼


舵機(jī) 紅外.rar

21.55 KB, 下載次數(shù): 48, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發(fā)
ID:107891 發(fā)表于 2016-3-15 10:40 | 只看該作者
艾瑪。。坨機(jī) 我現(xiàn)在正在研究
回復(fù)

使用道具 舉報

板凳
ID:78462 發(fā)表于 2016-4-3 20:44 | 只看該作者
希望能好好研究下
回復(fù)

使用道具 舉報

地板
ID:84495 發(fā)表于 2016-4-4 09:40 | 只看該作者
我有個愛頂貼的好習(xí)慣
回復(fù)

使用道具 舉報

5#
ID:122267 發(fā)表于 2016-5-20 22:42 | 只看該作者
我想?yún)⒖枷?/td>
回復(fù)

使用道具 舉報

6#
ID:121473 發(fā)表于 2016-5-23 08:47 | 只看該作者
認(rèn)真學(xué)習(xí)
回復(fù)

使用道具 舉報

7#
ID:117161 發(fā)表于 2016-5-31 19:32 | 只看該作者
  有沒有原理圖
回復(fù)

使用道具 舉報

8#
ID:117984 發(fā)表于 2016-6-12 17:26 | 只看該作者
謝謝樓主 一起學(xué)習(xí)一起加油
回復(fù)

使用道具 舉報

9#
ID:135495 發(fā)表于 2016-8-2 01:51 | 只看該作者
新手
回復(fù)

使用道具 舉報

10#
ID:152251 發(fā)表于 2016-12-5 11:22 | 只看該作者
我有個愛頂貼的好習(xí)慣
回復(fù)

使用道具 舉報

11#
ID:190886 發(fā)表于 2017-4-18 16:43 | 只看該作者
46和47行代碼應(yīng)該在41行后面,因為接收引導(dǎo)碼是9ms低電平+4.5ms高電平,不分開~
回復(fù)

使用道具 舉報

12#
ID:190939 發(fā)表于 2017-4-18 19:13 | 只看該作者
舵機(jī),就是挺多用的,程序有點不知道怎么入手
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表