Библиотека для работы с семисегментными индикаторами
Модератор: boogyman
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Библиотека для работы с семисегментными индикаторами
Здесь обсуждаем статью "Использование библиотеки для работы с семисегментным индикатором. Делаем простые часы."
Ссылка на статью https://radioparty.ru/programming/avr/c ... nt-library
По просьбам пользователей переделал библиотеку под 6-ти разрядный индикатор, к часам добавилось отображение секунд. На будущее можно переделать и под 8-ми разрядный индикатор. Проект AVRStudio и Proteus во вложении. Качайте и оценивайте что получилось.
Ссылка на статью https://radioparty.ru/programming/avr/c ... nt-library
По просьбам пользователей переделал библиотеку под 6-ти разрядный индикатор, к часам добавилось отображение секунд. На будущее можно переделать и под 8-ми разрядный индикатор. Проект AVRStudio и Proteus во вложении. Качайте и оценивайте что получилось.
- Вложения
-
- 7segment_6digits.rar
- Проект AVRStudio и Proteus
- (67.54 КБ) 3755 скачиваний
Re: Библиотека для работы с семисегментными индикаторами
Большое спасибо за ответ. Благодаря вашей статье, познакомился с работой библиотеки - очень удобная штука и разводка платы сильно упрощается.
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
Re: Библиотека для работы с семисегментными индикаторами
Здравствуйте. Решил собрать эти часы, сделал разводку, и под нее переделал библиотеку дисплея. Все откомпилировалось, зашил МК но в результате получил только буквы "Г" на всех 4 сегментах. Что это может быть? Файлы проекта в архиве.
Заранее спасибо.
P.S. В протеусе проверить не могу, так как отказывается работать на семерке![Грустный :(](./images/smilies/icon_e_sad.gif)
Заранее спасибо.
P.S. В протеусе проверить не могу, так как отказывается работать на семерке
![Грустный :(](./images/smilies/icon_e_sad.gif)
- Вложения
-
- Desktop.rar
- (102.89 КБ) 3389 скачиваний
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Библиотека для работы с семисегментными индикаторами
В файле dicplay.c не выбрал то что у тебя дисплей с ОА:
В фале display.h попутал с ножками, судя по твоей печатке надо так:
Код: Выделить всё
// Выбираем тип подключения дисплея OA или OK
// common anode
#define SET_DIGIT sbi
#define CLEAR_DIGIT cbi
#define SET_SEGMENT cbi
#define CLEAR_SEGMENT sbi
// common cathode
//#define SET_DIGIT cbi
//#define CLEAR_DIGIT sbi
//#define SET_SEGMENT sbi
//#define CLEAR_SEGMENT cbi
Код: Выделить всё
// Segment A: PD2
#define A_DDR DDRD
#define A_PORT PORTD
#define A_BIT PD2
#define A 0
// Segment B: PC1
#define B_DDR DDRC
#define B_PORT PORTC
#define B_BIT PC1
#define B 1
// Segment C: PD2
#define C_DDR DDRB
#define C_PORT PORTB
#define C_BIT PB0
#define C 2
// Segment D: PD5
#define D_DDR DDRD
#define D_PORT PORTD
#define D_BIT PD5
#define D 3
// Segment E: PD7
#define E_DDR DDRD
#define E_PORT PORTD
#define E_BIT PD7
#define E 4
// Segment F: PD1
#define F_DDR DDRD
#define F_PORT PORTD
#define F_BIT PD1
#define F 5
// Segment G: PB3
#define G_DDR DDRB
#define G_PORT PORTB
#define G_BIT PB3
#define G 6
// Segment DP: PD6
#define DP_DDR DDRD
#define DP_PORT PORTD
#define DP_BIT PD6
#define DP 7
// Digit 1: PD3
#define DIGIT1_DDR DDRD
#define DIGIT1_PORT PORTD
#define DIGIT1_BIT 3
// Digit 2: PC4
#define DIGIT2_DDR DDRC
#define DIGIT2_PORT PORTC
#define DIGIT2_BIT 4
// Digit 3: PC3
#define DIGIT3_DDR DDRC
#define DIGIT3_PORT PORTC
#define DIGIT3_BIT 3
// Digit 4: PC0
#define DIGIT4_DDR DDRC
#define DIGIT4_PORT PORTC
#define DIGIT4_BIT 0
Re: Библиотека для работы с семисегментными индикаторами
В прошивке общий анод, то я просто экспериментировал. Поменял содержимое display.h, все откомпилировалось, но также само буквы "Г"
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Библиотека для работы с семисегментными индикаторами
Проверял в Протеусе, все работает, держи исправленный проект
- Вложения
-
- clock.rar
- Исправленный проект(ОА)
- (65.85 КБ) 3589 скачиваний
Re: Библиотека для работы с семисегментными индикаторами
Здраствуйте. Извините за некоректный вопрос. Меня интересует как добавить будильник в такие часы, чтобы при его включении срабатывало релле например? Нужен только код, со схемой разберусь. За рание спасибо).
- igor_yalta
- Новичок
- Сообщения: 1
- Зарегистрирован: 15 мар 2015, 02:35
Re: Библиотека для работы с семисегментными индикаторами
а как использовать точку отдельно ??? при выводи просто чисел например 15.4 или 1.82 для других нужд не для часов
- a_sergeevich
- Новичок
- Сообщения: 1
- Зарегистрирован: 18 мар 2015, 21:57
Re: Библиотека для работы с семисегментными индикаторами
надо написать динамическую индикацию самому, а не пользоваться чужими библиотеками и сидеть ждать когда автор переделает её под твои нужды.igor_yalta писал(а):а как использовать точку отдельно ??? при выводи просто чисел например 15.4 или 1.82 для других нужд не для часов
Вот пример как можно выводить на 7ми сегментники, что угодно: Это программа ещё не дописана, я её начал писать как таймер пауз для дворников в УАЗ ( именно часть управляющая дворниками и не дописана ) и решил добавить в это устройство вольтметр и термометр. В архиве проект для протеуса, проект для авр студии 6, исходник полностью от комментирован так, что вопросов возникнуть не должно.
Re: Библиотека для работы с семисегментными индикаторами
как работает этот кусок кода, как я понял он завязан на епром, зачем там использовать епром?
brightness = b + 5; - почему при увеличении 5 до 7 начинают работать(после исправления библиотеки до 8ми индикаторов) все восемь индикаторов, а после компиляции и убавления 7ки до 5 все восемь индикаторов работают исправно, и при убавлении до 2 ( b + 2) работают три индикатора?
Код: Выделить всё
uint8_t set_brightness( uint8_t b)
{
if (b > 100) b = 100;
b = 100 - b;
brightness = b + 5;
return b;
}
- Вложения
-
- Новый текстовый документ.rar
- 8 индикаторов
- (2.34 КБ) 2316 скачиваний
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Библиотека для работы с семисегментными индикаторами
Если прибавлять 7 то значение перескакивает через 100
Re: Библиотека для работы с семисегментными индикаторами
почему при увеличении 5 до 7 начинают работать(после исправления библиотеки до 8ми индикаторов) все восемь индикаторов, а после компиляции и убавления 7ки до 5 все восемь индикаторов работают исправно, и при убавлении до 2 ( b + 2) работают три индикатора? -- почему изменение этого значения влияет на количество индикаторов?
- AntonChip
- Администратор
- Сообщения: 265
- Зарегистрирован: 24 дек 2011, 22:11
- Откуда: Киров
- Контактная информация:
Re: Библиотека для работы с семисегментными индикаторами
Проверяете в железе? Кусок кода просто инвертирует значение
set_brightness(5) brightness = 100
set_brightness(100) brightness = 5
set_brightness(5) brightness = 100
set_brightness(100) brightness = 5
Re: Библиотека для работы с семисегментными индикаторами
Хорошая библиотека.Только вот в железе яркость до нуля не убирается.Это можно поправить?
Re: Библиотека для работы с семисегментными индикаторами
Здравствуйте! Хочу собрать часы с термометром. Использовал занятия с проектами на DS1307 и DS18b20 и библиотеку для работы с семисегментными индикаторами. Вывод часов отображается нормально, а вот вывести температуру через эту библиотеку не получается. Проверял и в схеме, и в Протеусе.