回覆列表
  • 1 # 使用者5329335765427

    有很多方法的,第一種是用模擬PWM,設定好佔空比為1/2,根據週期設定好頻率就可以了,你這個不需要變動的話,不用PWM也可以,可以這樣寫:

    #define T0_delay 1000

    sbit P10=P1^0;

    sbit P11=P1^1;

    unsigned int Pwm_Count=0;

    void Timer0_init();

    void main()

    {

    Timer0_init();

    while(1);//空迴圈

    }

    void Timer0_init()

    {

    TMOD |=0x01; //採用16位定時器

    TH0 = (65536-T0_delay)/256; //定時器裝初值1000

    TL0 = (65536-T0_delay)%256;

    EA=1;

    ET0=1;

    TR0=1;

    }

    void timer0() interrupt 1

    {

    TH0 = (65536-T0_delay)/256; //裝初值1000,1ms中斷一次

    TL0 = (65536-T0_delay)%256;

    P10=~P10;//取反,1ms後電平變換,輸出週期為2ms的方波

    Pwm_Count++;//計數

    if(Pwm_Count==250)

    {

    Pwm_Count=0;//歸零,下次重新從零開始累加計數

    P11=~P11;//取反,250ms電平轉換一次,輸出方波

    }

    }

    要採用模擬PWM函式的話,可以這樣寫:

    定時器裝1ms的初值(同上)

    #define LED_ON 1

    #define LED_OFF 0

    主要程式碼如下:

    P10=~P10;

    //---------------------------------------------------------------------

    Pwm_Count_500 ++;

    if(Pwm_Count>500)

    {

    Pwm_Count_500 =0;

    }

    (Pwm_Count _500

  • 中秋節和大豐收的關聯?
  • 古代關於做人方面的格言?