欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機循跡避障小車程序
[打印本頁]
作者:
kk0668
時間:
2021-7-26 21:54
標題:
單片機循跡避障小車程序
51單片機小車程序
單片機源程序如下:
#include "STC15W201S.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit D1 = P1^4; //用于控制左邊發光二極管
sbit D2 = P3^7; //用于控制右邊發光二極管
bit busy;
bit l9110s_1 ;
bit l9110s_2 ;
bit R9110s_1 ;
bit R9110s_2 ;
unsigned char func;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 2;
j = 2;
k = 2;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
BYTE usart_recv;
/*----------------------------
UART 中斷處理函數
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //??RI?
usart_recv = SBUF;
}
if (TI)
{
TI = 0; //??TI?
busy = 0; //????
}
}
//串口初始化為9600波特率
void Usart_init(void)
{
SCON = 0x50;
T2L = 0xE0;
T2H = 0xFE;
AUXR |= 0x01;
AUXR |= 0x4;
AUXR |= 0x10;
ES = 1;
EA = 1;
}
//電機PWM方式驅動
void PWM_Init(void) //100??@11.0592MHz
{
AUXR |= 0x80;
TMOD = 0x02;
TL0 = 0x00;
TH0 = 0x00;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
unsigned char R_PWM,L_PWM;
unsigned char count;
void timer0_int (void) interrupt 1
{
count++;
if(count > 100)
{
P32 = l9110s_1;
P33 = l9110s_2;
P54 = R9110s_1;
P55 = R9110s_2;
count = 0;
}
if(count == L_PWM)
{
P54 = 0;
P55 = 0;
}
if(count == R_PWM)
{
P32 = 0;
P33 = 0;
}
}
void SendData(BYTE dat)
{
while (busy); //???????????
busy = 1;
SBUF = dat; //????UART?????
}
//電機控制,注意電機驅動芯片9110兩個控制端只能有一個為高電平,
//若同時為高電平則芯片內部短路,危險,極易損壞芯片。
void stop(void);
void front(void);
void back(void);
void right(void);
void left(void);
//停止
void stop(void)
{
l9110s_1 = 0;
l9110s_2 = 0;
R9110s_1 = 0;
R9110s_2 = 0;
}
//前進
void front(void)
{
l9110s_1 = 0;
l9110s_2 = 1;
R9110s_1 = 0;
R9110s_2 = 1;
}
//倒退
void back(void)
{
l9110s_1 = 1;
l9110s_2 = 0;
R9110s_1 = 1;
R9110s_2 = 0;
}
//右轉
void right(void)
{
l9110s_1 = 1;
l9110s_2 = 0;
R9110s_1 = 0;
R9110s_2 = 1;
}
//左轉
void left(void)
{
l9110s_1 = 0;
l9110s_2 = 1;
R9110s_1 = 1;
R9110s_2 = 0;
}
//循跡避障 藍牙控制功能選擇
unsigned char func_sel(void)
{
unsigned long c;
unsigned char i;
i = 0;
c = 0;
D1 = D2 = 1;
stop();
Delay500ms();Delay500ms();Delay500ms();Delay500ms();
while((P15 == 0)&& (c <0x3ffff))
{
c++;
if((c > 0xffff) && (c < 0x1ffff))
{
D1 = 0;
i = 1;
}
if((c > 0x1ffff) && (c < 0x2ffff))
{
D1 = 1; D2 = 0;
i = 2;
}
if((c > 0x2ffff) && (c < 0x3ffff))
{
D1 = 0; D2 = 0;
i = 3;
}
}
if(c < 0xffff)
{
return func;
}
return i;
}
void main(void)
{
BYTE last_recv;
P32 = P33 = P54 = P55 = 0;
l9110s_1 = l9110s_2 = R9110s_1 = R9110s_2 = 0;
R_PWM = 99;
L_PWM = 99;
P3M1 = 0;
P3M0 = 0x0C;
P5M1 = 0;
P5M0 = 0x30;
P1M1 = 0xf;
P1M0 = 0;
IP =0x10;
PWM_Init();
Usart_init();
D1 = D2 = 1;
P15 = 1;
func = 1;
while(func == 1) //功能1:循跡
{
while((P11 == 1)&& (P13 == 0))
{
right(); D2 = 0;D1 = 1;
}
while((P13 == 1)&&(P11 == 0))
{
left();D1 = 0;D2 =1;
}
while((P13 == 0)&&(P11 == 0))
{
front();D1 = 0;D2 =0;
}
front();Delay500ms();
if(P15 == 0)
{
func = func_sel();
}
}
while(func == 2) //功能2:避障
{
if(P15 == 0)
{
func = func_sel();
}
while((P12 == 1)&& (P10 == 0))
{
left(); D2 = 0;D1 = 1;
}
while((P12 == 0)&& (P10 == 1))
{
right(); D2 = 1;D1 = 0;
}
while((P12 == 1)&& (P10 == 1))
{
front(); D2 = 0;D1 = 0;
}
while((P12 == 0)&& (P10 == 0))
{
back(); D2 = 1;D1 = 1;
}
}
while(func == 3) //功能3:藍牙遙控
{
if(P15 == 0)
{
func = func_sel();
}
if(last_recv != usart_recv)
{
last_recv = usart_recv;
switch(usart_recv)
{
case 0x14:
case 0x15:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1a:
case 0x1b:
case 0x1c:
case 0x1d:
case 0x1e:
case 0x1f:
front();
R_PWM = 69+(usart_recv-0x10)*2;
L_PWM = 69+(usart_recv-0x10)*2;
D1 = D2 = 0;
break;
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
case 0x29:
case 0x2a:
case 0x2b:
case 0x2c:
case 0x2d:
case 0x2e:
case 0x2f:
back();
R_PWM = 69+(usart_recv-0x20)*2;
L_PWM = 69+(usart_recv-0x20)*2;
D1 = D2 = 1;
break;
case 0x34:
case 0x35:
case 0x36:
case 0x37:
case 0x38:
case 0x39:
case 0x3a:
case 0x3b:
case 0x3c:
case 0x3d:
case 0x3e:
case 0x3f:
left();
R_PWM = 69+(usart_recv-0x30)*2;
L_PWM = 69+(usart_recv-0x30)*2;
D1 = 0; D2 = 1;
break;
case 0x44:
case 0x45:
case 0x46:
case 0x47:
case 0x48:
case 0x49:
case 0x4a:
case 0x4b:
case 0x4c:
case 0x4d:
case 0x4e:
case 0x4f:
right();
R_PWM = 69+(usart_recv-0x40)*2;
L_PWM = 69+(usart_recv-0x40)*2;
D1 = 1; D2 = 0;
break;
case 0x54:
case 0x55:
case 0x56:
case 0x57:
case 0x58:
case 0x59:
case 0x5a:
case 0x5b:
case 0x5c:
case 0x5d:
case 0x5e:
case 0x5f:
front();
R_PWM = 99;
L_PWM = 100-(usart_recv-0x50)*2;
D1 = 1; D2 = 0;
break;
case 0x64:
case 0x65:
case 0x66:
case 0x67:
case 0x68:
case 0x69:
case 0x6a:
case 0x6b:
case 0x6c:
case 0x6d:
case 0x6e:
case 0x6f:
front();
R_PWM = 100-(usart_recv-0x60)*2;
L_PWM = 99;
D1 = 0; D2 = 1;
break;
case 0x74:
case 0x75:
case 0x76:
case 0x77:
case 0x78:
case 0x79:
case 0x7a:
case 0x7b:
case 0x7c:
case 0x7d:
case 0x7e:
case 0x7f:
back();
R_PWM = 99;
L_PWM = 100-(usart_recv-0x70)*2;
D1 = 1; D2 = 1;
break;
case 0x84:
case 0x85:
case 0x86:
case 0x87:
case 0x88:
case 0x89:
case 0x8a:
case 0x8b:
case 0x8c:
case 0x8d:
case 0x8e:
case 0x8f:
back();
R_PWM = 100-(usart_recv-0x80)*2;
L_PWM = 99;
D1 = 1; D2 = 1;
break;
case 0:
stop();
D1 = 1; D2 = 1;
break;
}
}
}
}
復制代碼
以上代碼的Keil工程文件51hei附件下載:
新版循跡避障小車.rar
(177.1 KB, 下載次數: 22)
2021-7-26 21:53 上傳
點擊文件名下載附件
51避障小車程序
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1