51單片機之藍牙遙控小車_完整代碼
阿新 • • 發佈:2019-02-28
war 允許 def all 對數 rup oid 變量 如果
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器 typedef unsigned int u16; //對數據類型進行聲明定義 typedef unsigned char u8; //是否是前進 bit isFoward = 0; //是否後退 bit isBack = 0; //控制行駛電機 sbit EN_A = P0^0; sbit IN_A1 = P0^1; sbit IN_A2 = P0^2; sbit IN_B1 = P0^3; sbit IN_B2 = P0^4; sbit EN_B = P0^5; //是否行使總開關 bit ALL_EN = 0; u8 speedNum = 10; //步進電機轉動 int harfMotoNum = 10; int currentMotoNum = 15; sbit r_pwm = P3^7; void initFunc(){ P0 = 0x00; //首先設置TMOD工作方式 TMOD = 0x21; PCON = 0x00; SCON = 0x50; //計算初始值設定 TH1 = 0xFD; TL1 = 0xFD; //打開 TR1 = 1; //打開串口中斷 ES = 1; TH0=0XFF; //給定時器賦初值,定時1ms TL0=0XA3; ET0=1;//打開定時器0中斷允許 EA=1;//打開總中斷 TR0=1;//打開定時器 } void checkRun(){ if(isFoward){ EN_A = ALL_EN; IN_A1 = 0; IN_A2 = 1; } else if(isBack){ EN_A = ALL_EN; IN_A1 = 1; IN_A2 = 0; } else{ EN_A = ALL_EN; IN_A1 = 0; IN_A2 = 0; } } u8 motoDriveRecord = 0; bit motoNeedRun = 0; void main() { initFunc(); while(1) { checkRun(); } } u8 systemCount = 0; u8 row = 0; u8 colum = 0; u8 judgeNum = 0; bit leftOrRight = 0; //旋轉方向,0左,1右 void Timer0() interrupt 1 { TH0=0XFF; //給定時器賦初值,定時1ms TL0=0XA3; /*********************** 定時器控制PWM調速 **************************/ /* (/0)(/1)(/2)(/3) (/19) (%0) 0 5 10 15 ... 95 (%1) 1 6 11 16 ... 96 (%2) 2 7 12 17 ... 97 (%3) 3 8 13 18 ... 98 (%4) 4+ 9+ 14+ 19+ ... 99 */ if(systemCount >= 1000) systemCount = 0; row = ((systemCount/10) % 5);//這時候取值是0,1,2 colum = (systemCount/10) / 5;//取值為0-19; judgeNum = row * 20 + colum; if(judgeNum < speedNum){ ALL_EN = 1; }else{ ALL_EN = 0; } /*********************** 舵機控制 **************************/ if((systemCount%200) == 0){ r_pwm = 1; } if((systemCount%200) >= currentMotoNum){ r_pwm = 0; } systemCount++; } //中斷事件 u8 receivedData; u8 operation; void Usart() interrupt 4 { if(RI == 1) { //如果收到. //定義一個變量,接收數據 receivedData = SBUF; if (receivedData == 101){ //前進 isFoward = 1; isBack = 0; ALL_EN = 1; }else if(receivedData == 102){ //後退 isFoward = 0; isBack = 1; ALL_EN = 1; }else if(receivedData == 103){ //停止 isFoward = 0; isBack = 0; ALL_EN = 0; }else if(receivedData == 104){ //調整行駛速度 operation = receivedData; }else if(receivedData == 105){ //調整方向 operation = receivedData; }else if(receivedData == 106){ //校準方向 currentMotoNum = harfMotoNum + 5; }else if(receivedData <= 100){ if(operation == 104){ if(receivedData >= 0 && receivedData <= 100){ speedNum = receivedData; } }else if(operation == 105){ if(receivedData >= 0 && receivedData <= harfMotoNum * 2){ currentMotoNum = receivedData + 5; } } } RI = 0; } }
51單片機之藍牙遙控小車_完整代碼