如何能使在c语言中单片机中逐渐熄灭,求解:一个LED如何渐渐变亮然后渐渐变灭(要C语言的) 谢谢!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

答应给你的程序

程序采用计数的方法,

还有一个程序是用改变定时器TH和TL值的方法,可以输出很高的频率,不过由于电脑格式化,程序已经没有了,就暂时不发了

/****************************************/

/*

Pwm.c

*/

/*

PWM软件模拟

/*

/*

模拟方式:计数式

*/

/*

2012-2-14

*/

/*****************************************/

#include #define PwmIO1 P1_0//LED接P1.0 #define Button P1_2//按扭 #define H 0//设定脉冲方向(反向)

#define L 1 unsigned char PWM1;//pwm1计数 unsigned char PR1;//当前占空比 void PWMInte()interrupt 1//中断服务,用于产生PWM

{

TH0 = 0xFF;

TL0 = TL0+0xA3+3;//重装 if(PR1 == 0)

PwmIO1 = L;//占空比为0时输出L

else if(PR1 == 100)

PwmIO1 = H;//占空比为1时输出H

else//平时输出PWM

{

if(++PWM1 > 100)//计数

PWM1 = 0;//复位

} if(PWM1 > PR1)//到占空比

PwmIO1 = L;//输出L

else//没到占空比

PwmIO1 = H;//输出H

}

/**************************************************************/

delay10ms()//延时10ms

{

unsigned char i,n;

for(i=0 ; i<10 ; i++)

{

for(n=0 ; n<124 ; n++);

}

}

/**************************************************************/

void main(void)

{

unsigned char n;//计数,用于延时 PR1 = 50;//初始化占空比为50 TMOD |= 0x01;//定时器0不自动重装

IE = 0x82;//打开中断 TH0 = 0xFF;//定时0.01ms

TL0 = 0xA3;

TR0 = 1;//开定时器

while(1)

{

if(!Button)//按下按键

{

delay10ms();

if(!Button)//无抖动

{

while(!Button);//等待松开按键

while(PR1<101)//亮度增加到最大

{

delay10ms();//延时一会

PR1++;

} for( n=0 ; n<50 ; n++)

delay10ms();//等待一会 while( PR1 )//亮度减至最小

{

delay10ms();//延时一会

PR1--;

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值