完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
22个回答
|
|
做一个计数变量,用来确定该灭哪一路,然后比较重复的做法就是在
void jmie0 () { switch(计数变量) case 0: for (pwm=time;pwm>0;pwm--) { P00=1; delay(pwm); P00=0; delay(time-pwm); } break; ..... case 6: for (pwm=time;pwm>0;pwm--) { P05=1; delay(pwm); P05=0; delay(time-pwm); } break; ..... } 中间根据不同的计数变量值更改引脚
最佳答案
|
|
|
|
渐灭的意思是一个一个灭还是每个慢慢变暗?况且你要控制亮度的话要能要用到PWM输出,普通51上没有这个,而且普通51直接驱动LED,设计成灌电流要有点勉强啊,至少还需要一个达林顿管。
|
|
|
|
fight281 发表于 2018-1-10 11:36 慢慢变暗,现在用for循环做出了慢慢变暗的效果,用的STC11F08XE,而且后边加的有2803 |
|
|
|
这个片子有3路定时器 你用2路模拟PWM,随便用1路做定时效果。按键短按控制亮度,长按调定时时间。 |
|
|
|
一步步来,P0P1口到时间灭一路且效果是渐灭,这个该怎么写下。渐灭我用的for循环,但只能赋值一个口。定时时间到灭是做了个表格,放在一起怎么写下 |
|
|
|
用一个定时器做模拟的PWM,在这个定时器里控制该哪一路LED动作,按键用一个引脚就可以了,最好有两个LED用来指示当前处于哪一种功能设定,通过记录按键按下的次数来判断选择哪个功能。整体亮度看是指什么了,如果是16路LED的亮度的话,那也是由模拟PWM来控制,这样就需要区别控制渐灭LED和常亮LED了。
|
|
|
|
本帖最后由 wjz01002 于 2018-1-10 12:54 编辑
人中狼 发表于 2018-1-10 12:34 不太明白,void jmie0 () { for (pwm=time;pwm>0;pwm--) { P05=1; delay(pwm); P05=0; delay(time-pwm); } }这是我某路渐灭程序 if (p==20) { p=0; sec++; if (sec==2)//30秒定时到 { sec=0; table++; if (table>0&&table<9) { P1=0xff; P0=play[table]; } if (table>=9&&table<=16) { P0=0X00; P1=play[table]; } if (table==16) { table=0; } } }这是IO口到时灭一路。怎么个弄法啊 |
|
|
|
是的。这样可以的。 看我的帖子,我有新问题请教。 |
|
|
|
|
|
|
|
谢谢大牛。还有一步就是按键可控制整体(16路)亮度共三档(高中低)现在共有3种时间5S、10S、30S每种时间有高中低三种亮度,也就是共9个模式。 void init() { TMOD=0x01; // TH0=(65536-50000)/256; // TL0=(65536-50000)%256; ET0=1; // TR0=1; // } void time0() interrupt 1 // { TH0=(65536-50000)/256;//50ms TL0=(65536-50000)%256; p++; } 这个是定时的基准时间50MS void bight() { for (pwm=time;pwm>0;pwm--) { P0=P1=0XFF; delay(6); P0=P1=0X00; delay(4); } } void light() { for (pwm=time;pwm>0;pwm--) { P0=P1=0XFF; delay(1); P0=P1=0X00; delay(9); } }这个使用for循环写了俩亮度,中和低 我用同样的方法switch 一个变量来计按键次数来进入相应的时间控制程序,但整体亮度就没反应,这个该怎么组下呢? |
|
|
|
要看你整合后的程序是怎么样的,整体亮度的调节应该和时间控制部分都在一个switch里
|
|
|
|
void keyscan() { if (k1==0) Delayms(20); if (k1==0) { while (!k1); cs++; if (cs==4) cs=1; } switch (cs) { case 1: //hight();//高亮状态,进入定时并显示 led_3 (); break; case 2: //bight();//中亮 led_3 (); break; case 3: //light();//低亮 led_3 (); break; case 4:hight();break; //静止状态 case 5:bight();break; case 6:light();break; case 7: //定时10s led_2(); break; case 8: led_2(); break; case 9: led_2(); break; case 10: //定时30S led_1(); break; case 11: led_1(); break; case 12: led_1(); break; } } 最终main里只有 keyscan()扫描程序。按键后进入switch 亮度和定时显示,只能进一个。。。 |
|
|
|
void keyscan() { if (k1==0) Delayms(20); if (k1==0) { while (!k1); cs++; if (cs==4) cs=1; } switch (cs) { case 1: //hight();//高亮状态,进入定时并显示状态 led_3 (); break; case 2: //bight();//中亮 led_3 (); break; case 3: //light();//低亮 led_3 (); break; case 4:hight();break; //¾²Ö¹×´Ì¬ case 5:bight();break; case 6:light();break; case 7: // led_2(); break; case 8: led_2(); break; case 9: led_2(); break; case 10: //¶¨Ê±30Ãë led_1(); break; case 11: led_1(); break; case 12: led_1(); break; } } 这是最终while(1)循环的按键检测程序,,亮度程序和定时显示程序只能进一个,。。。额.. |
|
|
|
void keyscan() { if (k1==0) Delayms(20); if (k1==0) { while (!k1); cs++; if (cs==4) cs=1; } switch (cs) { case 1: //hight();//高亮状态,进入定时并显示状态 led_3 (); break; case 2: //bight();//中亮 led_3 (); break; case 3: //light();//低亮 led_3 (); break; case 4:hight();break; //¾²Ö¹×´Ì¬ case 5:bight();break; case 6:light();break; case 7: // led_2(); break; case 8: led_2(); break; case 9: led_2(); break; case 10: //¶¨Ê±30Ãë led_1(); break; case 11: led_1(); break; case 12: led_1(); break; } } 这是最终while(1)循环的按键检测程序,,亮度程序和定时显示程序只能进一个,。。。额.. |
|
|
|
void keyscan() { if (k1==0) Delayms(20); if (k1==0) { while (!k1); cs++; if (cs==4) cs=1; } switch (cs) { case 1: //hight();//亮度最亮,进入计时并显示 led_3 (); break; case 2: //bight();//中亮 led_3 (); break; case 3: //light();//低亮 led_3 (); break; case 4:hight();break; //¾²Ö¹×´Ì¬ case 5:bight();break; case 6:light();break; case 7: //¶¨Ê±°ëСʱ led_2(); break; case 8: led_2(); break; case 9: led_2(); break; case 10: //¶¨Ê±30Ãë led_1(); break; case 11: led_1(); break; case 12: led_1(); break; } } 亮度调节和时间控制在switch里但是只能进一个程序,,,哪个在前进哪个 |
|
|
|
|
|
|
|
4只是用于前边测试用,只要一组成了,其他的肯定就好了嘛,就case=1之后,要么进调亮程序,要么进计时程序。。不能一起么这个? |
|
|
|
没明白,switch一次只能进一个case,在switch里最好再加一个default: break;
另外 if (k1==0) { Delayms(20); if (k1==0) 这里差一对大括号,switch也在这个括号内,也就是只有当按键有效时,才会执行switch |
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12039 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 08:43 , Processed in 0.830960 second(s), Total 80, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号