历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2020年03月02日 | 基于STC15单片机的循迹避障遥控车

2020-03-02 来源:51hei

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;

推荐阅读

史海拾趣

B&F Fastener Supply公司的发展小趣事

为了进一步完善电子供应链,B&F Fastener Supply公司积极寻求并购机会。经过多轮谈判和尽职调查,公司成功收购了某家专注于电子元器件供应的公司。这次并购使得B&F的产品线更加丰富,能够为客户提供一站式的电子供应链解决方案。

DESOUTTER公司的发展小趣事

近年来,Desoutter公司开始重视中国市场的发展,并加大了在中国的投资和布局。公司在中国设立了多个销售和服务中心,以便更好地服务中国客户。同时,Desoutter公司还与中国本土企业开展合作,共同开发适合中国市场的产品。这些举措使Desoutter公司在中国市场的份额不断扩大,品牌影响力也得到了提升。

以上五个故事涵盖了Desoutter公司在电子行业中的发展历程、技术创新、国际化战略、合并与扩张以及中国市场的发展等方面。这些故事基于事实描述,旨在展现Desoutter公司在电子行业中的成长和变化。

CyOptics Inc公司的发展小趣事

随着Avago的进一步发展和演变,CyOptics作为其子品牌也迎来了新的发展机遇。如今,Avago已经演变为Broadcom公司,而CyOptics则继续以其在光学领域的专业技术和丰富经验为Broadcom的产品线增添光彩。展望未来,CyOptics将继续秉承其技术领先和创新驱动的理念,为全球客户提供更加优质的光学产品和服务。

Franz Binder GmbH & Co公司的发展小趣事

随着Avago的进一步发展和演变,CyOptics作为其子品牌也迎来了新的发展机遇。如今,Avago已经演变为Broadcom公司,而CyOptics则继续以其在光学领域的专业技术和丰富经验为Broadcom的产品线增添光彩。展望未来,CyOptics将继续秉承其技术领先和创新驱动的理念,为全球客户提供更加优质的光学产品和服务。

三环(CCTC)公司的发展小趣事

随着科技的不断进步和市场环境的变化,三环(CCTC)公司认识到科技创新是企业持续发展的关键。因此,公司加大了研发投入力度,引进和培养了一批高素质的研发人才,建立了以博士、硕士为主组成的技术研发团队。同时,公司积极承担并完成多个国家、省级重点科研项目,不断开展新材料、新产品、新技术的研究与创新。这些努力使公司在多个领域取得了突破性的成果,实现了转型升级。

Coors Components Inc公司的发展小趣事

在面对激烈的市场竞争时,Coors Components Inc公司果断调整市场策略,将目标市场从高端用户转向中端市场。通过优化产品线、提升服务质量以及加强品牌营销,公司成功吸引了大量中端市场的消费者。这一策略调整不仅使公司的销售额大幅提升,还为其未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

数码管段位计算程序

网上找的数码管段位计算程序。对初学者可能有帮助,高手勿扰…

查看全部问答>

mif文件生成小工具,自己再往下找的,大家看下啊

可以看频谱,可以生成四种基本波形,和自己手绘波形…

查看全部问答>

proteus仿真问题

因为还在等器件所以想用proteus做下仿真 但发现有的器件找不到      有地方可以下元器件库么…

查看全部问答>

时序分析与时序约束

时序分析与时序约束…

查看全部问答>

X射线对人体有何损害作用?应采用什么防护措施?

1)生物体接收X射线照射时,产生生物效应,破坏正常的组织细胞,产生生物损伤。 2) 主要从以下几个方面加强防护: ①加强固有防护设施;②缩短X射线照射时间;③加大与X射线源的距离;④尽可能应用各种屏蔽。 详细分析: X射线与物质相互作用时产生 ...…

查看全部问答>

wince 串口通信

我自己写了一个串口通信工具, 用 VS2005 单步调试时,接收数据是正确的,但正常运行时,接受数据有误, eg: 源数据:1234567 1234567 ..........   接收显示:1111111 2345677 1111111 2345677 ............. 请问这是什么原因?是不 ...…

查看全部问答>

STM32的IAP应用问题

有人做过STM32 的IAP吗 我用CAN接口做了IAP 有两个程序区 8000000-8002000是BOOT区,写入的启动代码,引导应用程序写入的。 8002000-结尾是应用区,APP程序区 现在的问题是进行APP程序后,不响应中断 如果不用中断程序,在APP工作一切正 ...…

查看全部问答>

RS485的奇怪问题

我是147调试MODUS程序的,接收是采用中断,发送放在main中,接收中断中一次收8个字节的数据,可是总是第一个数据大部分是不正确,本来发送的3,结果接收后就变成了0x85等一些其他数,更奇怪的是我的主程序里面做了一些改动,就是注释掉一些函数(减 ...…

查看全部问答>

DA双缓冲方式

本帖最后由 paulhyde 于 2014-9-15 09:43 编辑 DA双缓冲方式,编程应该怎么编,我的怎么不能传送数据?  …

查看全部问答>

视频信号转换问题

请问:视频信号转换ADV7123的10位数据位一定要用上吗?跟我们平时说的8位有什么区别?谢谢!…

查看全部问答>