基于51单片机的可控硅调压调光程序-带过零检测
时间: 2023-12-24 12:04:08 浏览: 45
这是一个基于51单片机的可控硅调压调光程序,带有过零检测功能,可以实现对交流电灯的亮度调节和电压调节。
程序主要包括以下几个部分:
1. 时钟初始化
2. IO口初始化
3. 定时器初始化
4. 过零检测
5. 调压调光控制
以下是详细的程序说明:
```c
#include <reg52.h>
#define ON 0
#define OFF 1
sbit triac = P1^0; //可控硅控制引脚
unsigned char cnt = 0; //计数器
void init_timer0() //初始化定时器0
{
TMOD &= 0xf0; //清空低四位
TMOD |= 0x01; //设置定时器0为模式1
TH0 = 0xfc; //设置定时器初值
TL0 = 0x18;
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
}
void init_ext0() //初始化外部中断0
{
IT0 = 1; //设置为下降沿触发
EX0 = 1; //打开外部中断0
EA = 1; //打开总中断
}
void main()
{
init_timer0(); //初始化定时器0
init_ext0(); //初始化外部中断0
while(1)
{
if(cnt >= 100) //计数到100时,输出低电平,控制可控硅导通
{
triac = OFF;
}
else
{
triac = ON;
}
}
}
void timer0() interrupt 1 //定时器0中断服务程序
{
TH0 = 0xfc; //重新设置初值
TL0 = 0x18;
cnt++; //计数器加1
if(cnt >= 100) //计数器达到100时清零
{
cnt = 0;
}
}
void ext0() interrupt 0 //外部中断0中断服务程序,过零检测
{
cnt = 0; //计数器清零
}
```
程序在main函数中初始化了定时器0和外部中断0,其中定时器0用于产生PWM波形,外部中断0用于过零检测。在定时器中断服务程序中,每当定时器0计数到100时,计数器cnt就会加1,当cnt达到100时,控制可控硅导通,灯亮度较大;当cnt小于100时,控制可控硅截止,灯亮度较小。
在外部中断0中断服务程序中,每当检测到交流电的过零点时,计数器cnt就会清零,以实现精准的亮度调节和电压调节。
需要注意的是,可控硅控制引脚的电平需要根据具体的可控硅型号和电路连接进行调整。