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;
上一篇:单片机PWM直流电机调速显示转速
下一篇:深入理解单片机的串转并IC-74HC595的工作时序及用法
推荐阅读最新更新时间:2024-11-11 04:35
设计资源 培训 开发板 精华推荐
- 单片机原理教学用电路板
- Blacky四足机器人供电PCB
- 用于仪表的 16 位、2 通道 DAC
- STEVAL-MKI169V1,用于标准 DIL24 插座的 I3G4250D 适配器板
- 使用 Analog Devices 的 LTC2946IDE-1 的参考设计
- 无线回传
- T12手柄支架带控制板可直接打板修改
- 使用 ON Semiconductor 的 LV5103LP 的参考设计
- ADR5041A 2.5 Vout 精密微功率并联模式电压基准的典型应用,适用于 ±15 V 输出,采用堆叠式 ADR5045 器件
- 使用 ROHM Semiconductor 的 BD48L41G-TL 的参考设计