单片机8051按键控制LED灯的亮度,软件设计问题
我是新手,现在先将要求叙述一下,可能有不清楚的地方大家可以回复继续问,比如说一个8051控制器控制LED灯的亮度调节,有两个要求:
假定设计LED灯亮度分为0.1.2.3.4.5六档,其中0代表LED灯关闭。
1,控制器上按键包括灯的亮度调节的+,-两个按钮,按其中的按钮+或者-按键,执行发送一条亮度消息,在LED灯当前亮度基础上+或者-一档亮度。
2,控制器接收一条亮度调节的消息,消息中包括要调节到的LED灯的亮度值,比如原本LED灯处于2档亮度,接受将亮度调节为最亮5档的消息,然后发送一条亮度消息,将其控制的LED灯调节为要求亮度。
3,亮度改变要求渐变。
现在硬件导上单片机通过其中的一个引脚接IDAC然后接LED灯组。控制LED的亮度。
我先问一下,这个单片机软件框架应该怎么写,亮度消息怎么定义,还有怎么获取LED灯组目前的亮度等级,求大神帮忙把关键代码给写一下,我参考学习用,谢谢大神了 我新手,可能问题有点小白,大神勿怪 ,有什么看不懂的的回复交流
[解决办法]
框架无非就是
[code=C/C++][/code]main(){
init();
while(1)
{}}
led亮度等级肯定是保存在你定义的变量里
[解决办法]
main(){init();while(1){}}
[解决办法]
void main(void){ unsigned char key;//按键键值 unsigned char duty1,duty2,duty0; WDTCN = 0xde; // 关闭看门狗 WDTCN = 0xad; Sysclk_Init(); // 配置系统时钟 SysPort_Init(); // 端口配置 ALARM_Ctrl(true); LED1_PutVal(true); LED2_PutVal(true); LED3_PutVal(true); Delay_ms(500); // 延时500ms LCD_Init(); LCD_ShowString(0,1,WEB); LCD_ShowString(1,0,TEL); LED1_PutVal(false); LED2_PutVal(false); LED3_PutVal(false); ALARM_Ctrl(false); Delay_ms(1000); // 延时1s// LCD_ClearScreen(); PCA_Init(); // PCA0初始化 EA=1; // 允许全局中断 duty0 = 0; duty1 = 0; duty2 = 0; PCA_PwmDuty(0,duty0); PCA_PwmDuty(1,duty1); PCA_PwmDuty(2,duty2); while(1) { key = Key_Read(); switch (key) //判断按键值 { case KEY_1: duty0 += 10; if (duty0>100) duty0 = 100; duty1 += 10; if (duty1>100) duty1 = 100; duty2 += 10; if (duty2>100) duty2 = 100; PCA_PwmDuty(0,duty0); PCA_PwmDuty(1,duty1); PCA_PwmDuty(2,duty2); LED1_PutVal(true); Delay_ms(100); // 延时100毫秒 LED1_PutVal(false); break; case KEY_2: if (duty0>=10) duty0 -= 10; else duty0 = 0; if (duty1>=10) duty1 -= 10; else duty1 = 0; if (duty2>=10) duty2 -= 10; else duty2 = 0; PCA_PwmDuty(0,duty0); PCA_PwmDuty(1,duty1); PCA_PwmDuty(2,duty2); LED2_PutVal(true); Delay_ms(100); // 延时100毫秒 LED2_PutVal(false); break; case KEY_3: duty0 = 0; duty1 = 0; duty2 = 0; PCA_PwmDuty(0,duty0); PCA_PwmDuty(1,duty1); PCA_PwmDuty(2,duty2); LED3_PutVal(true); Delay_ms(100); // 延时100毫秒 LED3_PutVal(false); break; default: break; } }}
[解决办法]
控制LED亮度,也就是控制亮、灭的时间比,在一定范围内人眼看不出闪烁,但还是能感觉到亮度的变化,这就是PWM控制LED亮度的原理。