#include<STC12c5410AD.h>
unsigned char duty[11] = {255,230,204,179,153,128,102,76,51,25,0};
unsigned char count;
void delay(unsigned int _1ms)
{
unsigned int tmp;
while(_1ms--!=0) {
for(tmp=0;tmp<144;tmp++);
}
}
void pwm_init(void)
{
CMOD = 0x04; // Use Time0
CL = 0x0; //PCA 计数器的低8位
CH = 0x0; //PCA 计数器的高8位
CCAP0H = duty[0]; //Duty Cycle
CCAPM0 = 0x42; // PWM mode
CR = 1; //Start PCA Timer.
TMOD = 0X02;
TL0 = 0X00;
TH0 = 0XF0;
TR0 = 1;
}
void init_ad()
{
P1M1 = 0x00;
P1M0 = 0x01;
ADC_CONTR |= 0x80; // ADC_POWER=1
ADC_CONTR &= 0xf8; // CHS[2,1,0]=0
ADC_CONTR &= 0x9f; // SPEED[1,0]=0
ADC_CONTR &= 0xef; // 清标志位ADC_FLAG=0
}
void main (void)
{
unsigned char ii=0;
count=0;
init_ad();
delay(1000);
pwm_init();
while(1)
{
delay(10);
ADC_CONTR |= 0x08; // ADC_START=1 启动AD转换
while(ADC_CONTR&0x10==0); //等待转换结束ADC_FLAG=1;
ADC_CONTR &= 0xef; // 清标志位ADC_FLAG=0
if(ADC_DATA<50)
count++;
else
count=0;
if(count>5)
{
ii++;
if(ii>=11) ii = 0;
CCAP0H = duty[ii];
count=0;
delay(2000);
}
}
}