Как "склеить" числа из массива?

Здесь все вопросы по языку программирования С
Ответить
Алексей bird
Сообщения: 28
Зарегистрирован: 20 мар 2017, 22:38

Как "склеить" числа из массива?

Сообщение Алексей bird » 31 мар 2017, 16:07

Коллеги, подскажите, есть массив array[10], в нём каждый член массива имеет значение, как этот массив перевести в одиночную переменную? Т.е. было:

Код: Выделить всё

array[1] = 1
array[2] = 2
array[3] = 3
array[4] = 4
array[5] = 5
и получилось:

Код: Выделить всё

arr= 12345
Кстати нулевой элемент массива не используется, это специально так.

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Как "склеить" числа из массива?

Сообщение gurvinok » 31 мар 2017, 19:05

А всегда 6 элементов или он динамический?
Если долго мучиться, может быть получится.

Алексей bird
Сообщения: 28
Зарегистрирован: 20 мар 2017, 22:38

Re: Как "склеить" числа из массива?

Сообщение Алексей bird » 31 мар 2017, 23:44

В итоговом варианте он будет на 10 значений (1-10), это я считываю кнопки, их у меня 10 шт, через две 74165. Вот я думаю как лучше определять значения кнопок: каждый бит отдельно(а именно это в массив и заносится) или всё общим 16 битным числом. У каждого метода свои плюсы и минусы, хочу определиться... :?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Как "склеить" числа из массива?

Сообщение gurvinok » 01 апр 2017, 17:06

Бог мой :shock: Так никто не делает.

Код: Выделить всё

// 16-и битная переменная для хранения состояния кнопок. 1-нажата, 0-отпущена
unsigned int button_flags = 0;

// Константы кнопок

#define button_0    0 // Константа кнопки 0
#define button_1    1 // Константа кнопки 1
#define button_2    2 // Константа кнопки 2
#define button_3    3 // Константа кнопки 3
#define button_4    4 // Константа кнопки 4
#define button_5    5 // Константа кнопки 5
#define button_6    6 // Константа кнопки 6
#define button_7    7 // Константа кнопки 7
#define button_8    8 // Константа кнопки 8
#define button_9    9 // Константа кнопки 9


// Макросы для работы с переменной button_flags

#define BUTTON_HI(b)    (button_flags |= (1 << b)) // поднять флаг если кнопка нажата
#define BUTTON_LOW(b)   (button_flags &= ~(1 << b)) // поднять флаг если кнопка не нажата
#define BUTTON_RD(b)    (button_flags & (1 << b)) // проситать состояние кнопки из переменной


void main()
{
    // Если кнопку 5 нажали взводим ее флаг в переменной
    BUTTON_HI(button_5);

    // Если отпустили кнопку 5, то сбрасываем ее флаг в переменной
    BUTTON_LOW(button_5);

    // Для того чтобы узнать состояние кнопки 5, опрашиваем ее флаг
    if(BUTTON_RD(button_5)) 
    {
        // Если флаг взведен
    }
    else
    {
        // Если флаг сброшен
    }
}
Таким образом при нажатии на кнопки, их состояния можно записывать в одну переменную которая займет в ОЗУ всего два байта, а не 10 байт массивом.
Если долго мучиться, может быть получится.

Алексей bird
Сообщения: 28
Зарегистрирован: 20 мар 2017, 22:38

Re: Как "склеить" числа из массива?

Сообщение Алексей bird » 01 апр 2017, 18:11

это обычная кнопка, а у меня кнопки читаются через 74165, и на десять(да какое угодно кол-во) кнопок используются всего 3 ноги

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Как "склеить" числа из массива?

Сообщение gurvinok » 01 апр 2017, 19:41

а у меня кнопки читаются через 74165, и на десять
Это что за криптография?
Если долго мучиться, может быть получится.

Алексей bird
Сообщения: 28
Зарегистрирован: 20 мар 2017, 22:38

Re: Как "склеить" числа из массива?

Сообщение Алексей bird » 01 апр 2017, 21:23

gurvinok писал(а):
а у меня кнопки читаются через 74165, и на десять
Это что за криптография?
http://www.ti.com/lit/ds/symlink/sn74165.pdf
Параллельный сдвиговый регистр, странно, что ты его не знаешь :shock:

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Как "склеить" числа из массива?

Сообщение gurvinok » 01 апр 2017, 23:28

Так это на вход 8 бит параллельно, а на выходе последователно? Зы, если его скрестить с 595, то можно аппаратный UART замутить))) По поводу кнопок я вообще не вижу проблем. Получил байт и загрузил его в переменную с флагами, а там через switch вычисляй нажатые кнопки.
Если долго мучиться, может быть получится.

Алексей bird
Сообщения: 28
Зарегистрирован: 20 мар 2017, 22:38

Re: Как "склеить" числа из массива?

Сообщение Алексей bird » 01 апр 2017, 23:57

gurvinok писал(а):Получил байт и загрузил его в переменную с флагами, а там через switch вычисляй нажатые кнопки.
В прошлом проекте на BASCOMе я так и делал, но есть один нюанс: если зажато несколько кнопок, то определить какие нажаты невозможно. На данный момент я определяю, что мне важно простота алгоритма или определение нажатия нескольких кнопок, поэтому вернёмся к первому вопросу: как "склеить" массив?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Как "склеить" числа из массива?

Сообщение gurvinok » 02 апр 2017, 18:54

А в чем проблема-то? Ну пришел байт из регистра. Перебираем его сдвигом и проверяем на единицу накладывая каждый раз маску. Зачем массив? И как его можно склеивать если в СИ не существует переменных 10 битных.
Если долго мучиться, может быть получится.

Ответить