请教一下这个控制LED灯亮度的程序

请教一下这个控制LED灯亮度的程序,第1张

第一:--d 减号在前表示先自减,后赋值。把d的值减一后与0比较,不为0执行循环体。

第二:不会,一般来说字符型(1字节)比整型(2字节)占用空间少一个字节。用作延时函数没什么区别,但要注意如果反过来的话,数据大于255会出错。

常识:延时函数往往循环次数比较多,建议用整型变量。

第三:0x01;不管什么类型(整型,字符型),在存储器中都是二进制形式存储的。也就是a=1了。

第四:不太明白你问的意思。0x是前缀表示16进制。也可以a=0;这里就是十进制了。

完全可以,不过while(d--)是先判断d是否等于0,然后d减一。也就是d相同情况下(当然要大于0),while(d--)比while(--d)多循环一次。

咱空比调节. 首先确定你的控制周期.比如1s,按照10级别可调,分为1-10 .1级的意思是

亮100ms 暗900ms,(1s也就是1000ms),也就是占空比为10%,

2级,20%,亮200ms,暗800ms,

......

同理9级, 亮900ms,暗100ms

10级,亮1000ms,暗0ms

写出程序很简单,

点亮程序

while(1)

{

LED = ON

_delay_ms( ON_ms)

LED = OFF

_delay_ms(OFF_MS)

}

设置程序

#define ADD 0

#define DEC 1

void tune_led( u08 add_or_dec )

{

if( add_or_dec == ADD )

{

ON_MS + = 100//每加一次递进100ms,最高1000ms

if( ON_MS >=1000)

ON_MS =1000

OFF_MS = 1000- ON_MS

}

else

{

if( ON_MS >=100 )

{

ON_MS = ON_MS -100

}

OFF_MS =1000-ON_MS

}

,需要调节时,可以把此函数在按键处理或其他事件处理中调用.

1000ms的周期只是一种举例,根据实际需要可以调节 根据显示的现实性,可以改到50-20ms左右,

防止产生闪烁,

如果改用单片机的硬件pwm 那就更加简单了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12037231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存