首页 PWM控制LED亮度

PWM控制LED亮度

举报
开通vip

PWM控制LED亮度PWM控制LED亮度 PS:只是拿了先成的一个板子,带下载口的,拉了8个I/O口出来,接了8个LED灯 线路弄的不好,请大家见谅 编写环境:GCC20080512 使用了一个计数器中断 图片和视频不是很清楚,希望大家谅解 (1) /*第1,3,5,7个灯半亮,其余的全亮。 */ #include #include volatile signed int timecount=0; volatile signed long timecount2=0; unsigned...

PWM控制LED亮度
PWM控制LED亮度 PS:只是拿了先成的一个板子,带下载口的,拉了8个I/O口出来,接了8个LED灯 线路弄的不好,请大家见谅 编写环境:GCC20080512 使用了一个计数器中断 图片和视频不是很清楚,希望大家谅解 (1) /*第1,3,5,7个灯半亮,其余的全亮。 */ #include #include volatile signed int timecount=0; volatile signed long timecount2=0; unsigned int j=0; const int LED_code[]={160,0,160,0,160,0,160,0}; SIGNAL(SIG_OVERFLOW0)//计数器溢出中断 { TCNT0=16; timecount++; timecount2++; if(timecount>=320)//PWM周期 { PORTD|=0xff;//关 timecount=0; } for(j=0;j<=7;j++) { if(LED_code[j]<=timecount)//读取占空比值 { PORTD&=~(1< #include volatile signed int timecount=0; volatile signed long timecount2=0; unsigned int j=0; const int LED_code[]={280,240,200,160,120,80,40,0}; SIGNAL(SIG_OVERFLOW0)//计数器溢出中断 { TCNT0=16; timecount++; timecount2++; if(timecount>=320)//PWM周期 { PORTD|=0xff; timecount=0; } for(j=0;j<=7;j++)//依次比较读取 { if(LED_code[j]<=timecount) { PORTD&=~(1< #include volatile signed int timecount=0; volatile signed long timecount2=0; volatile unsigned char adddir_FLAG=1; unsigned int i=0; SIGNAL(SIG_OVERFLOW0)//计数器溢出中断 { TCNT0=16; timecount++; timecount2++; if(timecount2>=2000)//每隔60毫秒更新下数组,即改变PWM的占空比 { if(i<=0){adddir_FLAG=1;} if(i>=48){adddir_FLAG=0;} if(adddir_FLAG==1){i++;} if(adddir_FLAG==0){i--;} timecount2=0; } if(timecount>=48)//PWM的周期 { PORTD=0x00;//周期初始开 timecount=0; } if(timecount>=i)//达到对应调节到的占空比时 { PORTD=0xff;//关 } } int main(void) { DDRD =0xff; PORTD|=0xff; TCCR0=0x01; TIMSK=0x01; cli(); sei(); //使能全局中 while(1) { } } /*8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。*/ #include #include volatile signed int timecount=0; volatile signed long timecount2=0; unsigned int i=0; unsigned int j=0; unsigned int m=0; volatile unsigned char adddir_FLAG=1; volatile int LED_code[]={0,-40,-80,-120,-160,-200,-240,-280};//每个相隔1/8亮度 SIGNAL(SIG_OVERFLOW0)//计数器溢出中断 { TCNT0=16; timecount++; timecount2++; if(timecount2>=100)//每隔3毫秒更新下数组,即改变PWM的占空比 { i++; for(m=0;m<=7;m++)//依次每个数做处理(加或减) { if(adddir_FLAG==1)//正方向加 { LED_code[m]+=1; } if(adddir_FLAG==0)//反方向减 { LED_code[m]-=1; } } if((i>=520)&&(adddir_FLAG==1))//加满520次反向 { adddir_FLAG=0; i=1; } if((i>=520)&&(adddir_FLAG==0))//减满520次反向 { adddir_FLAG=1; i=1; } timecount2=0; } if(timecount>=240)//PWM的周期 { PORTD=0x00;//周期开始开 timecount=0; } for(j=0;j<=7;j++)//每次读取比较对应的占空比 { if(LED_code[j]<=0)//当为负数时,作为0处理 { PORTD|=(1<0)//当大于零时,若相应的计数达到(即达到了占空比),则关 { if(LED_code[j]<=timecount) { PORTD|=(1< #include volatile signed int timecount=0; volatile signed long timecount2=0; volatile signed long timecount0=0; volatile signed char state=1; unsigned int i=0; unsigned int j=0; unsigned int m=0; volatile unsigned char adddir_FLAG=1; const int LED0_code[]={160,0,160,0,160,0,160,0}; const int LED_code[]={280,240,200,160,120,80,40,0}; volatile int LED1_code[]={0,-40,-80,-120,-160,-200,-240,-280};//每个相隔1/8亮度 SIGNAL(SIG_OVERFLOW0)//计数器溢出中断 { TCNT0=16; timecount++; timecount0++; timecount2++; if(timecount0>=99999)//切换状态,并且重新初始化 { state++; if(state>=5) { state=1; } i=0; j=0; m=0; timecount=0; timecount0=0; timecount2=0; adddir_FLAG=1; for(j=0;j<=7;j++) { LED1_code[j]=0-(j*40); } } switch (state) { case 1: if(timecount>=320)//PWM周期 { PORTD|=0xff;//关 timecount=0; } for(j=0;j<=7;j++) { if(LED0_code[j]<=timecount)//读取占空比值 { PORTD&=~(1<=320)//PWM周期 { PORTD|=0xff; timecount=0; } for(j=0;j<=7;j++)//依次比较读取 { if(LED_code[j]<=timecount) { PORTD&=~(1<=2000)//每隔60毫秒更新下数组,即改变PWM的占空比 { if(i<=0){adddir_FLAG=1;} if(i>=48){adddir_FLAG=0;} if(adddir_FLAG==1){i++;} if(adddir_FLAG==0){i--;} timecount2=0; } if(timecount>=48)//PWM的周期 { PORTD=0x00;//周期初始开 timecount=0; } if(timecount>=i)//达到对应调节到的占空比时 { PORTD=0xff;//关 } break; case 4: if(timecount2>=100)//每隔3毫秒更新下数组,即改变PWM的占空比 { i++; for(m=0;m<=7;m++)//依次每个数做处理(加或减) { if(adddir_FLAG==1)//正方向加 { LED1_code[m]+=1; } if(adddir_FLAG==0)//反方向减 { LED1_code[m]-=1; } } if((i>=520)&&(adddir_FLAG==1))//加满520次反向 { adddir_FLAG=0; i=1; } if((i>=520)&&(adddir_FLAG==0))//减满520次反向 { adddir_FLAG=1; i=1; } timecount2=0; } if(timecount>=240)//PWM的周期 { PORTD=0x00;//周期开始开LED timecount=0; } for(j=0;j<=7;j++)//每次读取比较对应的占空比 { if(LED1_code[j]<=0)//当为负数时,作为0处理 { PORTD|=(1<0)//当大于零时,若相应的计数达到(即达到了占空比),则关 { if(LED1_code[j]<=timecount) { PORTD|=(1<
本文档为【PWM控制LED亮度】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_777464
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:9
分类:互联网
上传时间:2011-12-09
浏览量:54