找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STC15單片機的循跡避障遙控車PCB文件+程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:524037 發(fā)表于 2019-7-6 19:51 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
Altium Designer畫的基于STC15的循跡避障遙控車原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include "all.h"
  2. extern unsigned char code INRECO[],TL[],TriLU[],TriLD[],TRU[],TRD[],FR[],TriRU[],TriRD[],ST[],TR[],BR[],Back[];
  3. extern bit deal_over;
  4. extern bit deal_over_flag;
  5. extern bit flag;
  6. extern ADC_BF_value,ADC_LR_value;
  7. bit Show_flag,Tracing_flag,U_flag,clean_flag,light_flag,RE_flag,RECO_flag,Send_T_flag,S_flag,Send_U_flag,LRF_flag,B_flag,Blue_flag,Back_flag,Send_V_flag;
  8. int switch_flag,UD_flag,V_flag;
  9. sbit key=P2^0;
  10. sbit key2=P3^2;
  11. sbit key3=P2^0;
  12. void main(void)
  13. {
  14.         Oled_init();
  15.         ADC_init();
  16.     uart_init();
  17.         fill_picture(0x00);           //清屏
  18.         while(1)
  19.         {
  20.          if(Blue_flag==0)
  21.           {
  22.                         ES=0;
  23.                            TI=1;
  24.                           printf("%s","BCS");
  25.                         while(!TI);
  26.                         TI=0;
  27.                         ES=1;
  28.           }
  29.          if(key==0)                                                  //切換顯示模式
  30.         {
  31.            switch_flag++;
  32.            switch_flag=switch_flag%3;
  33.            clean_flag=1;
  34.            if(RECO_flag==1)
  35.            {
  36.                            RECO_flag=0;                //搖桿模式        標(biāo)志位
  37.                         switch_flag=0;
  38.                         S_flag=0;
  39.            }
  40.            while(!key);
  41.         }
  42.         if(RECO_flag==0)                          
  43.                 if(switch_flag==0)
  44.                         State();
  45.                 else if(switch_flag==1)
  46.                         Mode_SW();
  47.                 else if(switch_flag==2)
  48.                         V_SW();
  49.         if((ADC_BF_value>300||ADC_BF_value<200)&&switch_flag==1)        //處于模式切換界面時的遙桿操作
  50.         {
  51.                 if(ADC_BF_value<200)
  52.                          UD_flag--;
  53.                 if(ADC_BF_value>300)
  54.                         UD_flag++;
  55.                 if(UD_flag>=3)
  56.                         UD_flag=0;
  57.                 if(UD_flag<0)
  58.                         UD_flag=2;
  59.                 clean_flag=1;
  60.                
  61.         }
  62.                 if((ADC_BF_value>300||ADC_BF_value<200)&&switch_flag==2)        //處于速度切換界面時的遙桿操作
  63.         {
  64.                 if(ADC_BF_value<200)
  65.                          V_flag-=1;
  66.                 if(ADC_BF_value>300)
  67.                         V_flag+=1;
  68.                 if(V_flag>=10)
  69.                         V_flag=0;
  70.                 if(V_flag<0)
  71.                         V_flag=9;
  72.                         Send_V_flag=1;
  73.                 clean_flag=1;
  74.         }
  75.                 if((ADC_LR_value>400||ADC_LR_value<100)&&switch_flag==1)
  76.         {
  77.                 if(UD_flag==0)                                          //循跡切換開關(guān)
  78.                 {
  79.                         Tracing_flag=!Tracing_flag;
  80.                         Send_T_flag=!Send_T_flag;
  81.                 }
  82.                 if(UD_flag==1)                        //避障切換開關(guān)
  83.                 {
  84.                         U_flag=!U_flag;
  85.                         Send_U_flag=!Send_U_flag;
  86.                 }
  87.                 if(UD_flag==2)                        //進入
  88.                 {
  89.                
  90.                         RECO_flag=1;
  91.                         if(S_flag==0)
  92.                         {
  93.                                 fill_picture(0x00);           //清屏
  94.                                 ShowCN(INRECO,4,0,8);
  95.                                 delay(100);
  96.                                 fill_picture(0x00);           //清屏
  97.                                 Show_array(INRECO,0,2,4,3);
  98.                                 S_flag=1;
  99.                                 switch_flag=3;
  100.                         }
  101.                         Show_array(INRECO,0,2,4,3);
  102.                 }
  103.                 clean_flag=1;
  104.         }
  105.         /*************遙桿模式的顯示調(diào)用和數(shù)據(jù)發(fā)送*****************/
  106.         if(ADC_LR_value<100&RECO_flag==1)          //left
  107.         {
  108.                 if(clean_flag==1)
  109.                         fill_picture(0x00);
  110.                 clean_flag=0;               
  111.                 ShowCN(TL,3,0,1);
  112.                 ShowCN(TriLU,3,1,1);
  113.                 ShowCN(TriLD,5,1,1);
  114.                 ShowCN(TRU,3,2,1);
  115.                 ShowCN(TRD,5,2,1);
  116.                 Show_array(TL,5,0,1,1);
  117.                 if(LRF_flag==1)
  118.                 {       
  119.                 ES=0;
  120.                  TI=1;
  121.             printf("%s","TLS");
  122.                 while(!TI);       
  123.                 TI=0;
  124.                 ES=1;
  125.                 LRF_flag=0;
  126.                 }
  127.                 B_flag=1;
  128.                 clean_flag=1;
  129.                 if(ADC_LR_value<=100)
  130.                 {
  131.                         B_flag=0;       
  132.                 }
  133.                 else
  134.                         B_flag=1;
  135.         }
  136.         if(ADC_BF_value<100&&RECO_flag==1)          //forward
  137.         {
  138.                 if(clean_flag==1)
  139.                         fill_picture(0x00);
  140.                 clean_flag=0;
  141.                 ShowCN(FR,2,2,1);
  142.                 ShowCN(TriLU,2,3,1);
  143.                 ShowCN(TriRU,2,4,1);
  144.                 ShowCN(ST,4,3,2);
  145.                 Show_array(FR,2,5,1,1);
  146.                 if(LRF_flag==1)
  147.                 {       
  148.                 ES=0;
  149.                  TI=1;
  150.             printf("%s","GOS");
  151.                 while(!TI);       
  152.                 TI=0;
  153.                 ES=1;
  154.                 LRF_flag=0;
  155.                 }
  156.                 B_flag=1;
  157.                 clean_flag=1;
  158.                 if(ADC_BF_value<=100)
  159.                 {
  160.                         B_flag=0;       
  161.                 }
  162.                 else
  163.                         B_flag=1;
  164.         }
  165.                 if(ADC_BF_value>400&&RECO_flag==1)          //Back
  166.         {
  167.                 if(clean_flag==1)
  168.                         fill_picture(0x00);
  169.                 clean_flag=0;
  170.                 ShowCN(Back,6,2,1);
  171.                 ShowCN(TriLD,6,3,1);
  172.                 ShowCN(TriRD,6,4,1);
  173.                 ShowCN(ST,4,3,2);
  174.                 Show_array(Back,6,5,1,1);
  175.                 Back_flag=0;
  176.                 if(LRF_flag==1)
  177.                 {       
  178.                 ES=0;
  179.                  TI=1;
  180.             printf("%s","BAS");
  181.                 while(!TI);       
  182.                 TI=0;
  183.                 ES=1;
  184.                 LRF_flag=0;
  185.                 }
  186.                 B_flag=1;
  187.                 clean_flag=1;
  188.                 while(ADC_BF_value>400);
  189.         }
  190.         if(ADC_LR_value>400&&RECO_flag==1)         //        right
  191.         {
  192.                 if(clean_flag==1)
  193.                         fill_picture(0x00);
  194.                 clean_flag=0;
  195.                 ShowCN(TR,3,6,1);
  196.                 ShowCN(TriRU,3,5,1);
  197.                 ShowCN(TriRD,5,5,1);
  198.                 ShowCN(TRU,3,4,1);
  199.                 ShowCN(TRD,5,4,1);
  200.                 Show_array(TR,5,6,1,1);
  201.                 if(LRF_flag==1)
  202.                 {
  203.                 ES=0;
  204.                  TI=1;
  205.                    printf("%s","TRS");
  206.                 while(!TI);
  207.                 TI=0;
  208.                 ES=1;       
  209.                 LRF_flag=0;
  210.                 }
  211.                 B_flag=1;
  212.                 clean_flag=1;
  213.                         while(ADC_LR_value>400);
  214.         }
  215.                 if((100<ADC_BF_value<400)&&(100<ADC_LR_value<400)&&RECO_flag==1)         //stop
  216.         {
  217.                 if(clean_flag==1)
  218.                 fill_picture(0x00);
  219.                 clean_flag=0;
  220.                 ShowCN(BR,5,3,2);
  221.                 LRF_flag=1;
  222.                 if(B_flag==1)
  223.                 {
  224.                         ES=0;
  225.                            TI=1;
  226.                           printf("%s","BKS");
  227.                         while(!TI);
  228.                         TI=0;
  229.                         ES=1;
  230.                         B_flag=0;
  231.                         clean_flag=1;
  232.             }
  233.         }
  234.        
  235. /***************切換模式界面的串口發(fā)送*************************/
  236.         if(U_flag==1&&Tracing_flag==1&&switch_flag==1&&(Send_T_flag==1||Send_U_flag==1))
  237.         {
  238.                 ES=0;
  239.                  TI=1;
  240.                   printf("%s","UTOS");
  241.                 while(!TI);
  242.                 TI=0;
  243.                 Send_U_flag=0;
  244.                 Send_T_flag=0;
  245.                 ES=1;
  246.         }
  247.                 if(U_flag==0&&Tracing_flag==0&&switch_flag==1&&(Send_T_flag==1||Send_U_flag==1))
  248.         {
  249.                 ES=0;
  250.                  TI=1;
  251.                   printf("%s","UTCS");
  252.                 while(!TI);
  253.                 TI=0;
  254.                 Send_U_flag=0;
  255.                 Send_T_flag=0;
  256.                 ES=1;
  257.         }
  258.         if(U_flag==1&&Send_U_flag==1&&switch_flag==1)
  259.         {
  260.                 ES=0;
  261.                  TI=1;
  262.                   printf("%s","UOS");
  263.                 while(!TI);
  264.                 TI=0;
  265.                 Send_U_flag=0;
  266.                 ES=1;
  267.         }
  268.                 if(U_flag==0&&Send_U_flag==1&&switch_flag==1)
  269.         {
  270.                 ES=0;
  271.                  TI=1;
  272.                   printf("%s","UCS");
  273.                 while(!TI);
  274.                 TI=0;
  275.                 Send_U_flag=0;
  276.                 ES=1;
  277.         }
  278.                 if(Tracing_flag==1&&Send_T_flag==1&&switch_flag==1)
  279.         {
  280.                 ES=0;
  281.                  TI=1;
  282.                   printf("%s","TOS");
  283.                 while(!TI);
  284.                 TI=0;
  285.                 Send_T_flag=0;
  286.                 ES=1;
  287.         }
  288.                 if(Tracing_flag==0&&Send_T_flag==1&&switch_flag==1)
  289.         {
  290.                 ES=0;
  291.                  TI=1;
  292.                   printf("%s","TCS");
  293.                 while(!TI);
  294.                 TI=0;
  295.                 Send_T_flag=0;
  296.                 ES=1;
  297.         }
  298. }
  299. }
復(fù)制代碼

所有資料51hei提供下載:
作品.7z (959.22 KB, 下載次數(shù): 37)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:658677 發(fā)表于 2019-12-8 10:53 | 只看該作者
大佬,這個程序我頭文件沒有識別出來啊?
回復(fù)

使用道具 舉報

板凳
ID:475207 發(fā)表于 2020-3-2 08:53 | 只看該作者
感謝大佬,終于找到一個比較完整的教程
回復(fù)

使用道具 舉報

地板
ID:723182 發(fā)表于 2020-11-16 17:51 來自手機 | 只看該作者
文件損壞了啊這
回復(fù)

使用道具 舉報

5#
ID:328014 發(fā)表于 2020-11-16 18:03 | 只看該作者

剛下載測試了下 7z文件要用最新版的winrar可以打開,無報錯
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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