单片机c语言编程错误求解决,怎么改? float AD_turn(uchar i) *** 要改成没有错误的答案

2025-06-20 09:06:39
推荐回答(3个)
回答1:

#include   "reg51.h"

#include   "absacc.h"

#include   "intrins.h"

#include   "math.h"                

#include   "string.h"

#define  uint    unsigned   int  

#define  uchar   unsigned   char

#define  menxian 3.2

#define  menxian2 4.5

uchar    ZKB1 = 0;    

uchar    click;

uchar    controlflag = 0;

uchar    k;

uchar    n=5;

uchar    shezhi=0;

uchar    flagAD=0;

uchar    flagSY=0;

uint     count=0;

uint     Num;

sbit    Tlc549_Clk  = P1^0 ;

sbit    Tlc549_Data = P1^1;

sbit    Tlc549_Cs   = P1^2;

sbit    LED = P2^0;

sbit    kz= P3^2;    

sbit    pwm= P2^1;

uchar Tlc549(void)   //AD549采集电压

{

 uchar i;

 uint TT=0;

 Tlc549_Cs =0;              

 for(i=0;i<8;i++)    //这儿多个{

{

  Tlc549_Clk =1;    

  TT=TT<<1;      

  if(Tlc549_Data==1)    

  TT=TT+1;               

  Tlc549_Clk =0;  

}

     Tlc549_Cs =1;    

     Num = TT;

     return Num;

}  

float AD_turn(uchar i)

{

 float ff;

 ff=5.0/255*i;

 return ff;

}

//这儿多个}

void Timer_init(void)

{

 TMOD=0x01;

 TH0=0xFF;

 TL0=0x06;  //赋初值

 EA=1;

 ET0=1;

 EX0=1;

 IT0=1;

 LED=0;

}

void main()

{

 float bian;

 Timer_init();

 while(1)

{

  k=Tlc549();       //读取AD采集的光照传感器的数值

  bian=AD_turn(k);  //读取AD采集的光照传感器的数值转换成电压

  if(bian>menxian)  //电压值高于门限

{

   flagAD=1;//光照低于一定的值,黑天

}

  else

   flagAD=0;//白天

}

  if(flagAD&&flagSY)//黑天且有声音      

{

   TH0=0xFF;

   TL0=0x06;      

   TR0=1;

   LED=1;//打开LED灯

   count=0;  

   flagSY=0;

   EX0 = 0;

   controlflag = 1;

}

  if(bian>menxian2)  //pwm ////////////////////////////////

{

     ZKB1 = 50; 

}

  else

{

     ZKB1 =140-bian*20;//255档归为100级,及占空比100%可调

}

}

}

void Timer_inter(void) interrupt 1

{

 count++;

 if (controlflag == 1)

{

    if(count>60000)    

{

   count=0;

   LED=0;

   EX0 = 1;

   controlflag = 0;

}

}

 TH0=0xFF;

 TL0=0x06;   //定时250us

 TR0=1;

 ++click;  

 if (click>100) click=0;     //靠这个定时计数来实现PWM控制周期

 if (click

{

  pwm=0;

 else 

{

   pwm=1;

}

}     ////////////////////////////////////////////////////////////////////////

void Extra_inter(void) interrupt 0

{

  if (kz == 1)

{

 flagSY=1;

}

 else 

{

 flagSY=0;

}

}

回答2:

#include   "reg51.h"
#include   "absacc.h"
#include   "intrins.h"
#include   "math.h"                
#include   "string.h"
#define  uint    unsigned   int  
#define  uchar   unsigned   char
#define  menxian 3.2
#define  menxian2 4.5
uchar    ZKB1 = 0;    
uchar    click;
uchar    controlflag = 0;
uchar    k;
uchar    n=5;
uchar    shezhi=0;
uchar    flagAD=0;
uchar    flagSY=0;
uint     count=0;
uint     Num;
sbit    Tlc549_Clk  = P1^0 ;
sbit    Tlc549_Data = P1^1;
sbit    Tlc549_Cs   = P1^2;
sbit    LED = P2^0;
sbit    kz= P3^2;    
sbit    pwm= P2^1;
uchar Tlc549(void)   //AD549采集电压
{
uchar i;
uint TT=0;
Tlc549_Cs =0;              
for(i=0;i<8;i++)
{

Tlc549_Clk =1;    
TT=TT<<1;      
if(Tlc549_Data==1)    
TT=TT+1;               
Tlc549_Clk =0;  
}
     Tlc549_Cs =1;    
     Num = TT;
     return Num;
}  
float AD_turn(uchar i)
{
float ff;
ff=5.0/255*i;
return ff;
}

void Timer_init(void)
{
TMOD=0x01;
TH0=0xFF;
TL0=0x06;  //赋初值
EA=1;
ET0=1;
EX0=1;
IT0=1;
LED=0;
}
void main()
{
float bian;
Timer_init();
while(1)
{
k=Tlc549();       //读取AD采集的光照传感器的数值
bian=AD_turn(k);  //读取AD采集的光照传感器的数值转换成电压
if(bian>menxian)  //电压值高于门限
{
flagAD=1;//光照低于一定的值,黑天
}
else

flagAD=0;//白天
}
if(flagAD&&flagSY)//黑天且有声音    
{
TH0=0xFF;
TL0=0x06;      
TR0=1;
LED=1;//打开LED灯
count=0;  
flagSY=0;
EX0 = 0;
controlflag = 1;
}
 if(bian>menxian2) //pwm ////////////////////////////////
{
    ZKB1 = 50; 
}
 else
{
    ZKB1 =140-bian*20;//255档归为100级,及占空比100%可调
}
}
}
void Timer_inter(void) interrupt 1
{
count++;
if (controlflag == 1)
{
   if(count>60000)    
{
count=0;
LED=0;
EX0 = 1;
controlflag = 0;
}
}
TH0=0xFF;
TL0=0x06;   //定时250us
TR0=1;
++click;  
if (click>100) click=0;     //靠这个定时计数来实现PWM控制周期
if (click{
pwm=0;

else 
{
  pwm=1;
}
}   ////////////////////////////////////////////////////////////////////////
void Extra_inter(void) interrupt 0
{
  if (kz == 1)
{
flagSY=1;
}
else 
{
flagSY=0;
}
}

//改好了,看一下!望采纳!

回答3:

#include "reg51.h"
#include "absacc.h"
#include "intrins.h"
#include "math.h"
#include "string.h"
#define uint unsigned int
#define uchar unsigned char
#define menxian 3.2
#define menxian2 4.5
uchar ZKB1 = 0;
uchar click;
uchar controlflag = 0;
uchar k;
uchar n=5;
uchar shezhi=0;
uchar flagAD=0;
uchar flagSY=0;
uint count=0;
uint Num;
sbit Tlc549_Clk = P1^0 ;
sbit Tlc549_Data = P1^1;
sbit Tlc549_Cs = P1^2;
sbit LED = P2^0;
sbit kz= P3^2;
sbit pwm= P2^1;
uchar Tlc549(void) //AD549采集电压
{
uchar i;
uint TT=0;
Tlc549_Cs =0;
for(i=0;i<8;i++)
{
Tlc549_Clk =1;
TT=TT<<1;
if(Tlc549_Data==1)
TT=TT+1;
Tlc549_Clk =0;
}
Tlc549_Cs =1;
Num = TT;
return Num;
}

float AD_turn(uchar i)
{
float ff;
ff=5.0/255*i;
return ff;
}

void Timer_init(void)
{
TMOD=0x01;
TH0=0xFF;
TL0=0x06; //赋初值
EA=1;
ET0=1;
EX0=1;
IT0=1;
LED=0;
}
void main()
{
float bian;
Timer_init();
while(1)
{
k=Tlc549(); //读取AD采集的光照传感器的数值
bian=AD_turn(k); //读取AD采集的光照传感器的数值转换成电压
if(bian>menxian) //电压值高于门限
{
flagAD=1;//光照低于一定的值,黑天
}
else
{
flagAD=0;//白天
}
if(flagAD&&flagSY)//黑天且有声音
{
TH0=0xFF;
TL0=0x06;
TR0=1;
LED=1;//打开LED灯
count=0;
flagSY=0;
EX0 = 0;
controlflag = 1;
}
if(bian>menxian2) //pwm ////////////////////////////////
{
ZKB1 = 50;
}
else
{
ZKB1 =140-bian*20;//255档归为100级,及占空比100%可调
}
}
}
void Timer_inter(void) interrupt 1
{
count++;
if (controlflag == 1)
{
if(count>60000)
{
count=0;
LED=0;
EX0 = 1;
controlflag = 0;
}
}
TH0=0xFF;
TL0=0x06; //定时250us
TR0=1;
++click;
if (click>100) click=0; //靠这个定时计数来实现PWM控制周期
if (click{
pwm=0;
}
else
{
pwm=1;
}
} ////////////////////////////////////////////////////////////////////////
void Extra_inter(void) interrupt 0
{
if (kz == 1)
{
flagSY=1;
}
else
{
flagSY=0;
}
}

同学你的这句函数附近的大括号多了我已经给你删除了你调试下功能看看有没有缺陷
float AD_turn(uchar i)