51單片機實現光源的跟蹤
unsigned int show_ADC_result_ch0()
{ unsigned long int VCC1; unsigned int A1,B1,C1,D1,i; VCC1=0; for(i=0;i<8;i++) { VCC1=VCC1+get_ADC_result(0);} VCC1=VCC1/8; VCC1=get_ADC_result(0); VCC1=(long int)VCC1*10000/1024*5; A1=VCC1/10000; B1=VCC1000/1000; C1=VCC100000/100; D1=VCC1000000/10; Send(0x56); //V Send(0x31); //1 Send(0x3D); //= Send(A1+48); Send(0x2E); //. Send(B1+48); Send(C1+48); Send(D1+48); //Send(0xD); //回車 //Send(0xA); //換行 return(A1*1000+B1*100+C1*10+D1);
}
unsigned int show_ADC_result_ch1()
{ long int VCC2; unsigned int A2,B2,C2,D2,i; VCC2=0; for(i=0;i<8;i++) { VCC2=VCC2+get_ADC_result(1);} VCC2=VCC2/8; VCC2=get_ADC_result(1); VCC2=(long int)VCC2*10000/1024*5; A2=VCC2/10000; B2=VCC2000/1000; C2=VCC200000/100; D2=VCC2000000/10; Send(0x56); //V Send(0x32); //1 Send(0x3D); //= Send(A2+48); Send(0x2E); //. Send(B2+48); Send(C2+48); Send(D2+48); //Send(0xD); //回車 //Send(0xA); //換行 return(A2*1000+B2*100+C2*10+D2);
}
void uart_init()
{ TMOD=0x20; //TMOD=0010 0000B,定時器T1工作于方式2 SM0=0; //選擇串行口工作方式1 SM1=1; TH1=0xfa; //根據規定給定時器T1賦初值 9600波特率 TL1=0xfa; //根據規定給定時器T1賦初值 TR1=1; //啟動定時器T1
}
void Send(unsigned char dat)
{ SBUF=dat; while(TI==0); TI=0;
}
void positive_turn(unsigned int count)
{ P2_0=1; P2_1=0; CMOD = 0x00;//設置PCA時鐘周期 系統時鐘12分頻 fosc/12 CL = 0x00; //初值設置 CH = 0x00; CCAP0L = count; //設置初始占空比為25% CCAP0H = count;//占空比 設置的是低電平的時間 CCAPM0 = 0X42;//PWM模式 CR = 1;//開啟PCA計數器
}
void negative_turn(unsigned int count)
{ P2_0=0; P2_1=1; CMOD = 0x00;//設置PCA時鐘周期 系統時鐘12分頻 fosc/12 CL = 0x00; //初值設置 CH = 0x00; CCAP0L = count; //設置初始占空比為25% CCAP0H = count;//占空比 設置的是低電平的時間 CCAPM0 = 0X42;//PWM模式 CR = 1;//開啟PCA計數器
}
void stop_turn()
{ P1_3=1; P2_0=1; P2_1=1;
}
void delay(unsigned int a)
{
unsigned int b,i,tt;
b=a;
for(i=1;i
{tt=60000;
while(tt--);}
}
void delay_10ms()
{ TMOD=0x01; TF0=0; TH0=(65536-18433)/256;//10ms
評論