|
51hei圖片_20240317125049.jpg (162.21 KB, 下載次數(shù): 35)
下載附件
2024-3-17 12:55 上傳
51hei圖片_20240317125110.jpg (153.08 KB, 下載次數(shù): 26)
下載附件
2024-3-17 12:55 上傳
51hei圖片_20240317125024.jpg (106.33 KB, 下載次數(shù): 31)
下載附件
2024-3-17 12:55 上傳
尋跡原理圖.JPG (82.65 KB, 下載次數(shù): 32)
下載附件
2024-3-17 12:55 上傳
#include <STC89C5xRC.H>
typedef unsigned char u8;
typedef unsigned int u16;
sbit PWM1 = P3^3; //左電機(jī)控制信號(hào)
sbit PWM2 = P3^4;
sbit PWM3 = P3^5; //右電機(jī)控制信號(hào)
sbit PWM4 = P3^6;
sbit Lin = P2^7; //左紅外模塊
sbit Rin = P2^5; //右紅外模塊
sbit K1 = P1^0; //功能按鍵
sbit LED= P1^2;
u8 connt=2; //調(diào)速周期/10ms/100hz
u8 COM = 0; //功能控制位
bit Q_J=0; //前進(jìn)標(biāo)志
bit H_T=0; //后退標(biāo)志
bit Z_Z=0; //左轉(zhuǎn)標(biāo)志
bit Y_Z=0; //右轉(zhuǎn)標(biāo)志
void delay( u16 k ) //延時(shí)1ms
{
u16 i,j;
for(i=k;i>0;i--)
for(j=120;j>0;j--);
}
void time0() //T0初始化函數(shù)
{
TMOD = 0x01; //定時(shí)器模式
TL0 = 0x18; //定時(shí)初始值
TH0 = 0xFC;
TF0 = 0; //清除TF0標(biāo)志
ET0 = 1; //打開(kāi)計(jì)時(shí)器中斷
TR0 = 1; //啟動(dòng)計(jì)時(shí)器
}
void SC()
{
Q_J=0; H_T=0;
Z_Z=0; Y_Z=0;
PWM1=0; PWM2=0; //剎車(chē)
PWM3=0; PWM4=0;
}
void QJ() //前進(jìn)
{
H_T=0; Z_Z=0; Y_Z=0;
Q_J=1;
}
void HT() //后退
{
Z_Z=0; Y_Z=0; Q_J=0;
H_T=1;
}
void ZZ() //左轉(zhuǎn)
{
Y_Z=0; Q_J=0; H_T=0;
Z_Z=1;
}
void YZ() //右轉(zhuǎn)
{
Q_J=0; H_T=0; Z_Z=0;
Y_Z=1;
}
void lin1() //尋跡功能程序
{
if( Lin && Rin ) //左右=1,小車(chē)前進(jìn)
{
QJ();
delay(100);
SC();
delay(150);
}
if( !Lin && !Rin ) //左右=0,小車(chē)停止
{
SC(); //待機(jī)
}
if( !Lin && Rin ) //左=0,右=1,小車(chē)左轉(zhuǎn)
{
SC();
delay(100);
ZZ();
delay(100);
}
if( Lin && !Rin ) //右=0,左=1,小車(chē)右轉(zhuǎn)
{
SC();
delay(100);
YZ();
delay(100);
}
}
//void lin2() //手勢(shì)程序
//{
//if( Lin && Rin ) //兩探頭=1,小車(chē)前進(jìn)
//{
//QJ();
//}
//if( !Lin && !Rin ) //兩探頭=0,小車(chē)后退
//{
//HT();
//}
//}
void konzi() //控制
{
if( K1 == 0 )
{
delay(10);
COM++;
while( !K1 );
delay(10);
}
if( COM >=2)COM = 0;
}
void main () //主函數(shù)
{
time0(); //T0初始化
EA = 1; //打開(kāi)總中斷
SC(); //待機(jī)
while(1)
{
konzi();
switch(COM) //功能選擇
{
case 0: SC(); break;
case 1: lin1();break; //尋跡
case 2: lin2();break; //手勢(shì)控制
}
}
}
void Timer0Interrupt() interrupt 1 //T0中斷函數(shù)1ms
{
static u8 PWM_Cnt =0;
static u16 S =0;
TL0 = 0x18;
TH0 = 0xFC;
S++;
PWM_Cnt++;
/******************************/
if(Q_J) //前進(jìn)
{
PWM4 = 0;
PWM2 = 0;
if(PWM_Cnt<=connt)
{
PWM1 = 1;
PWM3 = 1;
}
else
{
PWM1 = 0;
PWM3 = 0;
}
}
/******************************/
if(H_T) //后退
{
PWM1 = 0;
PWM3 = 0;
if(PWM_Cnt<=connt)
{
PWM2 = 1;
PWM4 = 1;
}
else
{
PWM2 = 0;
PWM4 = 0;
}
}
/******************************/
if(Z_Z) //左轉(zhuǎn)
{
PWM1 = 0;
PWM2 = 0;
PWM4 = 0;
if(PWM_Cnt<=connt)
{
PWM3 = 1;
}
else
{
PWM3 = 0;
}
}
/******************************/
if(Y_Z) //右轉(zhuǎn)
{
PWM2 = 0;
PWM3 = 0;
PWM4 = 0;
if(PWM_Cnt<=connt)
{
PWM1 = 1;
}
else
{
PWM1 = 0;
}
}
if(PWM_Cnt>=10)PWM_Cnt = 0;
if(S>=1000) //秒脈沖
{
LED=~LED;
S=0;
}
}
|
評(píng)分
-
查看全部評(píng)分
|