|
本人自己寫的程序,之前參加比賽用的,不懂就問
單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- #include "string.h"
- volatile u8 aRxBuffer[100]={0};
- volatile u8 RxCounter=0;
- volatile u8 ReceiveState=0;
- volatile u8 aRxBuffer2[100]={0};
- volatile u8 RxCounter2=0;
- volatile u8 ReceiveState2=0;
- char flag=0;
- float a=0;
- float b=0;
- float c=0;
- float d=0;
- u16 m[2]={0};
- char timeflag=0;
- int x=0;
-
- int main(void)
- {
- u16 time1,time2;
- int i=0;
- delay_init(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- uart1_init(9600); //串口初始化為115200
- uart3_init(9600);
- LED_Init(); //LED端口初始化
- TIM3_PWM_Init(2879,0); //不分頻。PWM頻率=72000000/900=80Khz
- TIM_SetCompare1(TIM3,0);
- TIM_SetCompare2(TIM3,0);
- while(1)
- {
- if(flag==1)
- {
- delay_ms(120);
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- if(a>=1500) a--;
- }
- if(flag==2)
- {
- delay_ms(time1);
- TIM_SetCompare1(TIM3,m[0]);
- //TIM_SetCompare2(TIM3,m[1]);
- if(m[0]>=1500) m[0]--;
- }
- if(flag==3)
- {
- //delay_ms(8000);
- TIM_SetCompare1(TIM3,2735);
- TIM_SetCompare2(TIM3,2735);
- for(x=0;x<=7;x++)
- {
- delay_ms(1000);
- }
- TIM_SetCompare1(TIM3,0);
- TIM_SetCompare2(TIM3,0);
- flag=0;
- }
-
- if(timeflag==1)
- {
- timeflag=0;
- TIM_SetCompare2(TIM3,m[1]);
- if(m[1]>=1500) m[1]--;
- //printf("111");
- }
-
- if( ReceiveState == 1) //電腦調(diào)試
- {
- for(i=0;i<=8;i++)
- {
- if((aRxBuffer[i]==0x4d)&&(aRxBuffer[i+1]==0x4d))
- {
- if(aRxBuffer[i+8]==0x00)
- {
- flag=0;
- TIM_ITConfig(TIM5,TIM_IT_Update,DISABLE );
- m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
- m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
- TIM_SetCompare1(TIM3,m[0]);
- TIM_SetCompare2(TIM3,m[1]);
- PBout(13)=aRxBuffer[i+4];
- PBout(14)=aRxBuffer[i+7];
- a=((float)m[0])/2879;
- b=((float)m[1])/2879;
- printf("%.2f%% : %.2f%%",a*100,b*100);
- break;
- }
- if(aRxBuffer[i+8]==0x01)
- {
- m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
- m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
- PBout(13)=aRxBuffer[i+4];
- PBout(14)=aRxBuffer[i+7];
- flag=2;
- time1=aRxBuffer[i+9];
- time2=((u16)aRxBuffer[i+10])*100;
- printf("time1 = %d",time1);
- printf("time2 = %d",time2);
- TIM_SetCompare1(TIM3,m[0]);
- TIM_SetCompare2(TIM3,m[1]);
- TIM5_Int_Init(time2,7199);
- break;
- }
- }
- }
- memset((void *)aRxBuffer,0,100);
- ReceiveState=0;
- RxCounter=0;
- }
-
- if(ReceiveState2 == 1)
- {
- printf("ok");
- if(aRxBuffer2[0]==0xFF)
- {
- if(aRxBuffer2[1]==0xaa) //前進(jìn)
- {
- flag=0;
- a=2159;
- b=2101;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)2159)/2879;
- d=((float)2101)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[2]==0xaa) //左轉(zhuǎn)
- {
- flag=0;
- a=1958;
- b=1987;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)1958)/2879;
- d=((float)1987)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[3]==0xaa) //右轉(zhuǎn)
- {
- flag=0;
- a=2159;
- b=1958;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)2159)/2879;
- d=((float)1958)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[4]==0xaa) //切割運(yùn)動
- {
- flag=3;
- PBout(13)=1;
- PBout(14)=1;
- }
- if(aRxBuffer2[5]==0xaa) //停
- {
- flag=0;
- a=0;
- b=0;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)0)/2879;
- d=((float)0)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[6]==0xaa) //一級加速
- {
- flag=0;
- a=2447;
- b=2447;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)2447)/2879;
- d=((float)2447)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[7]==0xaa) //二級加速
- {
- flag=0;
- a=2245;
- b=2303;
- TIM_SetCompare1(TIM3,a);
- TIM_SetCompare2(TIM3,b);
- PBout(13)=1;
- PBout(14)=1;
- c=((float)2245)/2879;
- d=((float)2303)/2879;
- printf("%.2f%% : %.2f%%",c*100,d*100);
- }
- if(aRxBuffer2[8]==0xaa) //螺旋運(yùn)動
- {
- flag=1;
- a=2361;
- b=2303;
- PBout(13)=1;
- PBout(14)=1;
- }
- }
- memset((void *)aRxBuffer2,0,100);
- ReceiveState2=0;
- RxCounter2=0;
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
下位機(jī)程序.7z
(196.57 KB, 下載次數(shù): 38)
2019-7-14 01:14 上傳
點(diǎn)擊文件名下載附件
不懂再問 下載積分: 黑幣 -5
|
|