?? main.c
字號(hào):
#include<reg51.h>
sbit p1_0=P1^0;//電機(jī)旋轉(zhuǎn)控制
sbit p1_1=P1^1;//電機(jī)旋轉(zhuǎn)控制
sbit p1_2=P1^2;//電機(jī)使能控制
sbit p1_3=P1^3;//電機(jī)旋轉(zhuǎn)控制
sbit p1_4=P1^4;//電機(jī)旋轉(zhuǎn)控制
sbit p1_5=P1^5;//電機(jī)使能控制
sbit E_CLK=P1^6;//LCD顯示。時(shí)鐘輸入
sbit RW_SID=P1^7;//LCD顯示。數(shù)據(jù)輸入
sbit p2_0=P2^0;//前進(jìn)循跡方向信號(hào)
sbit p2_1=P2^1;//前進(jìn)循跡方向信號(hào)
sbit p2_2=P2^2;//前進(jìn)循跡方向信號(hào)
sbit p2_3=P2^3;//蹺蹺板平衡信號(hào)
sbit p2_4=P2^4;//蹺蹺板平衡信號(hào)
sbit p2_5=P2^5;//蹺蹺板平衡信號(hào)
sbit p2_6=P2^6;//后退循跡方向信號(hào)
sbit p2_7=P2^7;//避障傳感器信號(hào)
sbit p3_2=P3^2;//溫度傳感器信號(hào)
sbit p3_4=P3^4;//蜂鳴器信號(hào)控制
sbit p3_6=P3^6;//狀態(tài)切換鍵信號(hào)
sbit p3_7=P3^7;//暫停/開始鍵信號(hào)
/****************************************顯示用變量*************************************************************/
char sec1=48/*顯示,秒十分位*/,sec2=48/*顯示,秒個(gè)位*/,sec3=48/*顯示,秒十位*/,sec4=48/*顯示,秒百位*/;
char sd1=48/*顯示,速度十分位*/,sd2=48/*顯示,速度個(gè)位*/,sd3=48/*顯示,速度十位*/,sd4=48/*顯示,速度百位*/;
char lc1=48/*顯示,路程百分位*/,lc2=48/*顯示,路程十分位*/,lc3=48/*顯示,路程個(gè)位*/,lc4=48/*顯示,路程十位*/;
int xszt1=0xD1/*顯示,狀態(tài)*/,xszt2=0xAD/*顯示,狀態(tài)*/,xszt3=0xBC/*顯示,狀態(tài)*/,xszt4=0xA3/*顯示,狀態(tài)*/;
/****************************************蹺蹺板平衡用變量*******************************************************/
long qj=10/*前進(jìn)參數(shù)*/,ht=1/*后退參數(shù)*/,tz=0/*平衡狀態(tài)參數(shù)*/,bf=600/*步進(jìn)*/;
int cs=0/*蹺蹺板翻的次數(shù)*/,fdd=6/*防抖動(dòng)系數(shù)*/,fx=0/*前一次運(yùn)動(dòng)方向,標(biāo)志*/,ph=0/*平衡的持久度*/;
int fy=0/*反應(yīng)時(shí)間*/,cf=1/*沖鋒標(biāo)志*/,bc=0/*是否補(bǔ)償,標(biāo)志*/,phzt=0/*平衡狀態(tài)*/,dd=0/*等待時(shí)間*/;
/****************************************通用變量****************************************************************/
int a/**/,b/**/,l/**/,r/**/,i/**/,j,m=0/**/,k/**/,zt=1/*循跡、避障、平衡狀態(tài)標(biāo)志*/;
int setnumber=8/*PWM占空比調(diào)整*/,n/*一秒種轉(zhuǎn)了幾圈*/,t/*計(jì)時(shí)用,每0.1秒判斷標(biāo)志,及時(shí)間傳遞顯示的過度量*/;
int tk/*時(shí)間計(jì)數(shù)*/,vt/*速度傳遞顯示的過渡量*/,st/*路程傳遞顯示的過渡量*/,yx/*小車運(yùn)行標(biāo)志*/,TC=1/*停車標(biāo)志*/;
float s/*路程計(jì)算量*/,c=0.9742647/*輪子1/4圈的長度(cm)*/;
double v/*速度計(jì)算量*/;
#define uchar unsigned char
#include<delay1ms.c>
#include<xianshi.c>
#include<xunji.c>
#include<htxunji.c>
#include<pheng.c>
#include<bizhang1.c>
#include<lcd3.c>
timer0() interrupt 1 using 1
{ TH0=0xFc;
TL0=0x18;
r++;
t++;
if(TC==1)
{ if(b==1)
{
if(m<setnumber)
{ p1_2=0;
p1_5=0;
}
else
{ p1_2=1;
p1_5=1;
}
if (m>=10)
m=0;
m++;
}
else if(b==0)
{ if(l<setnumber+1)
{ p1_2=0;
p1_5=0;
}
else
{ p1_2=1;
}
if (l>setnumber+2)
p1_5=1;
if (l>10)
l=0;
l++;
}
}
if(t==100)
{ if(phzt!=1&&phzt!=3||zt!=3)
tk++;
else //若在狀態(tài)3(蹺蹺板平衡狀態(tài))的平衡停表情況
dd++; //
if(dd==50) //
{ if(phzt==1) //
phzt=2; //
if(phzt==3) //
phzt=4; //打破平衡,準(zhǔn)備下蹺蹺板
tk=0; //重新計(jì)時(shí)
dd=0;
}
if (tk>=10000) //每
tk=0; //0.1
t=tk; //秒
sec4=(t/1000)+0x30; //累
t=t%1000; //加
sec3=(t/100)+0x30; //時(shí)
t=t%100; //間
sec2=(t/10)+0x30; //一
t=t%10; //次
sec1=t+0x30; //
t=0; //
}
if(r==1000)
{ r=0; //每
v=n*c; //一
v=v*10; //秒
vt=v; //計(jì)
if(vt>=10000) //算
vt=9999; //速
sd4=(vt/1000)+0x30; //度
vt=vt%1000; //一
sd3=(vt/100)+0x30; //次
vt=vt%100; //
sd2=(vt/10)+0x30; //
vt=vt%10; //
sd1=vt+0x30; //
n=0; //
}
}
timer1() interrupt 3 using 2
{ if(a==3) //在前進(jìn)的時(shí)候。輪子每1/4周累加路程一次
{ n++; //在后退的時(shí)候。輪子每1/4周減少路程一次
s=s+c; //
} //
else if(a==4) //
s=s-c; //
if(s>=10000||s<=0) //
s=0; //
st=s; //
lc4=(st/1000)+0x30; //
st=st%1000; //
lc3=(st/100)+0x30; //
st=st%100; //
lc2=(st/10)+0x30; //
st=st%10; //
lc1=st+0x30; //
}
main()
{ yx=0;/*是否運(yùn)行,標(biāo)志位*/
kaiji();
TMOD=0x61; /**************************/
TH0=0xFC; /* */
TL0=0x18; /* */
TL1=-1; /*定時(shí)計(jì)數(shù)器,裝初值,打開*/
TH1=-1; /* */
IP=0x08; /* */
EA=0;ET0=1;ET1=1;/* */
TR0=1;TR1=1; /**************************/
initlcm();/*顯示初始化*/
for(;;)
{ xianshi();
if(p3_7==0)//暫停(啟動(dòng))?
{
yx++; /*******************/
yx=(yx%2);/* */
EA=yx; /* */
TC=yx; /*切換暫停/啟動(dòng)狀態(tài)*/
p1_2=!yx; /* */
p1_5=!yx; /*******************/
delay1ms(50,1000);/*延時(shí)防抖動(dòng)*/
}
if(p3_6==0)//切換狀態(tài)?
{ yx=0; //停
EA=0; //止
TC=0; //運(yùn)
p1_2=1;//行
p1_5=1;//
if(zt<3) /**********/
zt++; /*切換狀態(tài)*/
else zt=1;/**********/
if(zt==1)
{ xszt1=0xD1;//
xszt2=0xAD;//切
xszt3=0xBC;//換
xszt4=0xA3;//顯
} //示
if(zt==2) //狀
{ xszt1=0xB1;//態(tài)
xszt2=0xDC;//
xszt3=0xD5;//
xszt4=0xCF;//
} //
if(zt==3) //
{ xszt1=0xC6;//
xszt2=0xBD;//
xszt3=0xBA;//
xszt4=0xE2;//
}
delay1ms(50,1000);/*延時(shí)防抖動(dòng)*/
}
if(yx==1)//運(yùn)行
{ if(zt==1)
xunji();//狀態(tài)1,則循跡
else if(zt==2)
bizhang();//狀態(tài)2,則避障
else if(zt==3)
pheng();//狀態(tài)3,則蹺蹺板平衡
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -