|
本人認為該程序的處理速度即運行速度還有待增強!程序還有簡化的余地
還有升級的必要:1、畢竟用了兩個定時器!(這樣一個51mcu只能處理兩個模塊工作,不能處理四個,
如此要使小車有避障或循跡功能至少需要三個51單片機!實在是浪費資源)
2、應該只用一個定時器(我理想的的方法是用一個單片機處理4個模塊的數據一個單片機將處理后的數
據進行分析并作出響應,以控制電機轉動,以控制小車)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num1,num2,num3,led0,led1,oo1,oo2,num11,num12,num13,led10,led11;
sbit tr=P1^0;
sbit ec=P1^1;
sbit lcd0=P2^0;
sbit lcd1=P2^1;
sbit tr1=P1^2;
sbit ec1=P1^3;
sbit lcd10=P2^2;
sbit lcd11=P2^3;
void timer(uint x)
{
uint q,w;
for(q=x;q>0;q--)
for(w=110;w>0;w--);
}
void init()
{
ec=0;
tr=0;
num1=0;
num2=0;
num3=0;
led0=1;
led1=1;
}
void trk()
{
tr=1;
timer(10);
tr=0;
num3=1;
}
void eck()
{
if(ec==1)
{
TR0=1;
num2=1;
}
if(ec==0&num2==1)
{
TR0=0;
if(num1<30)
{
led0=0;
num3=0;
}
if(num1>30)
{
led1=0;
num3=0;
}
}
}
void open_time()
{
TMOD=0x11;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
EA=1;
ET0=1;
TR0=0;
}
void dongzuo()
{
if(led0==0)
{
lcd0=0;
lcd1=1;
oo2=1;
oo1=0;
}
if(led1==0)
{
lcd1=0;
lcd0=1;
oo2=1;
oo1=0;
}
}
void init1()
{
ec1=0;
tr1=0;
num11=0;
num12=0;
num13=0;
led10=1;
led11=1;
}
void tr1k()
{
tr1=1;
timer(10);
tr1=0;
num13=1;
}
void ec1k()
{
if(ec1==1)
{
TR1=1;
num12=1;
}
if(ec1==0&num12==1)
{
TR1=0;
if(num11<30)
{
led10=0;
num13=0;
}
if(num11>30)
{
led11=0;
num13=0;
}
}
}
void open_time1()
{
TMOD=0x01;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
EA=1;
ET1=1;
TR1=0;
}
void dongzuo1()
{
if(led10==0)
{
lcd10=0;
lcd11=1;
oo1=1;
oo2=0;
}
if(led11==0)
{
lcd11=0;
lcd10=1;
oo1=1;
oo2=0;
}
}
void ff()
{
oo1=1;
oo2=0;
}
void main()
{
while(1)
{
ff();
while(oo1==1)
{
init();
open_time();
trk();
while(num3==1)
{
eck();
}
dongzuo();
}
while(oo2==1)
{
init1();
open_time1();
tr1k();
while(num13==1)
{
ec1k();
}
dongzuo1();
}
}
}
void time() interrupt 1
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
num1++;
if(num1==65536)
{
num1=0;
}
}
void time1() interrupt 3
{
TH1=(65536-1)/256;
TL1=(65536-1)%256;
num11++;
if(num11==65536)
{
num11=0;
}
}
此程序的設計者:薛羽豪
|
|