51單片機-藍牙小車c語言代碼

#include<reg52.h>
#include<stdio.h>
#include<stdlib.h>
#define uint unsigned int;
#define uchar unsigned char;
/*sbit L_on=P1^4;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L4=P0^4;
sbit L5=P0^5;
sbit L6=P0^6;	 */

sbit left_in1=P1^0;
sbit left_in2=P1^1;
sbit right_in3=P1^2;
sbit right_in4=P1^3;
sbit ENB_left= P1^4;
sbit ENB_right= P1^5;
sbit OUT_LED_Left=P1^6;
sbit OUT_LED_Right=P1^7;
#define left_forward  left_in1=1;left_in2=0
#define left_back	  left_in1=0;left_in2=1
#define left_stop	  left_in1=0;left_in2=0
#define right_forward right_in3=1;right_in4=0
#define right_back	  right_in3=0;right_in4=1	
#define right_stop    right_in3=0;right_in4=0
uint ZKB_Left =  0;
uint ZKB_Right = 0;
int ZKB_A = 70;
int ZKB_B = 30;
uint count=0;		//計數器
char Buffer;
void Bluetooth_Move();
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間爲 1ms * x
* 輸入 : x (延時一毫秒的個數)
* 輸出 : 無
***********************************************************************/
void Delay_1ms(int i)//1ms延時
{
 int x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++); 
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{
	EA = 0;		//總中斷關閉
	if(RI == 1) //當硬件接收到一個數據時,RI會置位串口有發送和接收兩種不一樣的狀況
            //(不管是發送仍是接收,只要發送或接收完成,都會置位串口中斷標誌位(發送就置位TI,接收則置位RI),
            //因此=1表示的是兩個標誌位只要有一個爲1(便是兩種狀況有一種發生)且此時系統容許串口中斷,
			//則會轉向中斷服務程序,在服務程序裏判斷中斷是TI/RI哪一個爲1觸發的,相應的作出處理,如能夠把緩衝區的數據讀出來。)
	{   Buffer=SBUF;//SBUF:51串口通訊寄存器 
   		RI = 0; 	//關閉串口中斷
	}
	EA = 1;

	if(count<ZKB_Left)	ENB_left=1;	
	else				ENB_left=0;

	if(count<ZKB_Right)	ENB_right=1;
 	else     			ENB_right=0;

	count++;
	if(count>=100)		count=0;
}

/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中斷
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;	 //選擇使用8位定時器1
PCON = 0x00;	 //是設置波特率不加倍
SCON = 0x50; 	 //選擇8位異步通訊方式,波特率可變,由定時器控制;容許接受;發送中斷標誌、接收中斷標誌分別爲0、0
TH1 = 0xfd; //設置波特率 9600= 11.0592*1000000/12/(0x100-0xfd)/32
TL1 = 0xfd;
TR1 = 1; //啓動定時器1		 
ES = 1; //開串口中斷
EA = 1; //開總中斷
}								  

void main()
{
//    L_on = 0;
	Com_Init();
	while(1)
    {	
		 Bluetooth_Move();
	}
}

void Bluetooth_Move(){
	   if('0'<=Buffer<='9'){
		   switch(Buffer){
		   case '0': ZKB_A = 10;ZKB_B = 10;break;
		   case '1': ZKB_A = 20;ZKB_B = 10;break;
		   case '2': ZKB_A = 30;ZKB_B = 10;break;
		   case '3': ZKB_A = 40;ZKB_B = 10;break;
		   case '4': ZKB_A = 50;ZKB_B = 10;break;
		   case '5': ZKB_A = 60;ZKB_B = 20;break;
		   case '6': ZKB_A = 70;ZKB_B = 30;break;
		   case '7': ZKB_A = 80;ZKB_B = 40;break;
		   case '8': ZKB_A = 90;ZKB_B = 50;break;
		   case '9': ZKB_A = 100;ZKB_B = 60;;break;
		   }
	   }
	   if('A'<=Buffer<='a')	{
		   switch(Buffer){
			   case  NULL: left_stop;right_stop; 								  break;
			   case  0x41: ZKB_Left=ZKB_A;ZKB_Right=ZKB_A; left_forward;right_forward;break;	//前進
			   case  0x42: ZKB_Left=ZKB_A;ZKB_Right=ZKB_A; left_back;right_back;	  break;	//後退
			   case  0x43: ZKB_Left=ZKB_B; ZKB_Right=ZKB_A; left_back;right_forward;break;  	//左上	 
			   case  0x44: ZKB_Left=ZKB_A;ZKB_Right=ZKB_B;  left_forward;right_back;break; 	//右上
			   case  0x45: ZKB_Left=ZKB_B; ZKB_Right=ZKB_A; left_forward;right_back;	  break;	//左下
			   case  0x46: ZKB_Left=ZKB_A;ZKB_Right=ZKB_B;  left_back;right_forward;  	  break;	//右下
			   case  0x61: left_stop;right_stop;								  break;	//手離開屏幕中止
			   default :   left_stop;right_stop; 								  break;
		   }
	   	}
}
相關文章
相關標籤/搜索