已經用adc測得光敏數值,然后想用pwm控制led,有占空比的那種,但是led不亮,想問問什么原因,下面是程序
#include "STC15F2K60S2.h"
#include "main.h"
#include "LCD1602.h"
#include "ADC.h"
#include "led.h"
unsigned char str[5];
unsigned int backup=0;
unsigned char aa[]={'L','I','G','H','T' ,':'};
unsigned int result;
unsigned int result1;
sbit light_pwm=P2^1;
unsigned char duty_cycle=0;
bit flag=0;
void delay_nms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<125;j++);
}
}
void main()
{
// zd_count=0;
// update_count=0;
// pwm_value=0;
// flag=0;
//
Timer0Init();
ET0=1; //打開定時器0中斷
EA=1; //打開總中斷
light_pwm=1;
init();
Init_ADC();
LCD_Write_String(0,1,aa);
while (1)
{
adc_light_display();
if(!flag)
{
duty_cycle++;
if(duty_cycle==255)
{
flag=1;
}
}
else
{
duty_cycle--;
if(duty_cycle==0)
{
flag=0;
}
}
light_pwm= (duty_cycle == 0 || duty_cycle == 255) ? 0 : 1;
delay_nms(10);
}
}
//ADC數值讀取轉化
void adc_light_display()
{
result1=ADC_Chang(2);
result=result1*4.75;
while (result!=backup)
{
str[0]=result/1000%100+'0';
str[1]=result/100%10+'0';
str[2]='.';
str[3]=result/10%10+'0';
str[4]=result%10+'0';
str[5]='\0';
LCD_Write_String(6,1,str);
backup=result;
}
}
//定時器0初始化函數,可由ISP軟件生成
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器為16位自動重裝載模式,較常使用
TL0 = 0xCD; //設置定時初值
TH0 = 0xD4; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}
//定時器0中斷服務函數
void Time0_Int(void) interrupt 1 //定時器1為3
{
TL0 = 0xCD; //設置定時初值
TH0 = 0xD4; //設置定時初值
light_pwm=duty_cycle;
} |