基于ATMEGA328P用3个开关控制3个灯泡,灯泡只需要亮3秒,在每一个灯泡加一个提示灯,不按下开关时候提示灯是亮的,按下去后提示灯是不亮的,加一个总开关,可以把所有的灯打开
时间: 2024-05-12 12:20:05 浏览: 174
传感技术中的用一只传感器和一个微控制器采集图像
或关闭。
以下是基于ATMEGA328P的程序代码:
```
#include <avr/io.h>
#include <avr/delay.h>
#define LED1_pin PB0
#define LED2_pin PB1
#define LED3_pin PB2
#define SW1_pin PD2
#define SW2_pin PD3
#define SW3_pin PD4
#define ALL_pin PD5
#define LED_ON LOW
#define LED_OFF HIGH
void setup() {
pinMode(LED1_pin, OUTPUT);
pinMode(LED2_pin, OUTPUT);
pinMode(LED3_pin, OUTPUT);
pinMode(SW1_pin, INPUT_PULLUP);
pinMode(SW2_pin, INPUT_PULLUP);
pinMode(SW3_pin, INPUT_PULLUP);
pinMode(ALL_pin, INPUT_PULLUP);
}
void loop() {
if (digitalRead(ALL_pin) == LOW) {
digitalWrite(LED1_pin, LED_ON);
digitalWrite(LED2_pin, LED_ON);
digitalWrite(LED3_pin, LED_ON);
while (digitalRead(ALL_pin) == LOW);
}
if (digitalRead(SW1_pin) == LOW) {
digitalWrite(LED1_pin, LED_ON);
digitalWrite(LED2_pin, LED_OFF);
digitalWrite(LED3_pin, LED_OFF);
digitalWrite(LED_BUILTIN, LED_OFF);
_delay_ms(3000);
digitalWrite(LED1_pin, LED_OFF);
digitalWrite(LED_BUILTIN, LED_ON);
}
if (digitalRead(SW2_pin) == LOW) {
digitalWrite(LED1_pin, LED_OFF);
digitalWrite(LED2_pin, LED_ON);
digitalWrite(LED3_pin, LED_OFF);
digitalWrite(LED_BUILTIN, LED_OFF);
_delay_ms(3000);
digitalWrite(LED2_pin, LED_OFF);
digitalWrite(LED_BUILTIN, LED_ON);
}
if (digitalRead(SW3_pin) == LOW) {
digitalWrite(LED1_pin, LED_OFF);
digitalWrite(LED2_pin, LED_OFF);
digitalWrite(LED3_pin, LED_ON);
digitalWrite(LED_BUILTIN, LED_OFF);
_delay_ms(3000);
digitalWrite(LED3_pin, LED_OFF);
digitalWrite(LED_BUILTIN, LED_ON);
}
}
```
在程序中,我们定义了每个LED和开关的引脚和状态,以及提示灯的状态。在`setup`函数中,我们将LED引脚设置为输出,开关引脚设置为输入,并启用内部上拉电阻。
在`loop`函数中,我们首先检查总开关是否被按下,如果是,则将所有LED灯打开。然后,我们检查每个开关是否被按下,如果是,则将相应的LED灯打开,并关闭其他LED灯。然后等待3秒钟,然后关闭当前LED灯,并打开提示灯。
请注意,我们使用了`_delay_ms`函数来等待3秒钟。这个函数会让程序暂停执行,直到指定的时间(以毫秒为单位)过去为止。在这个时间内,程序不会执行任何其他操作,因此LED灯和提示灯会保持静止。
这个程序可以帮助我们控制3个灯泡和提示灯,并且可以用一个总开关来打开或关闭所有灯泡。
阅读全文