历史上的今天
今天是: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;
史海拾趣
|
1)生物体接收X射线照射时,产生生物效应,破坏正常的组织细胞,产生生物损伤。 2) 主要从以下几个方面加强防护: ①加强固有防护设施;②缩短X射线照射时间;③加大与X射线源的距离;④尽可能应用各种屏蔽。 详细分析: X射线与物质相互作用时产生 ...… 查看全部问答> |
|
我自己写了一个串口通信工具, 用 VS2005 单步调试时,接收数据是正确的,但正常运行时,接受数据有误, eg: 源数据:1234567 1234567 .......... 接收显示:1111111 2345677 1111111 2345677 ............. 请问这是什么原因?是不 ...… 查看全部问答> |
|
有人做过STM32 的IAP吗 我用CAN接口做了IAP 有两个程序区 8000000-8002000是BOOT区,写入的启动代码,引导应用程序写入的。 8002000-结尾是应用区,APP程序区 现在的问题是进行APP程序后,不响应中断 如果不用中断程序,在APP工作一切正 ...… 查看全部问答> |
|
我是147调试MODUS程序的,接收是采用中断,发送放在main中,接收中断中一次收8个字节的数据,可是总是第一个数据大部分是不正确,本来发送的3,结果接收后就变成了0x85等一些其他数,更奇怪的是我的主程序里面做了一些改动,就是注释掉一些函数(减 ...… 查看全部问答> |




