×
单片机 > 单片机程序设计 > 详情

基于STC15单片机的循迹避障遥控车

发布时间:2020-08-25 发布时间:
|

Altium Designer画的基于STC15的循迹避障遥控车原理图和PCB图如下:

单片机源程序如下:

#include "all.h"

extern unsigned char code INRECO[],TL[],TriLU[],TriLD[],TRU[],TRD[],FR[],TriRU[],TriRD[],ST[],TR[],BR[],Back[];

extern bit deal_over;

extern bit deal_over_flag;

extern bit flag;

extern ADC_BF_value,ADC_LR_value;

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;

int switch_flag,UD_flag,V_flag;

sbit key=P2^0;

sbit key2=P3^2;

sbit key3=P2^0;

void main(void)

{

        Oled_init();

        ADC_init();

    uart_init();

        fill_picture(0x00);           //清屏

        while(1)

        {

         if(Blue_flag==0)

          {

                        ES=0;

                           TI=1;

                          printf("%s","BCS");

                        while(!TI);

                        TI=0;

                        ES=1;

          }

         if(key==0)                                                  //切换显示模式

        {

           switch_flag++;

           switch_flag=switch_flag%3;

           clean_flag=1;

           if(RECO_flag==1)

           {

                           RECO_flag=0;                //摇杆模式        标志位

                        switch_flag=0;

                        S_flag=0;

           }

           while(!key);

        }

        if(RECO_flag==0)                          

                if(switch_flag==0)

                        State();

                else if(switch_flag==1)

                        Mode_SW();

                else if(switch_flag==2)

                        V_SW();

        if((ADC_BF_value>300||ADC_BF_value<200)&&switch_flag==1)        //处于模式切换界面时的遥杆操作

        {

                if(ADC_BF_value<200)

                         UD_flag--;

                if(ADC_BF_value>300)

                        UD_flag++;

                if(UD_flag>=3)

                        UD_flag=0;

                if(UD_flag<0)

                        UD_flag=2;

                clean_flag=1;

                

        }

                if((ADC_BF_value>300||ADC_BF_value<200)&&switch_flag==2)        //处于速度切换界面时的遥杆操作

        {

                if(ADC_BF_value<200)

                         V_flag-=1;

                if(ADC_BF_value>300)

                        V_flag+=1;

                if(V_flag>=10)

                        V_flag=0;

                if(V_flag<0)

                        V_flag=9;

                        Send_V_flag=1;

                clean_flag=1;

        }

                if((ADC_LR_value>400||ADC_LR_value<100)&&switch_flag==1)

        {

                if(UD_flag==0)                                          //循迹切换开关

                {

                        Tracing_flag=!Tracing_flag;

                        Send_T_flag=!Send_T_flag;

                }

                if(UD_flag==1)                        //避障切换开关

                {

                        U_flag=!U_flag;

                        Send_U_flag=!Send_U_flag;

                }

                if(UD_flag==2)                        //进入

                {

                

                        RECO_flag=1;

                        if(S_flag==0)

                        {

                                fill_picture(0x00);           //清屏

                                ShowCN(INRECO,4,0,8);

                                delay(100);

                                fill_picture(0x00);           //清屏

                                Show_array(INRECO,0,2,4,3);

                                S_flag=1;

                                switch_flag=3;

                        } 

                        Show_array(INRECO,0,2,4,3);

                }

                clean_flag=1;

        }

        /*************遥杆模式的显示调用和数据发送*****************/

        if(ADC_LR_value<100&RECO_flag==1)          //left

        {

                if(clean_flag==1)

                        fill_picture(0x00);

                clean_flag=0;                

                ShowCN(TL,3,0,1);

                ShowCN(TriLU,3,1,1);

                ShowCN(TriLD,5,1,1);

                ShowCN(TRU,3,2,1);

                ShowCN(TRD,5,2,1);

                Show_array(TL,5,0,1,1);

                if(LRF_flag==1)

                {        

                ES=0;

                 TI=1;

            printf("%s","TLS");

while(!TI);


关键字:STC15  单片机  循迹避障遥控车 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计