一直想打造一个自己的调光台灯,于是动手焊接硬件,编写自己的单片程序,经过调试初步达到要求,没有条件打板,自己用万能板焊接的电路,用来控制12V的长条LED实际效果还行! 主要功能: 1、 关机时短按一次开灯,亮度为关机时的档位,开机时长按三秒关灯,关灯时为渐灭灯的效果; 2、 开机时单按为亮度档位切换,分为1,2,3档; 3、 开机时连按三次按键,可进入当前档位的亮度PWM值设定,此时led闪烁,单击按键为亮度增加,双击按键为亮度减小,长按则快速增加亮度(类似呼吸灯的效果),再次三击为保存PWM值退出亮度设置; 4、 可以分别对三个档位的PWM亮度值进行设定,以适合不同的LED组合; 5、 增加了7805稳压,输入电压为6~30V; 6、 TIP31加散热片后电子负载测试电流800mA有微热,基本可满足常用台灯的要求;
线路图:
测试效果:
如下程序主要体现为PWM调光的部分,按键功能部分请参考我的另一个贴子: PIC单片机单个按键实现多功能:长按、短按次数识别程序
单片机源程序如下:
//------------------------------------------------------------------------------------------------------------ void IRQ_init(void)//定时A和外部中断1初始化 { GIE=0; //关总中断 //RBIE=0; //RB口电平变化中断禁止 //---------CPU频率配置------- //IRCF<2:0>:内部振荡器频率选择位 IRCF2= 1 ; IRCF1= 1 ; IRCF0= 1 ; //000 = 31 kHz //001 = 125 kHz //010 = 250 kHz //011 = 500 kHz //100 = 1 MHz //101 = 2 MHz //110 = 4 MHz (缺省值) //111 = 8 MHz RABPU=0; //AB口上拉起动 WPUA0=1; WPUA1=1; //WPUA4=1; //WPUA5=1; WPUA2=1; //-------定时器time0的配置----- T0IF=0; //清中断标志 T0IE=1; //允许Time0中断 TMR0=61; //256-61 T0CS=0; //Time0选择内部时钟 T0SE=0; //外部电平低至高变化递增 PSA =0; //预分频给Time0 PS2 =1; //111为1:256分频 PS1 =0; PS0 =1; //PS<2:0>:预分频器比选择位 //000 1 : 2 //001 1 : 4 //010 1 : 8 //011 1 : 16 //100 1 : 32 //101 1 : 64 //110 1 : 128 //111 1 : 256 //---------------------------- PEIE=1; //允许外围中断 GIE=1; //开总中断 }
|