Ср ноя 02, 2022 17:21:40
Ср ноя 02, 2022 19:22:36
Ср ноя 02, 2022 19:39:36
Ср ноя 02, 2022 19:41:00
//==================
#define KEY_1_PIN PIND
#define KEY_1 0
#define KEY_2_PIN PIND
#define KEY_2 1
#define OUT_1_PORT PORTC
#define OUT_1_DDR DDRC
#define OUT_1 0
#define OUT_2_PORT PORTC
#define OUT_2_DDR DDRC
#define OUT_2 1
//==================
//==================
#define set_bit(reg, bit) reg |= (1<<(bit)) // Установка бита.
#define clr_bit(reg, bit) reg &= (~(1<<(bit))) // Сброс бита.
#define switch_bit(reg, bit) reg ^= (1<<(bit)) // Переключение бита.
//----------
#define check_bit(reg, bit) (reg & (1<<bit)) // Проверка бита.
//==================
//==================
#define check_key_1() (!(check_bit (KEY_1_PIN, KEY_1))) // Low level
#define check_key_2() (!(check_bit (KEY_2_PIN, KEY_2))) // Low level
//==================
//==================
#define __out_1_on() clr_bit (OUT_1_PORT, OUT_1) // Low level
#define __out_1_off() set_bit (OUT_1_PORT, OUT_1) // High level
#define __out_2_on() clr_bit (OUT_2_PORT, OUT_2) // Low level
#define __out_2_off() set_bit (OUT_2_PORT, OUT_2) // High level
//==================
//==================
void out_1_on (void);
void out_1_off (void);
void out_2_on (void);
void out_2_off (void);
//==================
//==================
void out_1_on (void)
{
__out_1_on ();
}
void out_1_off (void)
{
__out_1_off ();
}
void out_2_on (void)
{
__out_2_on ();
}
void out_2_off (void)
{
__out_2_off ();
}
//==================
int main(void)
{
// IO init
set_bit (OUT_1_PORT, OUT_1); // Логика управления отрицательная,
set_bit (OUT_2_PORT, OUT_2); // то есть, активный логический 0. Поэтому сразу выставляем 1.
// Важно. Если логика отрицательная, порты выставлять в 1 в первую очередь. Если сначала выставить DDRx, то нижние ключи выдадут кратковременный 0. Поэтому, сначала PORTx. Так верхние ключи сразу выдадут 1.
set_bit (OUT_1_DDR, OUT_1); // Out_1. Выход.
set_bit (OUT_2_DDR, OUT_2); // Out_2. Выход.
while (1)
{
if (check_key_1 ()) // проверка кн. "газ вода
out_1_on (); // вкл. клапан "газ.вода"
else
out_1_off (); // выкл. клапан "газ.вода"
if (check_key_2 ()) // проверка кн. "хол. вода"
out_1_on (); // вкл. клапан "хол.вода"
else
out_1_off (); // выкл. клапан "хол.вода"
}
}
Ср ноя 02, 2022 19:44:52
Ср ноя 02, 2022 21:23:59
Ср ноя 02, 2022 21:51:35
Ср ноя 02, 2022 22:12:19
PORTC^=(1<<PC0); // вкл. клапан "газ.вода" // Инверсия. XOR
}
else
{
PORTC|=(1<<PC0); // выкл. клапан "газ.вода"
Ср ноя 02, 2022 22:35:48
Чт ноя 17, 2022 20:57:25
Чт ноя 17, 2022 21:09:23