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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc15單片機4足仿生機器人源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:336397 發表于 2018-9-29 09:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "stc15.H"
  2. #include "stdio.h"
  3. #include <string.h>
  4. #include   <intrins.h>
  5. #include "類型.h"
  6. #define dingshi 0xfd46 //20us中斷一次
  7. #define gao (dingshi>>8)
  8. #define di dingshi

  9. //#define FOSC 11059200L         
  10. //#define FOSC 22118400L
  11. #define FOSC   27000000L
  12. //#define BAUD 115200   
  13. #define BAUD 1200
  14. #define S1_S0 0x40              //P_SW1.6
  15. #define S1_S1 0x80              //P_SW1.7
  16. #define max 20
  17. #define jiange 2000             //接收到兩個字節中間的最大間隔 單位是中斷個數
  18. #define duo_ji_shu 18             //舵機數
  19. #define su_du 3000


  20. #define qian1 0x45
  21. #define qian2 0x39
  22. #define qian3 0x2b
  23. #define qian4 0x2b
  24. #define hou1 0x33
  25. #define hou2 0x29
  26. #define hou3 0x3b
  27. #define hou4 0x3b
  28. #define shang1 0x29
  29. #define shang2 0x55
  30. #define shang3 0x29
  31. #define shang4 0x55
  32. #define xia1 0x39
  33. #define xia2 0x3f
  34. #define xia3 0x39
  35. #define xia4 0x43

  36. #define jiaozhun1 5
  37. #define jiaozhun2 5
  38. #define jiaozhun3 5
  39. sbit DJ1=P0^5;
  40. sbit DJ2=P0^6;
  41. sbit DJ3=P0^7;
  42. sbit DJ4=P1^0;
  43. sbit DJ5=P1^1;
  44. sbit DJ6=P4^7;
  45. sbit DJ7=P1^2;
  46. sbit DJ8=P1^3;
  47. sbit DJ9=P1^4;
  48. sbit DJ10=P1^5;
  49. sbit DJ11=P1^5;

  50. sbit DJ12=P1^5;
  51. sbit DJ13=P1^5;
  52. sbit DJ14=P1^5;
  53. sbit DJ15=P1^5;
  54. sbit DJ16=P1^5;
  55. sbit DJ17=P1^5;
  56. sbit DJ18=P1^5;

  57. sbit RX=P4^3;
  58. sbit TX=P4^4;

  59. code uchar qian[8*6]={                 //動作數組-向前走
  60. hou1,shang1,qian2,xia2,hou3,shang3,qian4,xia4,
  61. qian1,shang1,hou2,xia2,qian3,shang3,hou4,xia4,
  62. qian1,xia1,hou2,xia2,qian3,xia3,hou4,xia4,
  63. qian1,xia1,hou2,shang2,qian3,xia3,hou4,shang4,
  64. hou1,xia1,qian2,shang2,hou3,xia3,qian4,shang4,
  65. hou1,xia1,qian2,xia2,hou3,xia3,qian4,xia4
  66. };

  67. code uchar hou[8*6]={                 //動作數組-向后走
  68. hou1,xia1,qian2,xia2,hou3,xia3,qian4,xia4,
  69. hou1,xia1,qian2,shang2,hou3,xia3,qian4,shang4,
  70. qian1,xia1,hou2,shang2,qian3,xia3,hou4,shang4,
  71. qian1,xia1,hou2,xia2,qian3,xia3,hou4,xia4,
  72. qian1,shang1,hou2,xia2,qian3,shang3,hou4,xia4,
  73. hou1,shang1,qian2,xia2,hou3,shang3,qian4,xia4
  74. };

  75. code uchar you[8*6]={                 //動作數組-向右轉
  76. hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
  77. qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
  78. qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
  79. qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
  80. hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
  81. hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4
  82. };
  83. code uchar zuo[8*6]={                 //動作數組-向左轉
  84. hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4,
  85. hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
  86. qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
  87. qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
  88. qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
  89. hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
  90. };
  91. code uchar tiao[8*6]={                 //動作數組-跳舞
  92. hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4,
  93. hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
  94. qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
  95. qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
  96. qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
  97. hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
  98. };
  99. uchar sheding[duo_ji_shu];                //現在設定值
  100. uchar xinzhi[duo_ji_shu];                //新角度

  101. bit   jieshou=0;        //接收成功標志
  102. bit jk=0;//測試
  103. bit jk2=0;//測試
  104. uchar len=0;   //數據長度
  105. uchar ml=0;   //要執行的命令
  106. uchar shuju[max];
  107. uint jishu_jg=0;
  108. bit shijian_l=0;
  109. bit wancheng=0;
  110. bit zhi_xing=0;    //開始執行標志
  111. bit MS_1=0;
  112.         unsigned int  time=0;
  113.         unsigned int  timer=0;
  114.         float         S=0;
  115.     bit           flag =0;
  116. void Delay1ms()                //@27.000MHz
  117. {
  118.         unsigned char i, j;

  119. ;
  120. ;
  121.         i = 7;
  122.         j = 141;
  123.         do
  124.         {
  125.                 while (--j);
  126.         } while (--i);
  127. }
  128. void yanshi_ms(uint m)
  129. {
  130.         while(m--)Delay1ms();
  131. }
  132. void fu_wei()
  133. {
  134.         uchar i=0;
  135.         sheding[0]=0x33;
  136.         sheding[1]=0x3d;//1f
  137.         sheding[2]=0x37;
  138.         sheding[3]=0x43;
  139.         sheding[4]=0x2f;
  140.         sheding[5]=0x39;
  141.         sheding[6]=0x3b;
  142.         sheding[7]=0x41;

  143. }
  144. void chushihua(void)                //初始化20us中斷22.1184MHz
  145. {
  146.         uchar i=0;
  147.           ACC = P_SW1;
  148.     ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  149.     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  150.     SCON = 0x50;                //8位可變波特率
  151.     T2L = (65536 - (FOSC/4/BAUD));   //設置波特率重裝值
  152.     T2H = (65536 - (FOSC/4/BAUD))>>8;
  153.     AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
  154.     AUXR |= 0x01;               //選擇定時器2為串口1的波特率發生器
  155.         

  156.         AUXR |= 0x80;               
  157.         TMOD &= 0xF0;               
  158.         TL0 = di;               
  159.         TH0 = gao;               
  160.         TF0 = 0;               
  161.         TR0 = 1;               
  162.         ET0=0;
  163.         ES=1;
  164.         EA=1;

  165.         AUXR &= 0xdf;                //定時器時鐘12T模式
  166.         TMOD &= 0x0F;                //設置定時器模式

  167.         TF1 = 0;                //清除TF1標志
  168.         TR1 = 0;                //定時器1開始計時

  169.         fu_wei();
  170. }

  171. void yanshi(uint m)
  172. {

  173.         while(m--)
  174.         {
  175.                 if(!zhi_xing)break;
  176.         }
  177. }
  178.         

  179. void send(uchar *j,l)
  180. {
  181.         uchar i=0;
  182.         for(i=0;i<l;i++)
  183.         {
  184.                 SBUF=*(j+i);
  185.                 while(!TI);
  186.                 TI=0;
  187.         }
  188.         yanshi(40000);
  189.         yanshi(40000);
  190.         yanshi(40000);
  191.         yanshi(40000);
  192. }

  193. bit Hand(unsigned char *a)                 //是否包含文本
  194. {
  195.     if(strstr(shuju,a)!=NULL)
  196.             return 1;
  197.         else
  198.                 return 0;
  199. }
  200. void Uart() interrupt 4
  201. {
  202.         if (RI)
  203.         {
  204.                 RI = 0;

  205.                 if(len<max)               
  206.                 {
  207.                         shuju[len++]=SBUF;
  208.                         jishu_jg=0;//清零時間間隔變量
  209.                         shijian_l=1;

  210.                 }
  211.         }
  212. //        if(TI)TI=0;
  213. }
  214. void zhongduan() interrupt 1   //中斷服務
  215. {
  216.         uchar i=0;
  217.         static int jishu=0;
  218. //        static uchar MS=0;
  219.         ET0=0;

  220. //        DJ1=!DJ1;

  221.         if(shijian_l)
  222.         {
  223.                 jishu_jg++;

  224.                 if(jishu_jg>jiange)
  225.                 {

  226.                         jieshou=1;//間隔時間到就說明接收到一個完整的字符串
  227.                         shijian_l=0;
  228.                 }
  229.         }
  230.         if(jishu++==900)
  231.         {
  232.                 jishu=0;
  233.         }

  234.         
  235.         DJ1=(jishu<sheding[0]);
  236.         DJ2=(jishu<sheding[1]);
  237.         DJ3=(jishu<sheding[2]);
  238.         DJ4=(jishu<sheding[3]);
  239.         DJ5=(jishu<sheding[4]);
  240.         DJ6=(jishu<sheding[5]);
  241.         DJ7=(jishu<sheding[6]);
  242.         DJ8=(jishu<sheding[7]);
  243.         DJ9=(jishu<sheding[8]);
  244.         DJ10=(jishu<sheding[9]);
  245.         DJ11=(jishu<sheding[10]);
  246.         DJ12=(jishu<sheding[11]);
  247.         DJ13=(jishu<sheding[12]);
  248.         DJ14=(jishu<sheding[13]);
  249.         DJ15=(jishu<sheding[14]);
  250.         DJ16=(jishu<sheding[15]);
  251.         DJ17=(jishu<sheding[16]);
  252.         DJ18=(jishu<sheding[17]);

  253.         TL0 = di;               
  254.         TH0 = gao;
  255.         ET0=1;
  256. }
  257.    void  StartModule()                          //T1中斷用來掃描數碼管和計800MS啟動模塊
  258.   {
  259.           TX=1;                                         //800MS  啟動一次模塊
  260.           _nop_();
  261.           _nop_();
  262.           _nop_();
  263.           _nop_();
  264.           _nop_();
  265.           _nop_();
  266.           _nop_();
  267.           _nop_();
  268.           _nop_();
  269.           _nop_();
  270.           _nop_();
  271.           _nop_();
  272.           _nop_();
  273.           _nop_();
  274.           _nop_();
  275.           _nop_();
  276.           _nop_();
  277.           _nop_();
  278.           _nop_();
  279.           _nop_();
  280.           _nop_();
  281.           TX=0;
  282.   }
  283. float juli()
  284. {
  285.      StartModule();
  286.          TH1=0;
  287.          TL1=0;
  288.          while(!RX);                //當RX為零時等待
  289.          TR1=1;                            //開啟計數
  290.           while(RX);                        //當RX為1計數并等待
  291.          TR1=0;                                //關閉計數
  292.          time=TH1*256+TL1;
  293.          TH1=0;
  294.          TL1=0;
  295.          S=(time*2.0)/1000;     //算出來是CM
  296.          if(flag==1)
  297.          {
  298.                  flag=0;
  299.                 S=1000;
  300.          }
  301.          return S;
  302.         
  303. }
  304. void qingkong()                  //清空接收緩存
  305. {
  306.         uchar i=0;
  307.         for(i=0;i<max;i++)
  308.         {
  309.                 shuju[i]=0;
  310.         }
  311. }


  312. void WIFI()
  313. {
  314.         while(!Hand("OK"))                            //判斷是否握手成功,如果不成功延時一會,再發送AT握手指令
  315.     {
  316.                         len=0;
  317.                         qingkong();
  318.                         send("AT\r\n",4);                         //發送聯機指令
  319.                         yanshi_ms(1000);
  320.     }
  321.                 qingkong();
  322.                 while(!Hand("OK"))                           
  323.                 {
  324.                         len=0;
  325.                         qingkong();
  326.                         send("AT+CWMODE=2\r\n",13);       //設置為AP模式 讓手機鏈接wifi   
  327.                         yanshi_ms(1000);        
  328.                 }
  329.                 qingkong();
  330.                 while(!Hand("OK"))                           
  331.     {
  332.                         len=0;
  333.                         qingkong();
  334.                         send("AT+CIPMUX=1\r\n",13);          //設置為多連接模式   
  335.                         yanshi_ms(1000);                        
  336.     }        
  337.                 qingkong();
  338.                 send("AT+CIPSERVER=1,8349\r\n",21);  
  339.                 yanshi_ms(1000);        
  340.                 send("AT+CIPSERVER=1,8349\r\n",21);  
  341.                 yanshi_ms(1000);
  342.                 send("AT+CIPSERVER=1,8349\r\n",21);
  343.                 qingkong();
  344.                 len=0;
  345.                 yanshi_ms(1000);
  346.                 wancheng=1;             //初始化完成 置標志位

  347. }


  348. uchar to_uchar(uchar g,uchar d)
  349. {
  350.                 if(g>=97)
  351.                 {
  352.                         g=g-87;
  353.                 }
  354.                 else
  355.                 {
  356.                         if(g<=57)
  357.                         {
  358.                                 g=g-48;
  359.                         }
  360.                 }
  361.                 if(d>=97)
  362.                 {
  363.                         d=d-87;
  364.                 }
  365.                 else
  366.                 {
  367.                         if(d<=57)
  368.                         {
  369.                                 d=d-48;
  370.                         }
  371.                 }
  372.                 return (g<<4)|d;
  373. }


  374. void qianjin()
  375. {
  376.         uchar j=0;
  377.         static uchar i=0;
  378.         static uint y=0;
  379.         if(zhi_xing)
  380.         {
  381.                 if(y++>su_du)
  382.                 {
  383.                         y=0;
  384.                         for(j=0;j<8;j++)
  385.                         {
  386.                                 sheding[j]=qian[i*8+j];
  387.                         }
  388.                         if(i++==5)i=0;
  389.                 }
  390.         }
  391. }
  392. void houtui()
  393. {
  394.         uchar j=0;
  395.         static uchar i=0;
  396.         static uint y=0;
  397.         if(zhi_xing)
  398.         {
  399.                 if(y++>su_du)
  400.                 {
  401.                         y=0;
  402.                         for(j=0;j<8;j++)
  403.                         {
  404.                                 sheding[j]=hou[i*8+j];
  405.                         }
  406.                         if(i++==5)i=0;
  407.                 }
  408.         }
  409. }
  410. void zuozhuan()
  411. {
  412.         uchar j=0;
  413.         static uchar i=0;
  414.         static uint y=0;
  415.         if(zhi_xing)
  416.         {
  417.                 if(y++>su_du)
  418.                 {
  419.                         y=0;
  420.                         for(j=0;j<8;j++)
  421.                         {
  422.                                 sheding[j]=zuo[i*8+j];
  423.                         }
  424.                         if(i++==5)i=0;
  425.                 }
  426.         }
  427. }
  428. void youzhuan()
  429. {
  430.         uchar j=0;
  431.         static uchar i=0;
  432.         static uint y=0;
  433.         if(zhi_xing)
  434.         {
  435.                 if(y++>su_du)
  436.                 {
  437.                         y=0;
  438.                         for(j=0;j<8;j++)
  439.                         {
  440.                                 sheding[j]=you[i*8+j];
  441.                         }
  442.                         if(i++==5)i=0;
  443.                 }
  444.         }
  445. }
  446. void tiaowu()
  447. {
  448.         uchar j=0;
  449.         static uchar i=0;
  450.         static uint y=0;
  451.         if(zhi_xing)
  452.         {
  453.                 if(y++>su_du)
  454.                 {
  455.                         y=0;
  456.                         for(j=0;j<8;j++)
  457.                         {
  458.                                 sheding[j]=tiao[i*8+j];
  459.                         }
  460.                         if(i++==5)i=0;
  461.                 }
  462.         }
  463. }                  
  464. void zhixing()        //執行遙控命令
  465. {
  466.         uchar i=0;
  467.         if(zhi_xing)
  468.         {
  469.                 switch(ml)
  470.                 {
  471.                         case 18:
  472.                                 qianjin(); //前進
  473.                         break;
  474.                         case 19:
  475.                                 houtui();  //后退
  476.                         break;
  477.                         case 20:
  478.                                 zuozhuan();//左轉
  479.                         break;
  480.                         case 21:
  481.                                 youzhuan();//右轉
  482.                         break;
  483.                         case 22:
  484.                                 tiaowu();//跳舞
  485.                         break;
  486.                         case 88:         //遙控按鍵抬起
  487.                         zhi_xing=0;
  488.                         break;
  489.                 }
  490.         }else fu_wei();
  491. }

  492. void main()
  493. {
  494.         uchar k=0,chang=0,i=0,pian_yi=0;
  495.         bit jj=0;
  496.         chushihua();//初始化
  497.         yanshi(40000);               
  498.         yanshi(40000);
  499.         yanshi(40000);
  500.         yanshi(40000);
  501.         yanshi(40000);               
  502.         yanshi(40000);
  503.         yanshi(40000);
  504.         yanshi(40000);
  505.         WIFI();
  506.         yanshi(40000);
  507.         jk=1;

  508.         ET0=1;
  509. //        while(1)
  510. //        {
  511. //                sheding[0]=0x18;        
  512. //        }
  513.         while(1)
  514.         {

  515.                 if(jieshou)
  516.                 {

  517.                         if(Hand("+IPD"))
  518.                         {
  519.                                 k=(uchar)strstr(shuju,"+IPD");
  520.                                 if(shuju[10]==':')//+IPD,2,9:123456789  +IPD,2,12:123456789012
  521.                                 {
  522.                                         chang=to_uchar('0',shuju[7]);//取出數據長度
  523.                                         pian_yi=11;

  524.                                 }else if (shuju[9]==':')
  525.                                 {
  526.                                         chang=to_uchar(shuju[7],shuju[8]);
  527.                                         pian_yi=10;
  528.                                 }else if (shuju[8]==':')
  529.                                 {
  530.                                         pian_yi=9;
  531.                                 }
  532.                                 ml=to_uchar(shuju[pian_yi],shuju[pian_yi+1]);           //保存命令
  533.                                 if(ml<18)//命令小于18 是設定單個舵機角度值
  534.                                 {
  535.                                         sheding[ml]=to_uchar(shuju[pian_yi+2],shuju[pian_yi+3]);//把接收來的角度值賦給相應的舵機
  536.                                 }else
  537.                                 {
  538.                                    zhi_xing=1;                             //命令大于17 是遙控指令 置執行標志 執行相應的遙控動作
  539.                                 }
  540.                         }
  541.                         jieshou=0;
  542.                         len=0;
  543.                         qingkong();
  544.                 }
  545.                 zhixing();   //調用執行子程序

  546.         }
  547. }
復制代碼

所有資料51hei提供下載:
4足仿生機器人.zip (167.91 KB, 下載次數: 14)



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

使用道具 舉報

沙發
ID:1 發表于 2018-9-29 17:42 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久福利一牛影视 | 中文字幕福利 | 国产精品视频999 | 久久久国产一区二区三区 | 国产一区二区三区四区三区四 | 国产精品视频免费观看 | 欧美一区二区三区在线播放 | 极品的亚洲 | 一区二区在线不卡 | 日韩在线一区二区三区 | 色嗨嗨 | 欧美精品一区免费 | 一区二区三区四区在线视频 | 色综合天天天天做夜夜夜夜做 | 国产精品小视频在线观看 | 性福视频在线观看 | 国产综合精品 | 91成人精品视频 | 日韩免费三级 | 日韩三极 | 中文字幕第100页 | 怡红院成人在线视频 | 中文字幕一区二区在线观看 | 亚洲成人一区二区 | 日韩一级不卡 | 一区二区三区日韩 | 99久久婷婷国产精品综合 | 亚洲巨乳自拍在线视频 | 欧美激情综合 | 亚洲男人网 | 伊人伊人 | 网站黄色在线免费观看 | 国产午夜亚洲精品不卡 | 国产日韩免费观看 | 精品一区二区三区在线观看国产 | 午夜私人影院 | 一级片av| 91久久视频 | 草草视频在线免费观看 | 久草影视在线 | 久久九九网站 |