用52单片机,过零检测,pwm,双向可控硅,一个按键控制增加亮度,一个按键控制减少亮度,写一个调光程序 点击复制后,将打开C知道体验页
时间: 2023-06-18 09:08:01 浏览: 82
基于51单片机的调光系统和亮度比例显示系统原理图和PCB
很高兴为你提供帮助,以下是简单的调光程序:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key_add=P3^2; //增加亮度按键
sbit key_sub=P3^3; //降低亮度按键
sbit led=P2^0; //LED灯控制引脚
sbit thyristor=P2^1; //双向可控硅控制引脚
uchar pwm=50; //初始占空比为50%
uint count=0; //计数器
void delay(uint i) //延时函数
{
while(i--);
}
void init() //初始化函数
{
TMOD=0x01; //定时器0模式1
TH0=(65536-50000)/256; //50ms定时
TL0=(65536-50000)%256;
TR0=1; //开启定时器0
ET0=1; //开启定时器0中断
EA=1; //开启总中断
}
void main()
{
init(); //初始化
while(1)
{
if(key_add==0) //按下增加亮度按键
{
delay(1000); //延时去抖动
if(key_add==0) //再次检测按键是否按下
{
if(pwm<100) pwm+=10; //占空比增加10%
}
while(!key_add); //等待按键释放
}
if(key_sub==0) //按下降低亮度按键
{
delay(1000); //延时去抖动
if(key_sub==0) //再次检测按键是否按下
{
if(pwm>0) pwm-=10; //占空比减少10%
}
while(!key_sub); //等待按键释放
}
}
}
void timer0() interrupt 1 //定时器0中断函数
{
count++; //计数器加1
if(count>pwm) //占空比控制
{
led=0; //LED灯关闭
thyristor=1; //双向可控硅不导通
}
else
{
led=1; //LED灯点亮
thyristor=0; //双向可控硅导通
}
if(count>=100) count=0; //计数器清零
}
```
程序中,使用定时器0的中断来控制PWM信号的生成,其中pwm变量控制占空比大小,通过增加亮度和降低亮度按键改变pwm的值,从而实现调光功能。双向可控硅控制LED灯的亮度,通过控制LED灯的亮度来达到调光的效果。
阅读全文