久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于51單片機(jī)的藍(lán)牙循跡小車設(shè)計(jì)源程序
[打印本頁]
作者:
till_valhalla
時(shí)間:
2019-9-30 11:43
標(biāo)題:
基于51單片機(jī)的藍(lán)牙循跡小車設(shè)計(jì)源程序
渣渣為了湊積分,發(fā)一個(gè)以前做過的小玩意
單片機(jī)源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*****電機(jī)驅(qū)動(dòng)*****/
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
/*****紅外尋跡*****/
sbit RSEN1=P2^1;
sbit RSEN2=P2^2;
sbit LSEN1=P2^3;
sbit LSEN2=P2^4;
/*****使能A、B*****/
sbit ENA=P1^4;
sbit ENB=P1^5;
/*****電機(jī)驅(qū)動(dòng)*****/
#define Left_moto_go {IN1=1,IN2=0;}
#define Left_moto_back {IN1=0,IN2=1;}
#define Right_moto_go {IN3=1,IN4=0;}
#define Right_moto_back {IN3=0,IN4=1;}
#define Left_moto_s {IN1=0,IN2=0;}
#define Right_moto_s {IN3=0,IN4=0;}
uchar M; //從串口接收的數(shù)據(jù)
uchar pwm_val_left =0;//變量定義
uchar push_val_left=4; //左電機(jī)占空比N/20
uchar pwm_val_right =0;
uchar push_val_right=4;//右電機(jī)占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
/********************************************
毫秒延時(shí)函數(shù)
**********************************************/
void Delay_ms(uint x) //12.000MHz
{
uchar a,b;
for(a=x;a>0;a--)
for(b=199;b>0;b--);
}
/*****延時(shí)*****/
void delay50ms(void) //誤差 0us
{
unsigned char a,b;
for(b=173;b>0;b--)
for(a=143;a>0;a--);
}
/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振12,波特率2400,使串口中斷
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Init(void)
{
PCON &= 0x00; //波特率不倍速
SCON = 0x50; //8位數(shù)據(jù),可變波特率
//AUXR &= 0xBF; //定時(shí)器1時(shí)鐘為Fosc/12,即12T
//AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD &= 0x0F; //清除定時(shí)器1模式位
TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1 = 0xF3; //設(shè)定定時(shí)初值
TH1 = 0xF3; //設(shè)定定時(shí)器重裝值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
/*****前進(jìn)*****/
void go()
{
Left_moto_go ;
Right_moto_go ;
}
/*****后退*****/
void back()
{
Left_moto_back ;
Right_moto_back ;
}
/*****左轉(zhuǎn)*****/
void turn_left()
{
Left_moto_back;
Right_moto_go ;
}
/*****右轉(zhuǎn)*****/
void turn_right()
{
Left_moto_go;
Right_moto_back;
}
/*****急停*****/
void stop()
{
Left_moto_s;
Right_moto_s;
}
/*****PWM左電機(jī)*****/
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
ENA=1;
else
ENA=0;
if(pwm_val_left>=20)
pwm_val_left=0;
}
else ENA=0;
}
/*****PWM右電機(jī)*****/
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
ENB=1;
else
ENB=0;
if(pwm_val_right>=20)
pwm_val_right=0;
}
else ENB=0;
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
{
M = SBUF;
RI = 0;
}
EA = 1;
}
/*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
void timer0()interrupt 1 using 2
{
TH0=0XFC; //1ms定時(shí)
TL0=0X18;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*****循跡函數(shù)*****/
void xunji()
{
uchar flag;
if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))
{ flag=0; }//*******直行*******//
else if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
{ flag=1;} //***右偏,左轉(zhuǎn)***//
else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==0))
{ flag=2;} //***左偏,右轉(zhuǎn)***//
else if((RSEN1==1)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))
{ flag=1;} //***右偏,左轉(zhuǎn)***//
else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==1))
{ flag=2;} //***左偏,右轉(zhuǎn)***//
else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
{ flag=1;} //***右偏,左轉(zhuǎn)***//
else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))
{ flag=2;} //***左偏,右轉(zhuǎn)***//
else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
{ flag=3; }//*******急停*******//
switch (flag)
{
case 0:go();break;
case 1:turn_left();delay50ms();break;
case 2:turn_right();delay50ms();break;
case 3:stop();delay50ms();break;
default: break;
}
}
/********循跡模式*******/
void tracing()
{
while(1)
{
TMOD|=0X01;
TH0=0XFC;//1ms定時(shí)
TL0=0X18;
TR0=1;
ET0=1;
EA =1;
if(M == '1')
break;
while(1)/*無限循環(huán)*/
{
xunji();
if(M == '1')
break;
}
}
}
void main()
{
Delay_ms(100);
Com_Init();//串口初始化
while(1)
{
switch(M)
{
case 'A': go();Delay_ms(100); break;
case 'B': back();Delay_ms(100); break;
case 'C': turn_left();Delay_ms(100); break;
case 'D': turn_right();Delay_ms(100); break;
case 'F': stop();Delay_ms(100); break;
case '2': tracing(); break;
case '3': push_val_left =4;push_val_right =4; break;
case '4': push_val_left =10;push_val_right =10; break;
case '5': push_val_left =20;push_val_right =20; break;
default:break;
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
藍(lán)牙尋跡終極.zip
(1.86 KB, 下載次數(shù): 20)
2019-9-30 11:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2019-9-30 16:54
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产乱码精品一区二区三区中文
|
成人a免费
|
伊人精品一区二区三区
|
一区二区三区av
|
日韩有码在线播放
|
激情自拍偷拍
|
中文字幕一区二区三区日韩精品
|
色在线免费视频
|
黄色一级网
|
91久久精品视频
|
日韩欧美大片在线观看
|
欧美不卡一区二区三区
|
中文字幕av网
|
国产美女自拍视频
|
亚洲一区在线观看视频
|
99re99
|
观看毛片
|
久久精品一区二
|
亚洲一区二区久久久
|
日韩精品一区二区久久
|
精品久久久久久久久久久久
|
亚洲免费在线
|
www.久久精品
|
国产精品久久久久久久久久久久久
|
一级毛片视频
|
亚洲一区二区三区四区五区午夜
|
精品国产一区二区久久
|
亚洲精品成人av久久
|
亚洲电影专区
|
亚洲 中文 欧美 日韩 在线观看
|
欧美黑人巨大videos精品
|
天堂中文在线播放
|
亚洲不卡一
|
久久99久久99久久
|
黄色永久免费
|
日韩色视频
|
免费观看色
|
国产精品小视频在线观看
|
亚洲欧美激情精品一区二区
|
亚洲精品一区二区在线观看
|
久草视频在线播放
|