Форум РадиоКот https://radiokot.ru/forum/ |
|
Динамическая индикация https://radiokot.ru/forum/viewtopic.php?f=62&t=139344 |
Страница 1 из 1 |
Автор: | vipien [ Пн дек 12, 2016 04:18:23 ] |
Заголовок сообщения: | Динамическая индикация |
Здравствуйте! Помогите пожалуйста разобраться в таком вопросе: имеется кусок кода термометра на 7-ми сегментном индикаторе. В коде есть строки и комментарий - "Меняем эти числа для другого индикатора": #define a 32 #define b 128 #define c 2 #define d 8 //Меняем эти числа для другого индикатора #define e 16 #define f 64 #define g 1 #define DP 4 #define minus Dig[10] #define grad Dig[11] #define probel Dig[12] Есть такой вариант: flash char digits[] = { //масив с цифрами 0b00000011, //0 0b10011111, //1 0b00100101, //2 0b00001101, //3 0b10011001, //4 0b01001001, //5 0b01000001, //6 0b00011111, //7 0b00000001, //8 0b00001001, //9 0b11111101, //знак минус 0b11111111 //пусто }; Объясните пожалуйста откуда берутся эти цифры. Нигде не могу найти понятного объяснения. |
Автор: | akl [ Пн дек 12, 2016 04:48:00 ] |
Заголовок сообщения: | Re: Динамическая индикация |
Если считать с 0, то сегмент a подключен к порту 5, сегмент b - к порту 7 и т.д. |
Автор: | vipien [ Пн дек 12, 2016 05:43:10 ] |
Заголовок сообщения: | Re: Динамическая индикация |
akl писал(а): Если считать с 0, то сегмент a подключен к порту 5, сегмент b - к порту 7 и т.д. ![]() |
Автор: | Мурато Мяуконни [ Пн дек 12, 2016 06:15:57 ] |
Заголовок сообщения: | Re: Динамическая индикация |
vipien писал(а): #define d 8 //Меняем эти числа для другого индикатора #define e 16 Есть такой вариант: flash char digits[] = { //масив с цифрами 0b00000011, //0 0b10011111, //1 В первом варианте - переведите число 8 из десятичной в двоичную системы с помощью встроенного в винду калькулятора в режиме Программист. Получите в двоичной системе 00001000. То есть, 1 будет зажигать сегмент d индикатора. Расположение сегментов индикатора есть в его даташите или в гуглопоиске. Подключение сегментов индикатора к выводам микроконтроллера показано на схеме, по которой вы работаете. Второй вариант цифр в двоичной системе показывает сразу, какие сегменты индикатора будут включены для отображения на нем цифр 0, 1... В зависимости от типа индикатора и его подключения, сегменты могут зажигаться как лог.единицей, так и лог.нулем. Второй вариант как раз этим принципиально и отличается от первого. Во втором варианте сегменты зажигаются лог.нулем на выходах. |
Автор: | vipien [ Пн дек 12, 2016 06:47:18 ] |
Заголовок сообщения: | Re: Динамическая индикация |
[/quote]В первом варианте - переведите число 8 из десятичной в двоичную системы с помощью встроенного в винду калькулятора в режиме Программист. Получите в двоичной системе 00001000. То есть, 1 будет зажигать сегмент d индикатора. [/quote] Я тоже так думал, но не сходится у меня. Для сегмента d, согласен, совпадает. Для других сегментов нет. Эти цифры откуда: #define minus Dig[10] #define grad Dig[11] #define probel Dig[12] |
Автор: | Мурато Мяуконни [ Пн дек 12, 2016 06:56:14 ] |
Заголовок сообщения: | Re: Динамическая индикация |
Для других сегментов переделайте так, чтобы совпадало. Обратно преобразуйте из двоичной в десятичную. #define minus Dig[10] - это присвоение имени minus для элемента массива Dig с индексом 10. Тот массив содержит значение для зажигания сегментов индикатора |
Автор: | vipien [ Пн дек 12, 2016 07:52:06 ] |
Заголовок сообщения: | Re: Динамическая индикация |
Так, с выводами индикатора вроде разобрался. Осталось с #define minus Dig[10] разобраться. Спасибо за разъяснения! |
Автор: | Мурато Мяуконни [ Пн дек 12, 2016 18:05:46 ] |
Заголовок сообщения: | Re: Динамическая индикация |
Найдите данные массива Dig, в нем найдите 11-й по счету элемент (индексы считаются с 0, поэтому элемент с индексом 10 будет в списке массива 11-м по счету). Точно так же и с Dig[11], Dig[12]. Вообще, вам очень следует подробнее изучить основы языка Си. |
Автор: | vipien [ Вт дек 13, 2016 03:15:14 ] |
Заголовок сообщения: | Re: Динамическая индикация |
Мурато Мяуконни, спасибо за подсказку. Основы изучаю по наличию свободного времени ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |