#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; } }
#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;
}
}
//改好了,看一下!望采纳!
#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)