基于51单片机的可控硅调压调光程序-带过零检测

基于51单片机的可控硅调压调光程序-带过零检测


#include<reg52.h>

#include<intrins.h>
sbitledRS=P1^0;
sbitledRW=P1^1;
sbit ledE=P1^2;
sbit keyjia=P2^7;
sbitkeyjian=P2^6;
sbitcontrolLD=P1^3;
bitflag1=1;
bitflag2=1;
unsigned
char code table[]=" guang liangdu
";
unsignedchar code table1[]=" 00 ";
intnum,flag=0,count=0;
charliangdu=3;
voiddelaykt(void) //导通延时
{
unsigned char a;
for(a=2;a>0;a--);
}
voiddelay(int z) //可调延时
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); 
}
void
delay9ms(void) //误差
-0.43402777778us 延时9ms
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=224;b>0;b--)
for(a=17;a>0;a--);
}
voidwrite_com(unsigned com) //写指令
{
ledRS=0;
P0=com;
delay(10);
ledE=1;
delay(20);
ledE=0; 
}
voidwrite_date(unsigned date) //写数据
{
ledRS=1;
P0=date;
delay(10);
ledE=1;
delay(20);
ledE=0;
}
voidwrite_liangdu(unsigned liangdu) //写亮度
{
int shi,ge;
shi=(liangdu-3)/10;
ge=(liangdu-3)%10;
write_com(0x80+0x40+7);
write_date(0x30+shi);
write_date(0x30+ge); 
}
voidinit() //初始化

controlLD=1; //触发控制初始化
ledRW=0; //液晶初始化
ledE=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delaykt();
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delaykt();
}
EA=1; //外部中断设置
EX0=1;
IT0=1;
}
voidkeyscanf() //键盘判断
{
if(keyjia==0) //加键判断
{
delaykt();
if(keyjia==0)
{
if(flag1==1)
{
flag1=0;
liangdu++;
if(liangdu==10)
liangdu=3;
write_com(0x80+0x40+7);
write_liangdu(liangdu);

}
}
else if(keyjia!=0)
{
delaykt();
if(keyjia!=0)
flag1=1;
}
if(keyjian==0) //减键判断
{
delaykt();
if(keyjian==0)
{
if(flag2==1)
{
flag2=0; 
liangdu--;
if(liangdu==2)
liangdu=9;
write_com(0x80+0x40+7);
write_liangdu(liangdu); 

}
}
else if(keyjian!=0)
{
delaykt();
if(keyjian!=0)
flag2=1;

}
voidzhongduan() interrupt 0 //外部中断
{
flag=1; 
}
voidtimepd() //同步标志判断与定时器设置
{
if(flag==1)
{
flag=0;
TMOD=0x01;
TH0=(65536-1000*(10-liangdu))/256;
TL0=(65536-1000*(10-liangdu))%256;
ET0=1;
TR0=1;

}
voidtime0() interrupt 1 //定时中断程序
{
count=1; 
}
voidchufa() //MOS3020触发
{
if(count==1)
{
count=0;
controlLD=0;
delaykt();
controlLD=1;
delay9ms();
controlLD=0;
delaykt();
controlLD=1;

}
voidmain()

init();
while(1)
{
keyscanf();
timepd();
chufa(); 
}
}
### 回答1: 过零检测控制是一种控制可控硅(也称为二极管可控硅,或者简称为SCR)的方法。可控硅是一种半导体器件,常用于控制交流电源的开关。过零检测控制可控硅的主要目的是确保在进行控制的转换时,电流为零。这样可以避免电流突变造成设备损坏。 编写可控硅的C语言程序可以实现过零检测控制。首先,我们需要连接一个零点检测器到电源电路上,以检测交流电流的零点。这个零点检测器可以是一个传感器,能够感知电流的变化并发送信号给C语言程序。 在C语言程序中,我们可以使用定时器来定期地检查零点检测器的信号。当检测到电流为零时,通过控制可控硅的触发器引脚,发送一个触发脉冲来控制可控硅的导通或者截止。 例如,我们可以将可控硅的触发脉冲输出连接到一个脉宽调制器(PWM)的输入引脚上。我们可以通过C语言程序控制脉宽调制器的占空比,从而控制可控硅的导通时间。 通过这种方式,我们可以实现对可控硅的控制,确保电流在交流波形的零点切换,并避免过大的电流突变。这对于一些需要精确控制电流的应用非常重要,比如电动机控制、照明系统以及电力电子设备。 要编写这样一个C语言程序,我们需要了解C语言的基本语法和电子电路的原理。我们还需要熟悉嵌入式系统的开发,以便将C语言程序烧录到适当的嵌入式硬件上并连接到电源电路中。 总之,过零检测控制可控硅的C语言程序可以实现精确的电流控制,并确保在电流切换时避免损坏设备。这对于电子电路的设计和应用非常重要,可以提高设备的稳定性和可靠性。 ### 回答2: 过零检测控制可控硅是一种常见的电力电子应用技术,用于控制交流电源对负载的供电时间,以实现电压和功率的调节。编写C语言程序来实现过零检测控制可控硅,需要以下步骤: 首先,需要使用C语言编写的函数来进行过零检测过零检测的目的是在交流电源的波形中找到电压为零的时刻点。可以通过对电压波形进行采样,并与零进行比较,从而确定交流电源的过零点。可以使用C语言中的ADC(模拟-数值转换)进行采样,并使用比较运算符对采样值与零进行比较。 接下来,需要使用C语言编写的函数来控制可控硅可控硅是一种电子开关器件,在特定的控制信号下可以实现电流的开关控制。通过C语言程序,可以生成控制信号,并将其传输给可控硅,以实现对电源的开关控制。可以使用C语言中的GPIO(通用输入输出)来控制可控硅。 在程序中,需要结合过零检测可控硅控制的函数,通过适当的算法和逻辑进行集成,以实现过零检测控制可控硅的功能。程序应该包括对交流电源波形的持续监测,并在过零点时发送控制信号给可控硅,以实现开关控制。 最后,程序可能需要添加其他功能,例如错误处理、保护机制等。这些功能可以通过C语言的异常处理和逻辑判断语句来实现。 总的来说,通过C语言编写过零检测控制可控硅程序,可以实现对交流电源的精确控制。这样的程序可应用于电力、工业自动化等领域,实现对电压和功率的调节和控制。 ### 回答3: 过零检测控制可控硅是一种常见的电力电子设备控制技术,常用于交流电电路的开关控制。它可以实现对可控硅的触发时机进行精确控制,从而实现电力系统的稳定运行。在C语言程序中,我们可以通过以下步骤来实现过零检测控制可控硅: 1. 配置IO口:首先,我们需要对使用的IO口进行配置,以确保正确的输入输出控制。这可以通过编写相关的配置函数或使用特定的库函数来实现。 2. 过零检测过零检测是通过检测交流电压波形的上升沿和下降沿来确定过零点的位置。我们可以通过采样电压波形,使用定时器或外部中断等方式来检测过零点,并记录过零点的时间。 3. 触发控制:一旦过零点被检测到,我们就可以根据系统需求来确定触发可控硅的时机。通常情况下,触发时机是根据相位角来计算的,可以根据过零点的时间和相位差来计算出触发时刻。 4. 输出控制信号:最后,我们将计算得到的触发时刻输出到对应的IO口,通过改变IO口的电平状态来触发可控硅。这样,可控硅就可以根据所触发信号的时机进行开关控制。 总的来说,过零检测控制可控硅的C语言程序主要包括IO口配置、过零检测、触发控制和输出控制信号四个步骤。通过这些步骤的实现,我们可以有效地控制可控硅的触发时机,实现对电力电子系统的稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值