打印
[51单片机]

PWM接灯总是闪,师傅帮忙看一下

[复制链接]
1280|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rdfeps|  楼主 | 2014-3-14 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



#include <reg52.h>
#define uchar unsigned char
#define uint unsigned  int
unsigned  int scale;        //定义一个全局变量
unsigned  int tt ;
sbit jia =P0^0;    //加键位定义
sbit jian=P0^1;    //减键位定义
sbit  pwm=P0^7;    //输出口定义,接LED

/**************************延时函数************************/
void delay (uint i)
{
unsigned  int j;
while (i--)
{
for (j=0;j<100;j++)
;
}
}
/***************************定时器中断函数*******************/
void timer0 (void) interrupt 1 using 1
{
TL0=0x00;          //低8位初始值
TH0=0X00;          //高8位初始值

tt++;  //产生一个中断加一次
if (tt==10)   //时钟周期
    {
     tt=0;         //开始新的周期
     pwm=0;        //低电平点亮LED
    }
if (scale==tt)   
   {
    pwm=1;          //高电平熄灭LED
   }
        }
  
/******************************主函数**************************/
  void main (void)
{
scale=1;
TMOD =0X01;        //16位定时模式
TL0=0x00;          //低8位初始值
TH0=0X00;          //高8位初始值
EA=1;              //总中断允许
ET0=1;             //定时计数器中断允许
TR0=1;             //开始计时
pwm=0;             //点亮LED
while(1)
{
if (jia==0)
    {
      delay (5);    //按键去抖动   
      if (jia==0)        //确认按键按下
           { if (scale==9)
                {scale=9;}
             else  
                  scale++;
            }
      }
        while(jia^1) ;
   
if (jian==0)
    {
      delay (5);    //按键去抖动   
      if (jian==0)        //确认按键按下
           { if (scale==1)
                {scale=1;}
             else  
                  scale--;
            }
     }
        while(jian^1) ;
        
                  }

                  }
51单片机模拟PWM,PWM输出口接LED总是闪,不知道哪里问题,麻烦师傅给看一下

相关帖子

沙发
ayb_ice| | 2014-3-14 09:46 | 只看该作者
自己算一下不就知道了

一次中断多少时间,多少次中断一个完整周期,保证周期<=20MS就可以了

使用特权

评论回复
板凳
four_zhg| | 2014-3-14 15:58 | 只看该作者
保证闪烁频率大于40HZ基本就看不出闪了

使用特权

评论回复
地板
FAQ| | 2014-3-14 16:58 | 只看该作者
four_zhg 发表于 2014-3-14 15:58
保证闪烁频率大于40HZ基本就看不出闪了

还是50Hz好些

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

23

帖子

1

粉丝