|
Altium Designer畫的基于STC15的循跡避障遙控車原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (35.17 KB, 下載次數(shù): 41)
下載附件
2019-7-8 19:45 上傳
0.png (8.17 KB, 下載次數(shù): 47)
下載附件
2019-7-8 19:46 上傳
單片機源程序如下:
- #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; //搖桿模式 標(biāo)志位
- 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) //循跡切換開關(guān)
- {
- Tracing_flag=!Tracing_flag;
- Send_T_flag=!Send_T_flag;
- }
- if(UD_flag==1) //避障切換開關(guān)
- {
- 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;
- }
- /*************遙桿模式的顯示調(diào)用和數(shù)據(jù)發(fā)送*****************/
- 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_flag=1;
- clean_flag=1;
- if(ADC_LR_value<=100)
- {
- B_flag=0;
- }
- else
- B_flag=1;
- }
- if(ADC_BF_value<100&&RECO_flag==1) //forward
- {
- if(clean_flag==1)
- fill_picture(0x00);
- clean_flag=0;
- ShowCN(FR,2,2,1);
- ShowCN(TriLU,2,3,1);
- ShowCN(TriRU,2,4,1);
- ShowCN(ST,4,3,2);
- Show_array(FR,2,5,1,1);
- if(LRF_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","GOS");
- while(!TI);
- TI=0;
- ES=1;
- LRF_flag=0;
- }
- B_flag=1;
- clean_flag=1;
- if(ADC_BF_value<=100)
- {
- B_flag=0;
- }
- else
- B_flag=1;
- }
- if(ADC_BF_value>400&&RECO_flag==1) //Back
- {
- if(clean_flag==1)
- fill_picture(0x00);
- clean_flag=0;
- ShowCN(Back,6,2,1);
- ShowCN(TriLD,6,3,1);
- ShowCN(TriRD,6,4,1);
- ShowCN(ST,4,3,2);
- Show_array(Back,6,5,1,1);
- Back_flag=0;
- if(LRF_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","BAS");
- while(!TI);
- TI=0;
- ES=1;
- LRF_flag=0;
- }
- B_flag=1;
- clean_flag=1;
- while(ADC_BF_value>400);
- }
- if(ADC_LR_value>400&&RECO_flag==1) // right
- {
- if(clean_flag==1)
- fill_picture(0x00);
- clean_flag=0;
- ShowCN(TR,3,6,1);
- ShowCN(TriRU,3,5,1);
- ShowCN(TriRD,5,5,1);
- ShowCN(TRU,3,4,1);
- ShowCN(TRD,5,4,1);
- Show_array(TR,5,6,1,1);
- if(LRF_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","TRS");
- while(!TI);
- TI=0;
- ES=1;
- LRF_flag=0;
- }
- B_flag=1;
- clean_flag=1;
- while(ADC_LR_value>400);
- }
- if((100<ADC_BF_value<400)&&(100<ADC_LR_value<400)&&RECO_flag==1) //stop
- {
- if(clean_flag==1)
- fill_picture(0x00);
- clean_flag=0;
- ShowCN(BR,5,3,2);
- LRF_flag=1;
- if(B_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","BKS");
- while(!TI);
- TI=0;
- ES=1;
- B_flag=0;
- clean_flag=1;
- }
- }
-
- /***************切換模式界面的串口發(fā)送*************************/
- if(U_flag==1&&Tracing_flag==1&&switch_flag==1&&(Send_T_flag==1||Send_U_flag==1))
- {
- ES=0;
- TI=1;
- printf("%s","UTOS");
- while(!TI);
- TI=0;
- Send_U_flag=0;
- Send_T_flag=0;
- ES=1;
- }
- if(U_flag==0&&Tracing_flag==0&&switch_flag==1&&(Send_T_flag==1||Send_U_flag==1))
- {
- ES=0;
- TI=1;
- printf("%s","UTCS");
- while(!TI);
- TI=0;
- Send_U_flag=0;
- Send_T_flag=0;
- ES=1;
- }
- if(U_flag==1&&Send_U_flag==1&&switch_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","UOS");
- while(!TI);
- TI=0;
- Send_U_flag=0;
- ES=1;
- }
- if(U_flag==0&&Send_U_flag==1&&switch_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","UCS");
- while(!TI);
- TI=0;
- Send_U_flag=0;
- ES=1;
- }
- if(Tracing_flag==1&&Send_T_flag==1&&switch_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","TOS");
- while(!TI);
- TI=0;
- Send_T_flag=0;
- ES=1;
- }
- if(Tracing_flag==0&&Send_T_flag==1&&switch_flag==1)
- {
- ES=0;
- TI=1;
- printf("%s","TCS");
- while(!TI);
- TI=0;
- Send_T_flag=0;
- ES=1;
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
作品.7z
(959.22 KB, 下載次數(shù): 37)
2019-7-8 19:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|