标题:
单片机控制光耦+可控硅调节亮度程序+过零检测触发电路图
[打印本页]
作者:
1256818476
时间:
2019-1-21 17:25
标题:
单片机控制光耦+可控硅调节亮度程序+过零检测触发电路图
用光耦实现过零检测触发可控硅电路原理图如下:
微信截图_20190121172334.png
(170.73 KB, 下载次数: 150)
下载附件
原理图
2019-1-21 17:24 上传
单片机可控调节程序:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit SW1=P2^0;//用于调高灯的亮度
sbit SW2=P2^1;//用于调低灯的亮度
sbit CF=P2^2;//用于触发可控硅
sbit SW3=P2^3;//用于控制灯的亮灭
void kdelay();
void maichong();
delay500us(uint z);
void delay10us();
void liangmie();
uint x,y,z,k,i,j;
void main()
{
IT0=1;//设定外部中断 0 为下降沿触发方式
EX0=1;//开外部中断 0
P2=0xff;
z=10;
j=0;
while(1)
{
if(SW1==0)
{
kdelay(); //软件 2ms 延时防抖
if(SW1==0)
{
z--;
if(z==0){z=19;}//灯达到最亮以后继续按下 SW2,灯会变到最暗
}
while(!SW1);//等待按键弹起
}
if(SW2==0)
{
kdelay();
if(SW2==0)
{
z++;
if(z==20){z=0;}//灯达到最暗以后继续按下 SW1,灯会变到最亮
}
while(!SW2);
}
liangmie();
if(j==0)
{
EA=1; //开总中断
}
else
{
EA=0; //关总中断
}
}
}
/************2ms 按键防抖动延时函数**********/
void kdelay()
{
for(i=0;i<200;i++)
{
delay10us(); //调用 200 次 10us 约为 2ms
}
}
/*将半周期 0.01 秒平均分成 20 等分,每等分为 0.5 毫秒,即 500us*/
/************0.5ms 倍数的子函数************/
delay500us(uint z)
{
uchar x,y;
for(x=0;x<z;x++)
{
for(y=0;y<50;y++)
{
delay10us();//调用 50 次 10us 约为 502us
}
}
}
/*************脉冲函数*****************/
void maichong()
{
CF=0;
for(k=0;k<10;k++)
{
delay10us();//调用 10 次 10us 约为 102us
}
CF=1;
}
/*************10us 延时函数**************/
void delay10us()
{
_nop_(); _nop_();_nop_();
_nop_(); _nop_();_nop_();
}
/************灯的亮灭控制函数***********/
void liangmie()
{
if(SW3==0)
{
kdelay();
if(SW3==0)
{
j++;
if(j==2){j=0;}
}
while(!SW1);//等待按键弹起
}
}
/**********外部中断 0 函数**********/
void Int0(void) interrupt 0
{
delay500us(z);//控制角的大小由 z 决定
maichong();//发脉冲
}
复制代码
作者:
电控1999
时间:
2019-5-21 17:02
谢谢大神的分享 好资料,51黑有你更精彩!!!
作者:
shideli
时间:
2020-2-10 15:51
谢谢分享
作者:
zhangleixbyl
时间:
2021-3-15 04:17
成功了吗?
作者:
TSTCQH
时间:
2022-2-23 19:09
要是有原文件就更好了
作者:
阿飞7812
时间:
2023-2-10 09:08
楼主打个包发一下哦 谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1