×

PWM控制LED灯亮度程序

发布时间:2020-05-19 发布时间:
|

#i nclude
#i nclude
#i nclude 
#include
void ledxianshi();
void PWM()
sbit up=P1^5;  //定义UP键
sbit down=P1^6;  //定义DOWN键
static unsigned char pwm;
unsigned char t;
unsigned char xdata seg_add _at_ 0xEFFF;
unsigned char xdata light_add _at_ 0xF7FF;
#define base_Adr  0xDFFF
#define uchar unsigned char
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define uchar unsigned char
#define uint unsigned int
#define ADC0809  XBYTE[0x0B000]  //P2.6选通    
float sum=0,fjg;
uint i,j,*q,*p,sd=5;
sbit p1_0=P1^0;
void wait(uint n);
void main(void)
{   j=0;
    TMOD=0X01;//设置定时器0
     TH0=0XFC;//定时时间设为1ms
     TL0=0X18;
      EA=0;//先关中断
      EA=1;//开总中断
      ET0=1; 
      //TR0=1;
     for(; ;)
    {
      if(j=20){
 do{}while(!TF0);
   q=0x30;
for(i=0;i<20;i++)  
 {sum=sum+(*q)*(*q);
  q++;
   }
    sum=sum/20;
   fjg=sqrt(sum);
if(fjg>sd)         
   p1_0=1;
   j=0;
}}
}
void power(void)
{  uchar x;
   for(;;)
        {ADC0809=0x01;
         wait(1000);
         x=ADC0809;
         P2=x;
         }
}
void wait(uint n)
{   uint i,j;
    for(i=0;i    for(j=0;j<100;j++);
}
timer0()interrupt 1 using 1
{*p=ADC0809;
   p++;
  TH0=0XFC;
  TL0=0X18;
  TR0=1;
  j++;
}
//sbit EOC=P3^2;//为A/D转换结束标志
//sbit START=      //启动A/D

uint data  tvdata;   //     
unsigned char xdata CH_base_Adr _at_ base_Adr;
unsigned char CH_data;
//unsigned char float;

void delay(unsigned int N)    //延时
{
  int i;
for(i=0;i}
void main()using 0
{
  long b=19;
   //light_add=0X3f;
     
                                       /* 采样AD0809通道的值 */
while(1){
      //CH_base_Adr=3;
   
      CH_data =CH_base_Adr;
      P0=CH_data;
     tvdata=P0;        //显示口
     tvdata=(tvdata*b);
     CH_base_Adr=0;
     ledxianshi();      //显示
     delay(50);
        }
 }
void ledxianshi(void)       //显示模块
{
  uchar k=0,seg=0,i=0;
  //int i=0;
 
  led[3]=tvdata%10;
  led[2]=tvdata/10%10;
  led[1]=tvdata/100%10;
  led[0]=tvdata/1000;
 for(k=0;k<4;k++)
  {
   seg=tv[k];            //选择哪个LED口
   seg_add=seg;
   i=led[k];               //显示口
   light_add=a;        //显示
   delay(10);
   }
  }

PWM ()
{
void delay (unsigned char ms);
TMOD=0X21;
 ET0=1;
  ET1=1;
   EA=1;
    TH0=0XFC;   //定时器0,定时1ms
  TL0=0X18;
   TH1=0X9C;   //定时器1,定时0.1ms
    TL1=0X00;
     TR0=1;
      PT1=1;   //定义定时器1优先中断
    pwm=0x9c;
 while (1)
  {
do
    {
 pwm++;
 delay (10);
  if (pwm==0xff) beep();
 }
    while (pwm!=0xff);
 
do
  {
   pwm--;
   delay (10);
    if (pwm==0x01) beep ();
     }
  while (pwm!=0x01);
 
  }
}

void timer0 (void) interrupt 1   //定义定时器0
 {
 TH0=0XFC;
  TL0=0X18;
    TR1=1;
  TH1=pwm;
   P0=0X00;
 
 }

void timer1(void) interrupt 3  //定义定时器1
 {
  P0=0XFF;
   TR1=0;
 }

void delay (unsigned char ms) //延时
 {
 unsigned char i=120;
  while (ms--)
   {
    while (i--)
  {}
   }
 }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
什么是晶圆的良率呢?如何把控?