?? tyngz.c
字號(hào):
#include"AT89x51.h"
char tp=0;
unsigned char ad_result_data[10];
unsigned char ad_result_low2[10];
unsigned char ad_result_total[10];
unsigned char ad_average_result;
unsigned char r_4,r_5,r_6,r_7;
void get_ad_result();
char delay(char t);
/*void init()
{
} */
//////////////////////////////////////////////////延時(shí)子程序
char delay(char t) //160微秒
{
unsigned char m,n,s
for(s=10;s>0;s--)
{
for(m=t;m>0;m--);
for(n=2;n>0;n--);
}
}
////////////////////////////////////////////////////////////
void ADC_Power_On()
{
ADC_CONTR|=0x80;
delay(5);
}
////////////////////////////////////////////////////////////
//取AD結(jié)果函數(shù),它是十位AD轉(zhuǎn)換,每十次平均,最后取低八位作為AD采樣數(shù)據(jù)
void get_ad_result()
{
int i,q=0;
for(i=0;i<10;i++)
{
tp=0;
ADC_DATA=0; //高八位數(shù)據(jù)清零
ADC_LOW2=0; //低兩位清零
ADC_CONTR|=0x08; //啟動(dòng)AD轉(zhuǎn)換
while(!tp) //判斷AD轉(zhuǎn)換是否完成
{
tp=0x10;
tp&=ADC_CONTR;
}
ADC_CONTR&=0xe7;
ADC_DATA=ADC_DATA<<2; //高八位左移兩位
ADC_LOW2 &=0x03;
ad_average_result=ADC_DATA+ADC_LOW2;
q=q+ad_average_result;
}
ad_average_result=q/10;
}
/************************************************************
P1口AD轉(zhuǎn)換程序
*************************************************************/
void P10()
{
P1M0|=0x01; //設(shè)P1_0為開漏模式 如: P1_1= #00000010B
P1M1|=0x01;
ADC_CONTR=0xe0; //設(shè)置通道x, 格式如: P1_x= 0xeX
delay(2);
get_ad_result();
r_4=ad_average_result;
send_ad_result(r_4);
}
///////////////////////////
void P11()
{
P1M0|=0x02;
P1M1|=0x02;
ADC_CONTR=0xe1;
delay(2);
get_ad_result();
r_5=ad_average_result;
send_ad_result(r_5);
}
///////////////////////////
void P12()
{
P1M0|=0x04;
P1M1|=0x04; //設(shè)為開漏模式
ADC_CONTR=0xe2;
delay(2);
get_ad_result();
r_6=ad_average_result;
send_ad_result(r_6);
}
///////////////////////////
void P13()
{
P1M0|=0x08;
P1M1|=0x08; //設(shè)為開漏
ADC_CONTR=0xe3; //設(shè)置通道3 20--200微秒
delay(1);
get_ad_result(); //取P13結(jié)果
r_7=ad_average_result;
send_ad_result(r_7); // 把結(jié)果送到串口
}
********************************************************/
/****************** 云臺(tái)水平轉(zhuǎn)動(dòng) *****************************/
void qxzhuan_L() //強(qiáng)行左轉(zhuǎn)
{
P10();
P12();
while((r_6-7)>r_4) //如果右大于左
{
P1_4=1; //強(qiáng)行左轉(zhuǎn)
P1_5=0;
}
}
void qxzhuan_R() //強(qiáng)行右轉(zhuǎn)
{
P10();
P12();
while((r_4-7)>r_6) //如果左大于右
{
P1_4=0; //強(qiáng)行右轉(zhuǎn)
P1_5=1;
}
}
void zhuan_L() //左轉(zhuǎn)
{
P10();
P12();
while((r_4-7)>r_6) //如果左大于右
{
if(P2_2==1) //如果觸動(dòng)了左限位開關(guān),則強(qiáng)行向右回轉(zhuǎn)
{qxzhuan_R();}
else
P1_4=1; //左轉(zhuǎn)
P1_5=0; //右不轉(zhuǎn)
}
}
void zhuan_R() //右轉(zhuǎn)
{
P10();
P12();
while((r_6-7)>r_4) //如果右大于左
{
if(P2_3==1) //如果觸動(dòng)了右限位開關(guān),則強(qiáng)行向左回轉(zhuǎn)
{qxzhuan_L();}
else
P1_4=0; //左不轉(zhuǎn)
P1_5=1; //右轉(zhuǎn)
}
}
void shuiping()
{
P10(); //水平光強(qiáng)的采樣
P12();
if((r_4-7)>r_6) //如果左大于右
{
zhuan_L();
}
else if((r_6-7)>r_4) //如果右大于左
{
zhuan_R();
}
else
P1_4=0; //左不轉(zhuǎn)
P1_5=0; //右不轉(zhuǎn)
}
/*************************云臺(tái)垂直轉(zhuǎn)動(dòng)***************************/
void zhuan_U() //上轉(zhuǎn)
{
P11();
P13();
while((r_5-7)>r_7) //如果上大于下
{
else
P1_6=1; //上轉(zhuǎn)
P1_7=0; //下不轉(zhuǎn)
}
}
void zhuan_D() //下轉(zhuǎn)
{
P11();
P13();
while((r_7-7)>r_5) //如果下大于上
{
P1_6=0; //上不轉(zhuǎn)
P1_7=1; //下轉(zhuǎn)
}
}
void chuizhi()
{
P11(); //垂直方向光強(qiáng)的采樣
P13();
if((r_5-7)>r_7) //如果上大于下
{
zhuan_U();
}
else if((r_7-7)>r_5) //如果下大于上
{
zhuan_D();
}
else
P1_6=0; //上不轉(zhuǎn)
P1_7=0; //下不轉(zhuǎn)
}
/****************************************************
主程序
****************************************************/
main()
{
// AD_initiate();
ADC_Power_On();
P1_4=0; //電機(jī)控制端口初始化
P1_5=0;
P1_6=0;
P1_7=0;
while(1)
{
shuiping();
chuizhi();
} //向上旋轉(zhuǎn)
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -