下面分享一个单片机无级调光电路给大家。这个电路是在网上看到的,感觉简单适用,只是爱好者在制作过程中,一定注意安全。这个单片机调光电路单片机采用的是STC12C2052AD,晶振采用11.0592M。程序附后,有需要的自己下载。单片机部分除了使用STC12C2052AD,也可以使用AT89系列单片机。程序适合单路可控硅控制,因为程序是利用外部中断来控制定时器参数来完成过零延迟触发可控硅的方式来调功的,如果是一片单片机控制多路可控硅,就必须改一种方式,定时器必须常开而且参数定为10MS(一个过零周期),外部中断用来给定时器做同步调整(外部中断时给定时器置入溢出值),各路可控硅调功参数可以通过预设值和查表方式获得相应的延迟触发时间点。
image.png
实物图

image.png
电路图
/*
  •         单片机白炽灯调光程序 (晶振:11.0592MHz)
  • */
  • #include "reg52.h"
  • sbit lamp_pwm=P1^0;//可控硅位
  • sbit key0=P1^1;//降低亮度按键位
  • sbit key1=P1^2;//增加亮度按键位
  • unsigned int inc;
  • void INT0s()interrupt 0        using 0//INT0外部中断,过零检测触发
  • {
  •         TR0=0;
  •         if(!key0)//降低亮度
  •         {
  •                 inc+=50;
  •                 if(inc>=8000)inc=8000;
  •         }
  •         if(!key1)//增加亮度
  •         {
  •                 inc-=50;
  •                 if(inc<=800)inc=800;
  •         }
  •         TH0=(65536-inc)/256;
  •         TL0=(65536-inc)%256;
  •         TR0=1;
  • }
  • void timer1()interrupt 1 using 0//可控硅触发中断
  • {
  •         unsigned char i;
  •         lamp_pwm=0;//灯亮
  •         for(i=0;i<2;i++);//延时2us
  •         lamp_pwm=1;//灯灭
  • }
  • /************STC不断电下载用******************/
  • sfr ISP_DOWNS=0xe7;//ISP软复位地址
  • sbit ISP_SW=P3^0;//串口数据接收
  • void DebugDownISP()//软复位
  • {
  •         if(!ISP_SW)ISP_DOWNS=0x60;      
  • }
  • /********************************************/
  • void main()
  • {
  •         TMOD|=0x01;
  •         IT0=1;//INT0下降沿触发
  •         EX0=1;//外部中断允许
  •         ET0=1;
  •         EA=1;//开总中断
  •         inc=8000;
  •         while(1)
  •         {
  •                 DebugDownISP();
  •         }
  • }
  • 复制代码