Ср мар 13, 2019 12:37:56
ага, спасибо, код подправил.Ivanoff-iv писал(а):гдето здесь должна быть инверсия?
ну а я об чем? и я об этой функции:Ivanoff-iv писал(а):я не про майн, я про ф-ю static uint8_t get_button_num(void){ кейс ведь в ней...
static uint8_t get_button_num(void){
uint8_t btn;
while(1){
// опрашиваем кнопки
btn = PIND;
if(btn != 0xFF){
// если хоть какая-то нажата
_delay_ms(15);
// после паузы для защиты от дребезга
if(btn == PIND){
// проверяем, что состояние кнопок не поменялось
// а затем вычисляем номер кнопки
switch(btn){
case 0b11111110: return 1;
case 0b11111101: return 2;
case 0b11111011: return 3;
case 0b11110111: return 4;
case 0b11101111: return 5;
case 0b11011111: return 6;
case 0b10111111: return 7;
case 0b01111111: return 8;
default:
// если нажато несколько кнопок - игнорируем
break;
}
}
}
}
}
Ср мар 13, 2019 13:21:01
ARV писал(а):
- Код:
// светодиоды горят еще 1 секунду, потом гаснут
_delay_ms(1000);
PORTB = 0;
Ср мар 13, 2019 13:39:59
Ср мар 13, 2019 13:49:37
Ср мар 13, 2019 14:47:41
Ср мар 13, 2019 15:13:05
да в объеме писанины. ваш вариант не соответствует ни одному из трех моих принципов.7seg писал(а):в каком месте мой вариант вогнал вас в ступор ?
Ср мар 13, 2019 15:20:04
Ср мар 13, 2019 15:26:10
кстати, разглядел только сейчас: вы запрещаете прерывания на время от 500 до 4000 мс - это круто. за это можно и строгача влепить7seg писал(а):хочу сделать для себя выговор
Ср мар 13, 2019 15:39:06
Ср мар 13, 2019 16:06:57
Ср мар 13, 2019 16:13:08
Ср мар 13, 2019 18:30:44
и вам спасибо но я только учусь. всю жизнь.Ivanoff-iv писал(а):я перенял у Вас некоторые тонкости программирования и считаю Вас хорошим кодером
проблема в том, что вы, решая конкретную задачу, зачем-то думаете о возможных вариантах развития... а я в конкретном случае ни о чем не думал, потому как задача явно "этюдная", полностью выдуманная, без цели и продолжения. и главная цель, что я преследовал - создать код, понятный неучу и не вызывающий у препода подозрений. и, как мне кажется, цели я достиг.Ivanoff-iv писал(а):по другой теме немного в ступоре
вы не поверите, как много можно всунуть "паралельно", если не стараться думать об этом специально! и часто бывает наоборот: когда слишком много думаешь о параллельности, попадаешь в большие затруднения - моя тема о RTOS тому пример. буквально до последних дней я никогда не использовал работу с USART по прерываниям и с кольцевым буфером, все делал на тупейшем поллинге UCSRA - и, представьте себе, при этом и интерфейс не зависал, и что-то там регулировалось "параллельно" и т.п. фишки-пышки были.Ivanoff-iv писал(а):чтото ещё параллельное ему засунуть в мк будет трудно
наоборот, чрезвычайно легко: в функции определения номера кнопки всего лишь в случае, если ни одна кнопка не нажата, сразу уходить в глубокий сон (разумеется, заранее настроив способ пробуждения по прерыванию от порта кнопок или таймера или еще чего-либо).Ivanoff-iv писал(а):и с энергосбережением его подружить тоже трудно...
typedef union{
uint8_t as_byte;
struct{ // структура, под которую не выделено "поля" в union - безымянная или анонимная структура
uint8_t bit0 : 1;
uint8_t bit1 : 1;
uint8_t bit2 : 1;
uint8_t bit3 : 1;
uint8_t bit4 : 1;
uint8_t bit5 : 1;
uint8_t bit6 : 1;
uint8_t bit7 : 1;
}; // вот тут бы идентификатор - а его нет!
} my_type_t;
my_type_t var;
var.bit7 = 1;
var.as_byte++;
Чт мар 14, 2019 04:21:18
ARV писал(а):рекомендую пользоваться такой поддерживаемой этим компилятором фишкой, как "анонимные юнионы/структуры".
Чт мар 14, 2019 07:13:12
Чт мар 14, 2019 16:33:58
Чт мар 14, 2019 17:09:45