资源简介

STC12C5A60S2呼吸灯,使用片内AD和pwm,可调频率

资源截图

代码片段和文件信息

//Breathing LED 
//
//P1.3(PWM0)  LED1  ADC
//P1.4(PWM1)  LED2  BUTTON
//
//LED DISPLAY
//P2.2 P2.3 P2.4  wei 
//P0 SEG
//P1.0 LE
//
//led2:  f = 0.36 * v + 0.2

#include  
typedef unsigned char byte;
typedef unsigned int  word; 

#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDL 0x20
#define ADC_SPEEDLL 0x00

sbit LED1 = P1^3;
sbit LED2 = P1^4;

sbit w2 = P2^4;//位选
sbit w1 = P2^3;
sbit w0 = P2^2;
sbit le = P1^0;

byte num1num0;

byte duty; // duty control
byte ttv;// t++ per 50ms
float f1f2T1T2;// frequency and period
byte n1n2;  //period --> digital
byte unumberutemp;
byte voltemp[5];
float voltagevoltage0;
 
byte table[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
byte dot = 0x80;

void delay(unsigned int tms);
void pwmInit();
void Timer0Init(void);
void InitADC(); 
void main(void) 
{

 ET0 = 1;
 EX0 = 1; 
 EX1 = 1;
     IT1=1;//下跳沿触发
 IT0=1;  
 EADC=1;
//  PT0=1;
  EA = 1;

 f1=1.6;
 num1=0;
 num0=0;
 P3=0xff;
 Timer0Init();
 pwmInit();
 InitADC();
 TR0 = 1; //timer0 start
   while(1)
 {
  T1=1/f1;
n1=T1*20+0.5;
num1=(byte)f1;
num0=(byte)((f1-num1)*10);
 

  P0=table[num1]|dot;
w2=0;
w1=0;
w0=0;
le=1;
le=0;
delay(2);

 
    f2=0.36 * voltage + 0.2;
        T2=1/f2;
n2=T2*20+0.5;

P0=table[num0];
w2=0;
w1=0;
w0=1;
le=1;
le=0;
      delay(2);
 }


void incfrq() interrupt 0//increase frequency0
{
  delay(40);
  if(P3^2==0)
  {
     CR=0;   
  f1 += 0.1;   
  if(f1<=0.2||f1>=2)
  {
   f1 = 2;
  }
  CCAP0H = 0;
  CR=1;
  }


}

void decfrq() interrupt 2//decrease frequency0
{            
  delay(40);
  if(P3^3==0)
  {
     CR=0;      
      f1 -= 0.1;   
  if(f1<=0.2||f1>=2)
  {
   f1 = 0.2;
  }
   CCAP0H = 0;
  CR=1;
  }
    
}

voi

评论

共有 条评论