久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1942|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

智能小車-WiFi控制

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:196461 發(fā)表于 2017-5-4 13:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>;
#include<math.h>;
#include<intrins.h>;
#defineucharunsignedchar;
#defineuintunsignedint;
ucharBuffer=0;//從串口接收的數(shù)據(jù);uintURTAReceivedCount=0,;uchardataT

#include<reg52.h>

#include<math.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar Buffer =0; //從串口接收的數(shù)據(jù)

uint URTAReceivedCount=0,n=1;

uchar data Tempdatatable[5],CommandDatatable[5];//數(shù)據(jù)包

uchar serVal[2];

uint pwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90度,(實際是1382.4,取整得1382)

uchar pwm_flag=0;

uint code ms0_5Con=461; //0.5ms計數(shù) (實際是460.8,取整得461)

uint code ms2_5Con=2304; //2.5ms計數(shù)

bit key_stime_ok;

sbit StatusLight=P2^0; //狀態(tài)燈

sbit MainLight=P2^1; //主大燈

sbit servo0=P0^0; //舵機控制

sbit servo1=P0^1;

sbit servo2=P0^2;

sbit servo3=P0^3;

sbit servo4=P0^4;

sbit servo5=P0^5;

sbit servo6=P0^6;

sbit servo7=P0^7;

//定義智能小車驅(qū)動模塊輸入IO

sbit IN1 = P1^0; // 高電平1 后退(反轉(zhuǎn))

sbit IN2 = P1^1; // 高電平1 前進(正轉(zhuǎn))

sbit IN3 = P1^2; // 高電平1 前進(正轉(zhuǎn))

sbit IN4 = P1^3; // 高電平1 后退(反轉(zhuǎn))

sbit EN1 = P1^4; // 高電平使能

sbit EN2 = P1^5; // 高電平使能

/********************************************************************

* 名稱 : Delay_1ms()

* 功能 : 延時子程序,延時時間為 1ms * x

* 輸入 : x (延時一毫秒的個數(shù))

* 輸出 : 無

***********************************************************************/ void Delay_1ms(uint i)//1ms延時

{

uchar x,j;

for(j=0;j<i;j++)

for(x=0;x<=148;x++);

}

void TurnOnStatusLight()

{

StatusLight=0;

}

/********************************************************************

* 名稱 : Send_Data()

* 功能 : 向上位機傳送字符

* 輸入 : 無

* 輸出 : 無

***********************************************************************/ void Send_Data(uchar type,uchar cmd,uchar dat)

{

uchar data Buffer[5];//構(gòu)建數(shù)據(jù)包

uchar *p;

uint Send_Count=0;

p = Buffer;

Buffer[0]=0XFF;

Buffer[1]=type;

Buffer[2]=cmd;

Buffer[3]=dat;

Buffer[4]=0XFF;

while(1)

{

if(*p==0XFF)

{

Send_Count++; //0XFF標(biāo)志統(tǒng)計位

}

SBUF = *p; //發(fā)送

while(!TI) //如果發(fā)送完畢,硬件會置位TI,等待發(fā)送完畢

{

_nop_();

}

p++;

TI = 0;

if(Send_Count == 2) //當(dāng)統(tǒng)計到兩次出現(xiàn)0XFF,則認為一個數(shù)據(jù)包發(fā)送完畢,跳出循環(huán)

{

TI = 0;

break;

}

}

}

/********************************************************************

協(xié)議規(guī)定:

包頭 類型位 數(shù)據(jù)位 數(shù)據(jù)位 結(jié)束位

0XFF 0X** OX** 0X** 0XFF

各命令說明:

類型位 數(shù)據(jù)位 數(shù)據(jù)位 功能

0X00 0X02 0X00 前進

0X00 0X01 0X00 后退

0X00 0X03 0X00 左轉(zhuǎn)

0X00 0X04 0X00 右轉(zhuǎn)

0X00 0X00 0X00 停止

0X01 0X01 角度 舵機1

0X01 0X02 . 舵機2

0X01 0X01 . 舵機3

0X01 0X02 . 舵機4

0X01 0X01 . 舵機5

0X01 0X02 . 舵機6

0X01 0X01 . 舵機7

0X01 0X02 數(shù)據(jù) 舵機8

0X02 0X01 車燈亮

0X02 0X02 車燈滅

0X03 雷達數(shù)據(jù) 發(fā)送雷達數(shù)據(jù)

***********************************************************************/ /********************************************************************

* 名稱 : Com_Int()

* 功能 : 串口中斷子函數(shù)

***********************************************************************/ void Com_Int(void) interrupt 4

{

uchar temp;

ES=0; //關(guān)串口中斷

RI=0; //軟件清除接收中斷

temp=SBUF;

if(temp==0XFF && URTAReceivedCount<3)

{

Tempdatatable[0]==0XFF; //包頭

URTAReceivedCount++;

}

else

{

Tempdatatable[n]=temp;

n++;

if(URTAReceivedCount==0&&n==2)

n=1;

}

if(URTAReceivedCount==2)//包尾

{

Tempdatatable[0]=0XFF;

Tempdatatable[4]=0XFF;

n=1;

URTAReceivedCount=0; //組包完畢

temp="";

// Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); //發(fā)送組成的數(shù)據(jù)包回去

}

CommandDatatable[0]=Tempdatatable[0];

CommandDatatable[1]=Tempdatatable[1];

CommandDatatable[2]=Tempdatatable[2];

CommandDatatable[3]=Tempdatatable[3];

CommandDatatable[4]=Tempdatatable[4];

ES=1;//開串口中斷

}

/********************************************************************

* 名稱 : Com_Init()

* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷

***********************************************************************/ void Com_Init(void)

{

TMOD = 0x21;

PCON = 0x00;

SCON = 0x50;

TH1 = 0xFd; //設(shè)置波特率 9600

TL1 = 0xFd;

TR1 = 1; //啟動定時器1

ES = 1; //開串口中斷

EA = 1; //開總中斷

IT0=0;

EX0=1;

}

/******************************************************************** * 名稱 :Moto_Forward()

* 功能 : 電機1、2啟動,都是前進,整車表現(xiàn)為前進。

***********************************************************************/ void Moto_Forward()

{

IN1=0; //左電機

IN2=1;

IN3=1; //右電機

IN4=0;

EN1=1;

EN2=1;

Delay_1ms(100);

}

/******************************************************************** * 名稱 :Moto_Backward()

* 功能 : 電機1、2啟動,都是后退,整車表現(xiàn)為后退。

***********************************************************************/ void Moto_Backward()

{

IN1=1; //左電機

IN2=0;

IN3=0; //右電機

IN4=1;

EN1=1;

EN2=1;

Delay_1ms(100);

}

/******************************************************************** * 名稱 :Moto_TurnLeft()

* 功能 : 電機1后退,電機2前進,整車表現(xiàn)為左轉(zhuǎn)。

***********************************************************************/ void Moto_TurnLeft()

{
IN1=0;//左電機;IN2=0;;IN3=1;//右電機;IN4=0;;EN1=1;;EN2=1;;Delay_1ms(100);;/***********************;*名稱:Moto_TurnRight();*功能:電機1前進,電機2后退,整車表現(xiàn)為右轉(zhuǎn);************************;voidMoto_TurnRigh
IN1=0; //左電機

IN2=0;

IN3=1; //右電機

IN4=0;

EN1=1;

EN2=1;

Delay_1ms(100);

}

/********************************************************************

* 名稱 :Moto_TurnRight()

* 功能 : 電機1前進,電機2后退,整車表現(xiàn)為右轉(zhuǎn)。

***********************************************************************/

void Moto_TurnRight()

{

IN1=0; //左電機

IN2=1;

IN3=0; //右電機

IN4=0;

EN1=1;

EN2=1;

Delay_1ms(100);

}

/********************************************************************

* 名稱 :Moto_Stop()

* 功能 : 電機1停止,電機2停止,整車表現(xiàn)為停止。

***********************************************************************/

void Moto_Stop()

{

IN1=0; //左電機

IN2=0;

IN3=0; //右電機

IN4=0;

EN1=1;

EN2=1;

Delay_1ms(100);

}

/********************************************************************

* 功能 : 舵機PWM中斷初始化

***********************************************************************/

void Timer0Init()

{

/*0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms

/.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)*/

TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響

TH0=-ms2_5Con>>8; //給定初值,17ms中斷

TL0=-ms2_5Con;

EA=1; //總中斷打開

ET0=1; //定時器0中斷打開

TR0=1; //定時器0開關(guān)打開 }

/********************************************************************

* 功能 : 舵機PWM中斷, //舵機控制函數(shù) 周期為20ms 一個循環(huán)20MS = 8*2.5ms ***********************************************************************/

void SteeringGear() interrupt 1

{

switch(pwm_flag)

{

case 1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;

case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break; case 3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;

case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break; case 5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;

case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break; case 7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;

case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break; case 9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;

case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break; case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;

case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break; case 13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;

case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break; case 15: servo7=1;TH0=-pwm[7]>>8; TL0=-pwm[7]; break;

case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break; default: TH0=0xff; TL0=0x80; pwm_flag=0;

}

pwm_flag++;

}

void SetSteeringGear(uchar i, uchar val)

{

uint a = (val+46)*10;

if(a<ms0_5Con)

a=ms0_5Con;

if(a>ms2_5Con)

a=ms2_5Con;

pwm[i]=a;

CommandDatatable[2]=0xff; //清除緩存

}

/******************************************************************** * 功能 : 串口中斷接收數(shù)據(jù)

***********************************************************************/

/*********************************************************************************

** 函數(shù)功能 : 主函數(shù)

*********************************************************************************/

void main()

{

MainLight=0;

Delay_1ms(200);

Com_Init();//串口初始化

Timer0Init();//舵機PWM中斷初始化

while(1)

{

if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)

{

switch (CommandDatatable[1]) //根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容 {

case 0X00: //類型位0X00,表明是控制數(shù)據(jù)包,進入控制數(shù)據(jù)case

switch(CommandDatatable[2]) //根據(jù)數(shù)據(jù)位的值來進行選擇執(zhí)行不同的動作

{

case 0X00:Moto_Stop();break;

case 0X01:Moto_Forward();break;

case 0X02:Moto_Backward();break;

case 0X03:Moto_TurnLeft();break;

case 0X04:Moto_TurnRight();break;

default : break;

}

break;

case 0X01: //類型位0X01,表明是舵機數(shù)據(jù)包,進入舵機case switch(CommandDatatable[2])

{

case 0x01:SetSteeringGear(0,CommandDatatable[3]);break;

case 0x02:SetSteeringGear(1,CommandDatatable[3]);break; case 0x03:SetSteeringGear(2,CommandDatatable[3]);break; case 0x04:SetSteeringGear(3,CommandDatatable[3]);break;

case 0x05:SetSteeringGear(4,CommandDatatable[3]);break; case 0x06:SetSteeringGear(5,CommandDatatable[3]);break; case 0x07:SetSteeringGear(6,CommandDatatable[3]);break;

case 0x08:SetSteeringGear(7,CommandDatatable[3]);break; default : break;

}

}

}

} break; case 0X02: //類型位0X02,表明是大燈數(shù)據(jù)包,進入大燈case switch(CommandDatatable[2]) { case 0X01:MainLight=1;break; case 0X02:MainLight=0;break; default : break; } break default : break; }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:229379 發(fā)表于 2017-9-14 12:01 | 只看該作者
一大串代碼,還差上位機APP呢
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费视频 | 久久33| 九九久久久 | www日| 国产精品一区二区久久精品爱微奶 | 久久91 | 91精品国产一区二区三区 | www.色五月.com | 欧美二级| 日韩视频一区在线观看 | 国产网站在线播放 | 日韩中文在线视频 | 欧美激情区| 日韩欧美国产一区二区三区 | 九色 在线 | 成人国产精品久久 | 欧美成人一级 | 一区二区三区不卡视频 | 亚洲一级毛片 | 在线日韩福利 | 国产综合精品一区二区三区 | 精品日韩一区 | 亚洲欧美在线视频 | 高清av电影| 国产日韩欧美一区 | 色橹橹欧美在线观看视频高清 | 91视视频在线观看入口直接观看 | 欧美一区二区三区四区在线 | 色婷婷av99xx | 麻豆久久久久久久久久 | 成人精品啪啪欧美成 | 在线观看www | 丁香六月激情 | www.欧美视频| 狠狠操电影 | 人人看人人爽 | 黄色操视频 | 国产一级在线观看 | 中文字幕亚洲精品 | 伊人成人免费视频 | 中文字幕在线一区二区三区 |