自动感光调节LED灯亮度C语言程序,PWM控制LED灯的亮度(C 语言)

控制LED灯的亮度,通过调节电压的方式可以达到,但不理想,而且可调的范围很小,电压稍高,还容易把LED烧毁,唯一可行的方法就是通过PWM(脉冲宽度调节)来控制其亮度.

以下程序是在单片机中控制LED...

//***********************

// PWM控制LED发光亮度

// 作者:周 勇

//***********************

#include sbit speaker=P2^1; //定义喇叭控制引脚

sbit up=P1^5;  //定义UP键

sbit down=P1^6;  //定义DOWN键

static unsigned char pwm;

unsigned char t;

main ()

{

void delay (unsigned char ms);

void beep (void);

void alarm_delay (void);

TMOD=0X21;

ET0=1;

ET1=1;

EA=1;

TH0=0XFC;   //定时器0,定时1ms

TL0=0X18;

TH1=0X9C;   //定时器1,定时0.1ms

TL1=0X00;

TR0=1;

PT1=1;   //定义定时器1优先中断

pwm=0x9c;

while (1)

{

do

{

pwm++;

delay (10);

if (pwm==0xff) beep();

}

while (pwm!=0xff);

do

{

pwm--;

delay (10);

if (pwm==0x01) beep ();

}

while (pwm!=0x01);

}

}

void timer0 (void) interrupt 1   //定义定时器0

{

TH0=0XFC;

TL0=0X18;

TR1=1;

TH1=pwm;

P0=0X00;

}

void timer1(void) interrupt 3  //定义定时器1

{

P0=0XFF;

TR1=0;

}

void delay (unsigned char ms) //延时

{

unsigned char i=120;

while (ms--)

{

while (i--)

{}

}

}

void beep (void) //报警

{

unsigned char b;

for (b=40;b>=2;b--)

{speaker=!speaker;

alarm_delay ();

}

speaker=1;

}

void alarm_delay (void)  //报警延时

{

unsigned char time;

for (time=0;time<120;time++)

{}

}

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一份 C 语言自动感光调节器代码示例,并解释一下其处理过程。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define LIGHT_SENSOR_PIN 0 // 光线传感器引脚 #define LED_PIN 1 // LED 引脚 // 调节照明的函数 void adjust_lighting(int light_value, int threshold) { if (light_value > threshold) { printf("当前光线强度为 %d,超过阈值 %d,需要调节照明\n", light_value, threshold); // 调节 LED 亮度 // 这里使用了虚拟函数,实际情况需要根据硬件进行修改 analogWrite(LED_PIN, 255); } else { printf("当前光线强度为 %d,未超过阈值 %d,无需调节照明\n", light_value, threshold); // 调节 LED 亮度 // 这里使用了虚拟函数,实际情况需要根据硬件进行修改 analogWrite(LED_PIN, 0); } } int main() { int light_value = 0; int threshold = 50; srand(time(NULL)); // 初始化 GPIO 引脚 // 这里使用了虚拟函数,实际情况需要根据硬件进行修改 pinMode(LIGHT_SENSOR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); while (1) { // 读取光线传感器的值 // 这里使用了虚拟函数,实际情况需要根据硬件进行修改 light_value = analogRead(LIGHT_SENSOR_PIN); // 调节照明 adjust_lighting(light_value, threshold); // 等待一段时间后再次检测光线强度 delay(1000); } return 0; } ``` 这段代码实现了一个简单的自动感光调节器,其处理过程如下: 1. 定义光线传感器引脚和 LED 引脚的宏定义,用于初始化 GPIO 引脚。 2. 实现 `adjust_lighting()` 函数,该函数用于根据当前的光线强度和阈值来调节照明。 3. 在 `main()` 函数中,初始化 GPIO 引脚,然后进入一个无限循环,不断地检测光线强度并调节照明。 4. 在循环中,首先读取光线传感器的值,然后调用 `adjust_lighting()` 函数来根据当前的光线强度和阈值来调节照明。 5. 在调节照明后,使用 `delay()` 函数暂停一段时间,等待下一次检测光线强度。循环会一直进行下去,直到程序被手动停止。 需要注意的是,在这段代码中,我们使用了虚拟函数来模拟硬件操作,实际情况需要根据具体硬件进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值