📄 text1.c
字号:
#include"STC12C5410AD.H"
//AD程序定义
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;
char tp=0;
unsigned char m,n,s,b,t,en=1;
void get_ad_result();
void delay(char t);
unsigned int z=0;
/*********************************************************************
AD转换程序
***********************************************************************/
///////初始化函数
void AD_initiate()
{
ES=0;
TMOD=0x21;
SCON=0x50;
TH1=0xfd;
TL1=0x0fd;
TR1=1;
}
/////////////////////////
void ADC_Power_On()
{
ADC_CONTR|=0x80;
delay(5);
}
//取AD结果函数
void send_ad_result(unsigned char R)
{ SBUF=R;
while(TI==0) ;
TI=0;
}
//取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据
void get_ad_result()
{ int i,q=0;
for(i=0;i<10;i++)
{
tp=0;
ADC_DATA=0; //高八位数据清零
ADC_LOW2=0; //低两位清零
ADC_CONTR|=0x08; //启动AD转换
while(!tp) //判断AD转换是否完成
{
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;
}
//延时子程序
void delay(char t) //160微秒
{
for(s=10;s>0;s--)
{
for(m=t;m>0;m--);
for(n=2;n>0;n--);
}
}
void delay02s(char t) //延时子程序
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=t;j>0;j--)
for(k=248;k>0;k--);
}
void yanshi() //延时子程序,延时4分52秒
{
unsigned int i,j,k;
for(i=1000;i>0;i--)
for(j=1000;j>0;j--)
for(k=248;k>0;k--); //
}
/************************************************************
P1口AD转换程序
*************************************************************/
void fP14()
{
P1M0|=0x10; //设P1_4为开漏模式 如: P1_1= #00000010B
P1M1|=0x10;
ADC_CONTR=0xe4; //设置通道x, 格式如: P1_x= 0xeX
delay(2);
get_ad_result();
r_4=ad_average_result;
send_ad_result(r_4);
}
///////////////////////////
void fP15()
{
P1M0|=0x20;
P1M1|=0x20;
ADC_CONTR=0xe5;
delay(2);
get_ad_result();
r_5=ad_average_result;
send_ad_result(r_5);
}
void fP16()
{
P1M0|=0x40;
P1M1|=0x40; //设为开漏模式
ADC_CONTR=0xe6;
delay(2);
get_ad_result();
r_6=ad_average_result;
send_ad_result(r_6);
}
void fP17()
{
P1M0|=0x80;
P1M1|=0x80; //设为开漏
ADC_CONTR=0xe7; //设置通道3 20--200微秒
delay(1);
get_ad_result(); //取P13结果
r_7=ad_average_result;
send_ad_result(r_7); // 把结果送到串口
}
/********************************************************
电机控制程序
********************************************************/
/****************** 电机—1 *****************************/
void zhuan_r4()
{
fP14();
fP16();
while(r_4>r_6) //
{
P26=1;
P27=0;
fP14();
fP16();
if(P26==0)
{break;}
}
P26=0;
P27=0;
}
void zhuan_r6()
{
fP14();
fP16();
while((r_6>r_4))
{
P26=0;
P27=1;
fP14();
fP16();
if(P27==0)
{ break;}
}
P26=0;
P27=0;
}
void dianji_1()
{
fP14();
fP16();
if((r_4-7)>r_6) {if(P34==0) {zhuan_r4();}}
if(r_4<(r_6-7)){if(P35==0) {zhuan_r6();}}
}
/******************电机—2***************************/
void zhuan_r5()
{
P10=1;
P37=0;
fP15(); //采样
fP17();
while(r_5>r_7) //比较采样值,如果P1.0大于P1.1,就向P1.0方向转,其余的同理
{
P10=1;
P37=0;
fP15(); //采样
fP17();
if(P10==0)
{break;}
}
P10=0;
P37=0;
}
void zhuan_r7()
{
P10=0;
P37=1;
fP15(); //采样
fP17();
while(r_7>r_5)
{
P10=0;
P37=1;
fP15(); //采样
fP17();
if(P37==0)
{break;}
}
P10=0;
P37=0;
}
void dianji_2()
{
fP15(); //采样
fP17();
if((r_5-7)>r_7) {if(P25==0){zhuan_r5();}}
if(r_5<(r_7-7)){if(P24==0){zhuan_r7();}}
}
/***************************************************
定时器延时程序
*****************************************************/
//定时器0初始化
void Timer0_ini()
{ TMOD=0x01; //定时器0工作于方式1
EA=1; //总中断允许
ET0=1; //定时器0允许
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
//定时器0中断子程序
Timer0() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
z++;
if(z==400)
{en=0;TR0=0;}
}
/****************************************************
主程序
****************************************************/
main()
{
unsigned char i;
AD_initiate();
ADC_Power_On();
P27=0; //电机控制端口初始化
P26=0;
P10=0;
P37=0;
P24=1; //方向调整端口
P25=1;
while(1)
{
// for(i=2;i>0;i--)
// {
dianji_1();
dianji_2();
// }
// yanshi();
while(P12==0)
{
for(i=2;i>0;i--) //
{
dianji_1();
dianji_2();
}
yanshi();
//P10=0; P37=1;
} //向上旋转
/* while(P25==0)
{ P10=1; P37=0; } //向上旋转
P24=1; //方向调整端口
P25=1;
*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -