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

发布者:科技创客最新更新时间:2020-03-02 来源: 51hei关键字:STC15  单片机  循迹避障遥控车 手机看文章 扫描二维码
随时随地手机看文章

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);        

                TI=0;

                ES=1;

                LRF_flag=0;

[1] [2] [3]
关键字:STC15  单片机  循迹避障遥控车 引用地址:基于STC15单片机的循迹避障遥控车

上一篇:单片机PWM直流电机调速显示转速
下一篇:深入理解单片机的串转并IC-74HC595的工作时序及用法

推荐阅读最新更新时间:2024-11-11 04:35

单片机 I2C操作笔记——以 AT24C04为例
1.前言 对于大多数工程师而言,I2C永远是一个头疼的问题。相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些。在这里以AT24C04为例说明I2C使用过程中的一些注意点。 2.AT24C04操作示意图 图 AT24C04操作示意图 示意图说明:示意图分阐述了4种不同的操作方式,例如写单个存储单元,写多个存储单元,读单个存储单元和写单个存储单元。对于单个操作而言,上部为MCU通过I2C输出的相关指令,下部为I2C设备的响应。例如写单个存储单元操作时,MCU发出I2C启动,设备地址,写标志位等,而I2C设备输出多个ACK。 3.若干说明 3.1 基本操作方式 I2C设备的操作可分为写单个
[单片机]
关于Msp430 Flash型单片机内部Flash的操作
1 Msp430Flash型单片机内部Flash存储器介绍 MSP430的Flash存储器是可位、字节、字寻址和编程的存储器。该模块由一个集成控制器来控制编程和擦除的操作。控制器包括三个寄存器,一个时序发生器及一个提供编程、擦除电压的电压发生器。 Msp430的Flash存储器的特点有: 1)产生内部编程电压 2)可位、字节、字编程,可以单个操作,也可以连续多个操作 3)超低功耗操作 4)支持段擦除和多段模块擦除 2 Flash存储器的分割 Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。 Flash 存储器被分割成两部分:主存储器和
[单片机]
机器人的电机控制电路
电机控制电路采用大功率对管BDl39、BDl40组成的H型驱动电路,通过单片机产生占空比不同的PWM脉冲,精确调整电机的转速。这种电路由于工作在晶体管饱和或截止状态,避免了在线性放大区工作时晶体管的管耗,可以最大限度地提高效率;H型电路保证了可以简单地实现电机转速和方向的控制。机器人的 电机控制 电路:
[单片机]
机器人的电机控制电路
8051单片机的特点_8051单片机的控制总线信号有哪些
  8051单片机的特点   8051的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。   8051的指令系统具有以下特点:   (1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。   (2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。这为编成翻译算法提供
[单片机]
51单片机用三种方法实现流水灯
一、数组流水灯 定义一组数组分别对应点亮LED1~7 然后利用for循环赋值给p2从而实现流水灯 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code table = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数组 // 函数功能:毫秒延时 void delay(uint z) { uint x,y; for(x = 0; x z; x++) for(y = 0; y 113; y++); } void main() { uchar
[单片机]
51<font color='red'>单片机</font>用三种方法实现流水灯
基于使用STM8单片机I2C方式实现读写操作
STM8硬件I2C知识 STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz)或快速(最高400kHz)的I2C总线。 1.I2C的4种模式 ● 从设备发送模式 ● 从设备接收模式 ● 主设备发送模式 ● 主设备接收模式 2.I2C的主要特点 ● 并行总线/I2C总线协议转换器 ● 多主机功能:该模块既可做主设备也可做从设备 ●I2C主设备功能 ─ 产生起始和停止信号 ●I2C从设备功能 ─ 可编程的I2C 地址检测 ─ 停止位检测 ● 产
[单片机]
基于使用STM8<font color='red'>单片机</font>I2C方式实现读写操作
意法半导体微控制器STM32H5 探索套件加快安全、智能、互联设备开发
首款支持Secure Manager的开发套件,一个集成ST认证和维护的核心安全服务的系统芯片总包方案 2023年9月19日 ,中国 -意法半导体发布了一款功能丰富的STM32H5微控制器(MCU)开发板 。STM32H5微控制器是开发高性能数据处理和高级安全应用的理想选择,适合开发各种应用,例如,智能传感器、智能家电、工业控制器、网络设备、个人电子产品和医疗设备。 STM32H573I-DK探索套件让开发人员能够探索STM32H5集成的全部功能,例如,模拟外设、定时器、ST ART(自适应实时)加速器™、媒体接口和数学加速器,方便开发者评估工业可编程逻辑控制器(PLC)、电机驱动器,以及空调、冰箱和洗衣机等家电的智
[单片机]
意法半导体<font color='red'>微控制器</font>STM32H5 探索套件加快安全、智能、互联设备开发
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved