|
第一:單片機應用中,什么是合適的程序?能發揮硬件性能的程序,就是適合的。你不說你的配件,只要合適的程序是不可能有的。
第二:我有一個,你可以參考。/*
簡易小車。51單片機最小系統板,L298N帶動兩個電機,12V電機電源,L298N自帶5V邏輯電源,
供板子使用。
超聲波測距HC-SR04,用舵機SG90使它轉動探測。
目標:壁障;
*/
#include <reg51.h>
#include <intrins.h>
sbit ZLDJ10=P2^3;//直流電機的控制口
sbit ZLDJ11=P2^2;
sbit ZLDJ20=P2^1;
sbit ZLDJ21=P2^0;
sbit RX=P2^6;//超聲波測距HC-SR04數據口Echo
sbit TX=P2^5;//超聲波測距HC-SR04數據口Trig
sbit DJ=P2^7;//SG90舵機的數據口
bit flag=0;
unsigned int time=0;
unsigned int timer=0;
unsigned long S=0;
unsigned long SPD[5]={5000,5000,5000,5000,5000};
unsigned char GT,DT;
void Delay10ms(unsigned int c);
void Delay50us(unsigned int c);
void DJZD (void);
void SG90 (void);
void Conut(void);
void CSBCJ(void);
void main(void)
{
TMOD=0x11;//設T0、T1為方式1,GATE=0;
TH0=0;
TL0=0;
TH1=0xf8;
TL1=0x30;
ET0=1;
ET1=1;
EA=1;
TR1=1;
GT=30;DT=350;DJ=0;
DJZD();
TC();
RX=1;
TX=0;
Delay10ms(500);
RX=0;
while(1)
{
CSBCJ();
SPD[2]=S;
if((S>=2500)||flag==1)
{
KZXCYD();
}
if (S<=2500)
{
ZL();
}
}
}
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S= (long)(time*0.17);
}
void zd1() interrupt 1
{
flag=1;
}
void zd3() interrupt 3
{
TH1=0xf8;
TL1=0x30;
timer++;
if(timer>=100)
{
timer=0;
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
void CSBCJ(void)
{
while(!RX);
TR0=1;
while(RX);
TR0=0;
Conut();
}
void SG90(void)
{
flag=0;
GT=10;DT=390;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[0]=S;
}
else
{
SPD[0]=5000;
}
flag=0;
GT=20;DT=380;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[1]=S;
}
else
{
SPD[1]=5000;
}
flag=0;
GT=30;DT=370;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[2]=S;
}
else
{
SPD[2]=5000;
}
flag=0;
GT=40;DT=360;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[3]=S;
}
else
{
SPD[3]=5000;
}
flag=0;
GT=50;DT=350;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[4]=S;
}
else
{
SPD[4]=5000;
}
flag=0;
GT=10;DT=390;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[0]=S;
}
else
{
SPD[0]=5000;
}
flag=0;
GT=20;DT=380;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[1]=S;
}
else
{
SPD[1]=5000;
}
flag=0;
GT=30;DT=370;DJZD ();
CSBCJ();
if ((flag==0)&&(S<=2500))
{
SPD[2]=S;
}
else
{
SPD[2]=5000;
}
flag=0;
GT=30;DT=370;DJZD ();
Delay10ms(5);
}
void DJZD (void)
{
unsigned char i;
for (i=0;i<75;i++)
{
DJ=1;
Delay50us(GT);
DJ=0;
Delay50us(DT);
}
DJ=0;
}
void Delay10ms(unsigned int c)
{
unsigned char a,b;
for(c;c>0;c--)
{
for(b=44;b>0;b--)
{
for (a=112;a>0;a--)
{
}
}
}
}
void Delay50us(unsigned int c)
{
unsigned char a;
for(c;c>0;c--)
{
for (a=19;a>0;a--)
{
}
}
}
|
-
-
-
-
51最小系統.pdf
2018-8-27 09:00 上傳
點擊文件名下載附件
298.58 KB, 下載次數: 3
|