Вс ноя 06, 2022 19:10:58
#define check_key_1() (!(check_bit (KEY_1_PIN, KEY_1))) // Low level.
Вс ноя 06, 2022 19:14:52
Вс ноя 06, 2022 19:18:11
Вс ноя 06, 2022 19:23:13
Вс ноя 06, 2022 19:24:40
Вс ноя 06, 2022 19:30:03
Вс ноя 06, 2022 19:38:35
Вс ноя 06, 2022 19:39:20
0 0 0 0 0 1 0 1 --- это состояние входов в порту, на втором нажата кнопа и он =0
0 0 0 0 0 1 1 1 --- это маска 0x07
0 0 0 0 0 0 1 0 --- это результат XOR, переданный в switch
0 0 1 0 0 1 1 1 --- на порту появился лишний 1 при отп.кнопах
0 0 0 0 0 1 1 1 --- это маска 0x07
0 0 1 0 0 0 0 0 --- это результат XOR, переданный в switch, и он ВНЕ диапазона case
0 0 1 0 0 1 0 1 --- на портупоявился лишний 1 и нажата кнопа 2
0 0 0 0 0 1 1 1 --- это маска XOR 0x07
0 0 0 0 0 1 1 1 --- это маска AND 0x07
0 0 0 0 0 0 1 0 --- это финальный результат в допустимом диапазоне case
Вс ноя 06, 2022 19:40:52
Вс ноя 06, 2022 19:43:45
Вс ноя 06, 2022 20:09:44
//========== Inputs ==================
#define Check_Col_1() (!(check_bit (COL_1_PIN, COL_1)))
#define Check_Col_2() (!(check_bit (COL_2_PIN, COL_2)))
#define Check_Col_3() (!(check_bit (COL_3_PIN, COL_3)))
#define Check_Col_4() (!(check_bit (COL_4_PIN, COL_4)))
#define Check_Row_1() (!(check_bit (ROW_1_PIN, ROW_1)))
#define Check_Row_2() (!(check_bit (ROW_2_PIN, ROW_2)))
#define Check_Row_3() (!(check_bit (ROW_3_PIN, ROW_3)))
#define Check_Row_4() (!(check_bit (ROW_4_PIN, ROW_4)))
//==================
//========= Outputs ==================
#define __Col_1_Low() set_bit (COL_1_DDR, COL_1)
#define __Col_2_Low() set_bit (COL_2_DDR, COL_2)
#define __Col_3_Low() set_bit (COL_3_DDR, COL_3)
#define __Col_4_Low() set_bit (COL_4_DDR, COL_4)
#define __Col_1_Z() clr_bit (COL_1_DDR, COL_1)
#define __Col_2_Z() clr_bit (COL_2_DDR, COL_2)
#define __Col_3_Z() clr_bit (COL_3_DDR, COL_3)
#define __Col_4_Z() clr_bit (COL_4_DDR, COL_4)
//----------
#define __Row_1_Low() set_bit (ROW_1_DDR, ROW_1)
#define __Row_2_Low() set_bit (ROW_2_DDR, ROW_2)
#define __Row_3_Low() set_bit (ROW_3_DDR, ROW_3)
#define __Row_4_Low() set_bit (ROW_4_DDR, ROW_4)
#define __Row_1_Z() clr_bit (ROW_1_DDR, ROW_1)
#define __Row_2_Z() clr_bit (ROW_2_DDR, ROW_2)
#define __Row_3_Z() clr_bit (ROW_3_DDR, ROW_3)
#define __Row_4_Z() clr_bit (ROW_4_DDR, ROW_4)
//==================
// Плата управления.
//----------
#define COL_1_DDR DDRC
#define COL_1_PIN PINC
#define COL_1 4
#define COL_1_DDR DDRC
#define COL_1_PIN PINC
#define COL_2 5
#define COL_1_DDR DDRC
#define COL_1_PIN PINC
#define COL_3 6
#define COL_1_DDR DDRC
#define COL_1_PIN PINC
#define COL_4 7
//----------
#define ROW_1_DDR DDRC
#define ROW_1_PIN PINC
#define ROW_1 0
#define ROW_1_DDR DDRC
#define ROW_1_PIN PINC
#define ROW_2 1
#define ROW_1_DDR DDRC
#define ROW_1_PIN PINC
#define ROW_3 2
#define ROW_1_DDR DDRC
#define ROW_1_PIN PINC
#define ROW_4 3
//----------
//==================
void scan_keys (void)
{
if (_kbd_drv != KBD_DRV_INIT)
{
u08 a = 0;
Colon_On ();
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if (Check_Row_1 ())
set_bit (a, 7);
if (Check_Row_2 ())
set_bit (a, 6);
if (Check_Row_3 ())
set_bit (a, 5);
if (Check_Row_4 ())
set_bit (a, 4);
Row_On ();
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if (Check_Col_1 ())
set_bit (a, 3);
if (Check_Col_2 ())
set_bit (a, 2);
if (Check_Col_3 ())
set_bit (a, 1);
if (Check_Col_4 ())
set_bit (a, 0);
keys_curr = a;
}
}
//----------
Вс ноя 06, 2022 20:22:12
Вс ноя 06, 2022 20:27:59
Вс ноя 06, 2022 20:35:37
DDRC |= (1<<0); // Ну здесь наверное надо... Что здесь, скажем, у нас включается красный светодиод (в случае, если у светодиода отрицательная логика включения и мы рулим нижним ключом пина). Или мы напишем, DDRC пин на выход?!
#define __out_1_on() clr_bit(OUT_1_PORT, OUT_1) // |
#define __out_2_on() clr_bit(OUT_2_PORT, OUT_2) // |- Low level
#define __out_3_on() clr_bit(OUT_3_PORT, OUT_3) // |
void out_1_on (void)
{
__out_1_on ();
}
void out_1_on (void)
{
OUT_1_PORT |= (1<<OUT_1);
}
Вс ноя 06, 2022 20:37:39
Вс ноя 06, 2022 20:41:53
Вс ноя 06, 2022 20:46:19
void out_1_on (void)
{
__out_1_on ();
}
Вс ноя 06, 2022 21:09:19
//==================
#define OUT_1_DDR DDRD
#define OUT_1_PORT PORTD
#define OUT_1 0
#define __out_1_on() clr_bit (OUT_1_PORT, OUT_1) // |- Low level // Здесь мы пишем логику включения. Общий плюс или минус.
#define __out_1_off() set_bit (OUT_1_PORT, OUT_1)
//#define __out_1_on() set_bit (OUT_1_PORT, OUT_1) // |- High level
//#define __out_1_off() clr_bit (OUT_1_PORT, OUT_1)
void out_1_on (void);
void out_1_on (void)
{
__out_1_on ();
}
Вс ноя 06, 2022 21:23:11
Вс ноя 06, 2022 21:35:46