找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3500|回复: 4
收起左侧

求大神讲解单片机pwm调光实验

[复制链接]
ID:59839 发表于 2014-7-10 11:27 | 显示全部楼层 |阅读模式
#include "config.h"
// 延时函数
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位计数器
TH0 = T0RELOAD / 256;
TL0 = T0RELOAD % 256;
AUXR |= 0x80;       // 计数器0时钟为Fosc,即1T
    PT0 = 1;            // 定时器0优先级控制位, 1 为高优先级 0 为低优先级
ET0 = 1;            // 定时器0中断使能
TR0 = 1;            // 启动定时器
    EA  = 1;            // 开总中断
}
// 主程序入口函数
void main(void)
{
    U8  i;          // 循环用变量
    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--; 与定时器的周期是什么关系?     
回复

使用道具 举报

ID:44262 发表于 2014-7-17 16:43 来自手机 | 显示全部楼层
其实这就是改变了脉冲宽度 ,相同频率的方波如果脉冲宽度越宽的话 ,在单位时间内输出了功率就越高 所以等也就会越亮
回复

使用道具 举报

ID:59839 发表于 2014-7-21 09:17 | 显示全部楼层
a110 发表于 2014-7-17 16:43
其实这就是改变了脉冲宽度 ,相同频率的方波如果脉冲宽度越宽的话 ,在单位时间内输出了功率就越高 所以等 ...

那这个程序里LED_PWM++;LED_PWM--;每加一次和每减一次的时间和定时器的周期有什么关系呢?
回复

使用道具 举报

ID:64203 发表于 2014-7-24 22:28 | 显示全部楼层
加减是控制亮度,周期的大小决定亮度变化的精度
回复

使用道具 举报

ID:64273 发表于 2014-8-6 02:47 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表