找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外遙控8路電機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:79544 發(fā)表于 2015-7-23 23:18 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. /**********************************************************
  2.                         正確的外部中斷1 P3^3紅外接收 控制LED燈
  3.                 并顯示鍵值  
  4.                                         紅外遙控控制機(jī)械臂

  5.                         P0^6位使能。PO^7段使能。P2口輸出數(shù)據(jù)
  6.                         單片機(jī):STC89C52
  7.                         晶振:11.0592M
  8.                         蘇義江
  9.                          2015年4月22日

  10. *********************************************************/
  11. #include<12c5a.h>
  12. #define QIANJIN   a=1;b=0;c=1;d=0;
  13. #define HOUTUI    a=0;b=1;c=0;d=1;
  14. #define ZUOZHUAN  a=0;b=1;c=1;d=0;
  15. #define YOUZHUAN  a=1;b=0;c=0;d=1;
  16. #define STOP      a=1;b=1;c=1;d=1;

  17. sbit wei =P0^6;
  18. sbit duan=P0^7;
  19. sbit ting   =P2^7;
  20. sbit xzdj1a =P0^0;//行走電機(jī)
  21. sbit xzdj1b =P0^1;
  22. sbit xzdj2a =P0^2;
  23. sbit xzdj2b =P0^3;

  24. sbit toua  =P0^6;//頭電機(jī)
  25. sbit toub  =P0^7;
  26. sbit shoua =P1^0;//手電機(jī)
  27. sbit shoub =P1^1;
  28. sbit wana  =P1^2;//腕電機(jī)
  29. sbit wanb  =P1^3;
  30. sbit zhoua =P1^4;//肘電機(jī)
  31. sbit zhoub =P1^5;
  32. sbit zhou1a=P1^6;
  33. sbit zhou1b=P1^7;
  34. sbit jiana =P2^0;//肩電機(jī)
  35. sbit jianb =P2^1;
  36. sbit jian1a=P2^2;
  37. sbit jian1b=P2^3;
  38. uchar irtime;    //紅外時(shí)間
  39. uchar startflag; //起始標(biāo)志位
  40. uchar irdata[33];//多少個(gè)數(shù)據(jù)
  41. uchar bitnum;    //第幾位
  42. uchar irreceok;  //紅外接收完成
  43. uchar ircode[4]; //用戶碼和鍵值碼4位
  44. uchar irprosok;  //紅外接收結(jié)束
  45. uchar disp[4];   //分離出4位數(shù)據(jù)顯示

  46. uchar code table[]={0xfe,0xfd,0xfb,0xf7};
  47.                                 //        0xef,0xbf,0xdf,0x7f};
  48. uchar code smg[]={0xC0,0xF9,0xA4,0xB0,0x99,
  49.                                         0x92,0x82,0xf8,0x80,0x90,0x88,
  50.                                         0x83,0xC6,0xA1,0x86,0x8E};
  51. /*void delay_50ms(uint t)//12m晶振50ms秒延時(shí)
  52. {
  53.         uint j;
  54.         for(;t>0;t--)
  55.         for(j=6245;j>0;j--);
  56. }
  57. void delay_1ms(uint t)//12m晶振1ms秒延時(shí)
  58. {
  59.         uint j,k;
  60.         for(j=t;j>0;j--)
  61.         for(k=120;k>0;k--);
  62. }*/
  63. void delay_50us(uint t)//12m晶振50us秒延時(shí)
  64. {
  65.         uchar j;
  66.         for(;t>0;t--)
  67.         for(j=19;j>0;j--);
  68. }
  69. void timer0init() //定時(shí)器初始化
  70. {
  71. //        TMOD=0X12;//T1方式1.T0方式2
  72.         TMOD=0X02;//T0方式2
  73.         TH0=0X00;//高8位清零
  74.         TL0=0X00;//低8位清零
  75.         EA=1;
  76.         ET0=1;
  77.         TR0=1;       
  78. }
  79. void int0init()//外部中斷1初始化
  80. {
  81.         IT1=1; //下降沿觸發(fā)
  82.         EX1=1; //打開外部中斷1
  83.         EA=1;  // 開總中斷
  84. }
  85. void irwork()//分離16進(jìn)制紅外數(shù)據(jù)
  86. {
  87.         disp[2]=ircode[0]/16;//鍵值碼
  88.         disp[1]=ircode[0]%16;
  89.         disp[3]=ircode[2]/16;//識別碼
  90.         disp[0]=ircode[2]%16;


  91. }
  92. void  shoushen()
  93. {
  94.         shoua=1;
  95.         shoub=0;
  96. }
  97. void  shouzhua()
  98. {
  99.         shoua=0;
  100.         shoub=1;
  101. }
  102. void  wanzuo()
  103. {
  104.         wana =1;
  105.         wanb=0;
  106. }
  107. void  wanyou()
  108. {
  109.         wana =0;
  110.         wanb=1;
  111. }
  112. void zhouzuo()
  113. {
  114.   zhoua=1;
  115.   zhoub=0;
  116. }
  117. void zhouyou()
  118. {
  119.   zhoua=0;
  120.   zhoub=1;
  121. }
  122. void zhoushang()
  123. {
  124.   zhou1a=1;
  125.   zhou1b=0;
  126. }
  127. void zhouxia()
  128. {
  129.   zhou1a=0;
  130.   zhou1b=1;
  131. }
  132. void xzqianjin()
  133. {
  134.         xzdj1a =1;
  135.         xzdj1b =0;
  136.         xzdj2a =1;
  137.         xzdj2b =0;
  138. }
  139. void xzhoutui()
  140. {
  141.         xzdj1a =0;
  142.         xzdj1b =1;
  143.         xzdj2a =0;
  144.         xzdj2b =1;
  145. }
  146. void xzzuozhuan()
  147. {
  148.         xzdj1a =0;
  149.         xzdj1b =1;
  150.         xzdj2a =1;
  151.         xzdj2b =0;
  152. }
  153. void xzyouzhuan()
  154. {
  155.         xzdj1a =1;
  156.         xzdj1b =0;
  157.         xzdj2a =0;
  158.         xzdj2b =1;
  159. }
  160. void jianshang()
  161. {
  162.         jiana=1;
  163.         jianb=0;
  164. }
  165. void jianxia()
  166. {
  167.         jiana=0;
  168.         jianb=1;
  169. }
  170. void jianqian()
  171. {
  172.    jian1a=1;
  173.    jian1b=0;
  174. }
  175. void jianhou()
  176. {
  177.    jian1a=0;
  178.    jian1b=1;
  179. }
  180. void tingsha()
  181. {
  182.         P0=0Xff;
  183.         P2 =0XFF;
  184.         P1=0XFF;
  185. }
  186. void display()//顯示
  187. {
  188.         P2=0xfe;
  189.         wei=1;
  190.         wei=0;
  191.         delay_50us(50);

  192.         P2=smg[disp[0]];
  193.         delay_50us(50);
  194.         duan=1;
  195.         duan=0;
  196.         P2=0xff;

  197.         P2=0xfd;
  198.         wei=1;
  199.         wei=0;
  200.         delay_50us(50);

  201.         P2=smg[disp[1]];
  202.         delay_50us(50);
  203.         duan=1;
  204.         duan=0;
  205.         P2=0xff;

  206.         P2=0xfb;
  207.         wei=1;
  208.         wei=0;
  209.         delay_50us(50);

  210.         P2=smg[disp[2]];
  211.         delay_50us(50);
  212.         duan=1;
  213.         duan=0;
  214.         P2=0xff;

  215.         P2=0xf7;
  216.         wei=1;
  217.         wei=0;
  218.         delay_50us(50);

  219.         P2=smg[disp[3]];
  220.         delay_50us(50);
  221.         duan=1;
  222.         duan=0;
  223.         P2=0xff;
  224.        
  225. }
  226. /*void display()//顯示
  227. {
  228.         uchar i;       
  229.         for(i=0;i<4;i++)
  230.         {
  231.                 duan=1;
  232.                 duan=0;
  233.                 P2=smg[disp[i]];
  234.                 delay_50us(50);
  235.                 wei=1;
  236.                 wei=0;
  237.                 P2=table[i];
  238.                 delay_50us(20);
  239.         }
  240. }*/
  241. void irpros()//紅外處理
  242. {
  243.         uchar k,i,j;
  244.         uchar value;   //紅外數(shù)據(jù)值
  245.         k=1;           //從第一個(gè)數(shù)據(jù)碼開始
  246.         for(j=0;j<4;j++)//只取出4組碼
  247.         {
  248.                 for(i=0;i<8;i++)//8位數(shù)據(jù)循環(huán)8次
  249.                 {
  250.                 //右移一位。移動7次。從低位開始移
  251.                         value=value>>1;
  252.                 //循環(huán)這個(gè)判斷語句8次.判斷是1 還是0
  253.                 //大于7為 1. 小于7為 0
  254.                         if(irdata[k]>7)
  255.                         {                               
  256.                                 value=value|0x80;
  257.                         }
  258.                         k++;
  259.                 }
  260.         //把數(shù)據(jù)放到數(shù)組中
  261.                 ircode[j]=value;       
  262.         }
  263.         irprosok=1;
  264. }
  265. void main()
  266. {       
  267.         timer0init() ;
  268.         int0init();
  269.         while(1)
  270.         {
  271.                 if(irreceok)
  272.                 {
  273.                         irpros();
  274.                         irreceok=0;
  275.                 }
  276.                 if(irprosok)
  277.                 {
  278.                         irwork();
  279.                         irprosok=0;
  280.                 }
  281.                 display();
  282.                 switch(ircode[2])
  283.                 {
  284.                 //        case 0x05: QIANJIN ;break;
  285.                 //        case 0x06: HOUTUI  ;break;
  286.                 //        case 0x07: ZUOZHUAN;break;
  287.                 //        case 0x08: YOUZHUAN;break;
  288.                 //        case 0x04: STOP ;   break;

  289.                         case 0x02: xzqianjin(); break;//電視遙控器鍵值
  290.                         case 0x0a: xzhoutui()  ;break;//電視遙控器鍵值
  291.                         case 0x07: xzzuozhuan();break;//電視遙控器鍵值
  292.                         case 0x05: xzyouzhuan(); break;//電視遙控器鍵值
  293.                         case 0x06: tingsha();  break;//電視遙控器鍵值
  294.                         case 0x18: tingsha();  break;

  295.                         case 0x17: shoushen(); break;
  296.                         case 0x14: shouzhua(); break;

  297.                         case 0x16: wanzuo();   break;
  298.                         case 0x13: wanyou();   break;

  299.                         case 0x15: zhoushang();break;
  300.                         case 0x12: zhouxia();  break;

  301.                         case 0x11: zhouzuo();  break;
  302.                         case 0x1a: zhouyou();  break;

  303.                         case 0x10: jianqian(); break;
  304.                         case 0x0e: jianhou();  break;

  305.                         case 0x0f: jianshang();break;
  306.                         case 0x19: jianxia();  break;

  307.                

  308.                
  309.                         default:break;
  310.                 }       
  311.         }
  312. }
  313. void timer0() interrupt 1//定時(shí)器0中斷服務(wù)函數(shù)
  314. {
  315.         irtime++; //加到255自動清零再加
  316. }
  317. void int0() interrupt 2//定時(shí)器1中斷服務(wù)函數(shù)
  318. {
  319.         if(startflag)
  320.         {
  321.                 if(irtime>32)//檢測引導(dǎo)碼
  322.                 {
  323.                         bitnum=0;
  324.                 }
  325.                 irdata[bitnum]=irtime;
  326.                 irtime=0;
  327.                 bitnum++;
  328.                 if(bitnum==33)
  329.                 {
  330.                         bitnum=0;
  331.                         irreceok=1;//紅外接收結(jié)束
  332.                 }
  333.         }
  334.         else
  335.         {
  336.                 startflag=1;
  337.                 irtime=0;
  338.         }
  339.        
  340. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2015-7-24 02:36 來自觸屏版 | 只看該作者
樓主謝謝分享能給個(gè)電路圖,或者說明一下電機(jī)用什么芯片驅(qū)動?怎么接線嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:74784 發(fā)表于 2015-7-24 19:40 | 只看該作者
8個(gè)電機(jī)都接哪了???
回復(fù)

使用道具 舉報(bào)

地板
ID:79544 發(fā)表于 2015-8-3 20:18 | 只看該作者
admin 發(fā)表于 2015-7-24 02:36
樓主謝謝分享能給個(gè)電路圖,或者說明一下電機(jī)用什么芯片驅(qū)動?怎么接線嗎?

您好,我用的是L6203驅(qū)動電機(jī),8個(gè)電機(jī)就用8塊,和L298的驅(qū)動方法一樣。電路圖自己畫的不會傳無奈。
回復(fù)

使用道具 舉報(bào)

5#
ID:79544 發(fā)表于 2015-8-3 20:20 | 只看該作者
lxa0 發(fā)表于 2015-7-24 19:40
8個(gè)電機(jī)都接哪了???

手,腕,肘,肩。還有頭。都是驅(qū)動芯片L6203控制的。
回復(fù)

使用道具 舉報(bào)

6#
ID:119663 發(fā)表于 2016-9-3 12:38 | 只看該作者
太棒了!多謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:194844 發(fā)表于 2017-5-1 14:20 | 只看該作者

太棒了!多謝分享
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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