標題: 求大神講解單片機pwm調光實驗 [打印本頁]

作者: 563524748    時間: 2014-7-10 11:27
標題: 求大神講解單片機pwm調光實驗
#include "config.h"
// 延時函數(shù)
void delay(U32 dly)
{
    U32 i;
    while(--dly > 0)
    {
        for(i=0;i++;i<1000000);
    }
}
#define TIMER0_RUN_HZ       10000          //每秒多少次進入定時器中斷
#define T0RELOAD      (65536 - (Fpclk/TIMER0_RUN_HZ))
// 定義一個易變型變量并初始化為0
volatile U32 SYS_Time = 0;
volatile U32 LED_PWM  = 0;
void ISR_TIMER0(void) interrupt 1 using 1
{
    // 重新裝載定時器值  
TH0 = T0RELOAD / 256;
TL0 = T0RELOAD % 256;
    // 以下添加用戶程序
    SYS_Time++;
    if(SYS_Time < LED_PWM) // PWM調光程序
    {
        P0 = 0;            // 點亮LED燈
    }else{
        P0 = 0xff;         // 關閉LED燈
    }
    if(SYS_Time > 100)SYS_Time = 0;
}
void TIMER0_Init(void)
{
    TMOD &= 0xf0;
    TMOD |= 0x01;       // 16位計數(shù)器
TH0 = T0RELOAD / 256;
TL0 = T0RELOAD % 256;
AUXR |= 0x80;       // 計數(shù)器0時鐘為Fosc,即1T
    PT0 = 1;            // 定時器0優(yōu)先級控制位, 1 為高優(yōu)先級 0 為低優(yōu)先級
ET0 = 1;            // 定時器0中斷使能
TR0 = 1;            // 啟動定時器
    EA  = 1;            // 開總中斷
}
// 主程序入口函數(shù)
void main(void)
{
    U8  i;          // 循環(huán)用變量
    TR0 = 0;            // 暫時關閉定時器
    for(i = 0;i<3;i++)
    {
        P0 = 0;         // 八個燈全亮
        delay(50000);   // 延時一段時間
        P0 = 0xff;      // 八個燈全滅
        delay(20000);   // 延時一段時間
    }
    TR0 = 1;            // 啟動定時器
    while(1)
    {
        delay(5000);    // 延時一段時間
        P33 = 1;        // 釋放按鈕1輸出
        if(P33 == 0)    // 檢測按鈕1是否按下
        {
            LED_PWM = 0;// 熄滅LED
        }
        P34 = 1;        // 釋放按鈕2輸出
        if(P34 == 0)    // 檢測按鈕2是否按下
        {
            if(LED_PWM < 100)LED_PWM++;     // 調亮LED
        }
        P35 = 1;        // 釋放按鈕3輸出
        if(P35 == 0)    // 檢測按鈕3是否按下
        {
            if(LED_PWM > 0)LED_PWM--;       // 調暗LED
        }
    }
}
這個程序里定時器、各個變量的作用以及它們之間的關系是怎么樣的,LED_PWM++;LED_PWM--; 與定時器的周期是什么關系?     

作者: a110    時間: 2014-7-17 16:43
其實這就是改變了脈沖寬度 ,相同頻率的方波如果脈沖寬度越寬的話 ,在單位時間內(nèi)輸出了功率就越高 所以等也就會越亮
作者: 563524748    時間: 2014-7-21 09:17
a110 發(fā)表于 2014-7-17 16:43
其實這就是改變了脈沖寬度 ,相同頻率的方波如果脈沖寬度越寬的話 ,在單位時間內(nèi)輸出了功率就越高 所以等 ...

那這個程序里LED_PWM++;LED_PWM--;每加一次和每減一次的時間和定時器的周期有什么關系呢?
作者: 西門不吹雪    時間: 2014-7-24 22:28
加減是控制亮度,周期的大小決定亮度變化的精度
作者: 154860956    時間: 2014-8-6 02:47





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