欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請教單片機PWM控制3W led燈珠,開機為什么要閃一下? [打印本頁]

作者: 芙蓉焊料    時間: 2023-12-20 12:04
標題: 請教單片機PWM控制3W led燈珠,開機為什么要閃一下?
如題,開機閃一下然后才正常,找了半天也沒解決,請問是什么原因?



單片機源程序如下:
#include <reg52.H>
#include<intrins.h>
#include"Delay.h"
unsigned char Pwm_Duty =0;   //定義一個占空比變量
unsigned char PWM_Cnt=0;    //200us的變量/50HZ的%分之一

sbit PWM = P1^0;   //PWM輸出

void Timer0Init(void)                //200微秒@12.000MHz
{
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0x38;                  //設置定時初始值
        TH0 = 0xFF;                  //設置定時初始值
        TF0 = 0;                    //清除TF0標志
        ET0 = 1;
        EA = 1;
        TR0 = 1;                //定時器0開始計時

}
  void timer0_Routine(void) interrupt 1   //T0中斷程序
{
        
        TL0 = 0x38;                         //重裝始值
        TH0 = 0xFF;                         //重裝始值
        PWM_Cnt++;
        if(PWM_Cnt>=100)       //計滿100=20ms
        {
          PWM_Cnt=0;
        }

}
void Int0_Routine(void) interrupt 0
{
        static unsigned char PWM_KEY;  //static靜態變量,保持按鍵值
        IT0=0;
        if(INT0==0)
        {
                Delay(20);
        }
        while(INT0==0);
        Delay(20);        
        
        PWM_KEY++;        //按鍵加一
        switch(PWM_KEY)
        {
                case 1:Pwm_Duty=10;break;   //占空比10%
                case 2:Pwm_Duty=20;break;
                case 3:Pwm_Duty=30;break;
                case 4:Pwm_Duty=40;break;
                case 5:Pwm_Duty=50;break;
                case 6:Pwm_Duty=60;break;
                case 7:Pwm_Duty=70;break;
                case 8:Pwm_Duty=80;break;
                case 9:Pwm_Duty=90;break;
                case 10:Pwm_Duty=100;break;
                case 11:Pwm_Duty=0;
                PWM_KEY=0;IT0=1; break;
                default:break;  //default語句冒號后都執行break
        }
}
        void main()
{
  PWM =0;
        IT0=0;   //外部中斷電平觸發
        EX0=1;   //外部中斷0中斷允許位
        EA=1;
        Timer0Init();        //定時器初始化函數

        while(1)
  {
     if(PWM_Cnt<Pwm_Duty)   //小于或等于設置的占空比
             {
                       PWM = 1;   //占空比輸出
             }
                else
            PWM = 0;    //占空比輸出        
  }
}

作者: zch5200    時間: 2023-12-20 14:31
你這個是硬件的問題,上電單片機IO口默認高電平,然后單片機初始化,才轉為低電平。所以開機LED會亮一下。
作者: Hephaestus    時間: 2023-12-20 14:31
AT89C52上電后,程序執行前,所有IO口都是高電平,當然讓LED點亮了。
作者: LengmoAngel    時間: 2023-12-22 09:05
AT89c51上電初始化的時候 好像會使所有io高電平,如果要避免這個問題 要不試著讓單片機控地而不是VCC
作者: LaoYuTou    時間: 2023-12-22 09:19
1、端口反相
2、換單片機
3、初始化(上電有延時,效果不理想)




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1