Можно ещё одно прерывание по таймеру поставить, и мигание точки в него положить.Greymand писал(а):Здравствуйте уважаемые!
Так вот,как сделать чтобы цифра мигала с периодом 0,5-1 сек?
CodeVision AVR в вопросах и ответах
- 0867532
- Встал на лапы
- Сообщения: 142
- Зарегистрирован: Сб май 25, 2013 21:14:11
- Откуда: Москва
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Если возникнут вопросы - посмотрите на мой аватар.
- Реклама
Re: CodeVision AVR в вопросах и ответах
Эмм..Непонимаю)
Точка ж тоже динамически показывается.
Если я хочу зажечь точку после первого индикатора,я должен ее включать только тогда,когда включается именно первый индикатор.
Тогда она будет гореть постоянно.
Вот входим мы в прерывание,которое сделали для динамической индикации.
И там,как я понимаю,надо сделать так,чтобы в N-ом количестве прерываний зажигать точку вместе с первым индикатором,а в остальных-зажигать первый индикатор без точки...
Тока как это грамотно сделать,не знаю(
Точка ж тоже динамически показывается.
Если я хочу зажечь точку после первого индикатора,я должен ее включать только тогда,когда включается именно первый индикатор.
Тогда она будет гореть постоянно.
Вот входим мы в прерывание,которое сделали для динамической индикации.
И там,как я понимаю,надо сделать так,чтобы в N-ом количестве прерываний зажигать точку вместе с первым индикатором,а в остальных-зажигать первый индикатор без точки...
Тока как это грамотно сделать,не знаю(
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Обычный счётчик (переменная), считающий кол-во входов. По счётчику уже судим - зажигать после гашения индикатор или нет.Greymand писал(а):И там,как я понимаю,надо сделать так,чтобы в N-ом количестве прерываний зажигать точку вместе с первым индикатором,а в остальных-зажигать первый индикатор без точки...
Тока как это грамотно сделать,не знаю(
Код: Выделить всё
void ind_upd(void){ // Входим 1 раз в 1 Ms
static unsigned int cnt_mig=0; // Счётчик вхождений
static unsigned char fl_mig=0; // Флаг включения индикаторов
if(++cnt_mig>1000) cnt_mig=0;
fl_mig = cnt_mig<500;
Гасим индикаторы();
if(++ind_num>=3) ind_num=0;
if(! fl_mig) return; // Если флаг сброшен - выходим из ф-ии без включения индикаторов
switсh(ind_num){
case 0:
.........
break;
case 1:
.........
break;
case 2:
.........
break;
}
}
Константы 500 и 1000 можно менять в зависимости от необходимой интенсивности мигания и частоты обновления индикации.
Re: CodeVision AVR в вопросах и ответах
берешь еще один таймер , допустим Т2Greymand писал(а):Здравствуйте уважаемые!
Сильно не пинайте,новичек я.
Есть,вообщем,динамическая индикация.Три разряда и точка.
Кода под рукой нет,но вообщем,логика такая:
Прерывание таймера;
Гасим все;
i++;
swith(i)
case 1: включаем первый индикатор;выводим циферку1;
case 2: включаем второй;выводим циферку2;
case 3: включаем третий,выводим циферку3;i=0;зажигаем точку;
Так вот,как сделать чтобы цифра мигала с периодом 0,5-1 сек?
настраиваешь его так, чтобы он давал прерывание, например по переполнению, через 500мс
в телее обработчика этого прерывания пишешь
Код: Выделить всё
ststic char blink;
blink=^blink;Код: Выделить всё
Гасим все;
выводим новое значение;
if(++i>=4)i=0;
swith(i)
case 0: if(blink==1)включаем первый индикатор;// данный разряд будет мигать
case 1: включаем второй;
case 2: включаем третий;
case 3: зажигаем точку;Tell Me The Truth
Re: CodeVision AVR в вопросах и ответах
А как же ответ на мой вопрос?! Как сделать так чтобы при корректировке текущего времени подчеркивалось время или часы в зависимости от того что именно корректируется! Как корректировать я уже понял, а вот как вывести подчерк под значением времени или минуты ну никак не соображу!
- Реклама
Re: CodeVision AVR в вопросах и ответах
Marchello, я читал что есть определенная ф-ция которая делает мигание курсора, но более точно ничего сказать не могу так как сам еще ни разу не запускал дисплей.
Tell Me The Truth
Re: CodeVision AVR в вопросах и ответах
На сколько я понял за курсор в виде подчеркивания отвечает функция _lcd_write_data (0x0d); но куда ее вставлять и вообще как ею пользоваться не могу сообразить! Единственное что смог сделать так это хаотичное мерцание курсора по всему экрану!
Re: CodeVision AVR в вопросах и ответах
Спасибо большое!Аlex писал(а):Обычный счётчик (переменная), считающий кол-во входов. По счётчику уже судим - зажигать после гашения индикатор или нет.Greymand писал(а):И там,как я понимаю,надо сделать так,чтобы в N-ом количестве прерываний зажигать точку вместе с первым индикатором,а в остальных-зажигать первый индикатор без точки...
Тока как это грамотно сделать,не знаю(
Как-то, приблизительно, так...
Константы 500 и 1000 можно менять в зависимости от необходимой интенсивности мигания и частоты обновления индикации.
Получилось)
Re: CodeVision AVR в вопросах и ответах
Всем добрый день. В программировании я новичок, поэтому не рассказывайте какой из меня программист, сам знаю. Стоит вот такая задача:
у МК одна нога выход на ней единица и она управляет устройством. к трём другим подключены кнопки.
Одна основная кнопка при нажатии которой на выходе появляется ноль на определённое время, не зависимо от времени удержания этой кнопки.
вот код который это реализует. Не знаю правильно ли он у меня написан, но в протеусе работает.
while (1) // Главный цикл
{
if (!PINB.3) // если нажата кнопка на pinB3
{
delay_ms(20); // антидребезговая задержка
PORTB.0=0; // установить на ноге PB0 ноль
delay_ms(100); // подождать 100ms,(продолжительность импульса)
DDRB.0=0; // сделать ногу PB0 входом.
PORTB.0=1; // установить на ноге 0 единицу
if (PINB.3==1) // если на ноге PB3 появиття 1 (единица) то
{
delay_ms(20); // антидребезговая задержка
DDRB.0=1; // ногу PB0 сделать выходом и
PORTB.0=1; // записать на ногу PB0 1 (единицу)
};
}
Теперь мне надо при нажатии на вторую кнопку
If (!PINB.2){ увеличивать продолжительность импульса }
а при нажатии на третью
if(!PINB.1){ уменьшать },
с шагом допустим 10ms. Можно ли это сделать с выше изложенным кодом или нужен другой алгоритм? Дальше будет стоять последняя задача: записать полученные изменения в EEPROM.
у МК одна нога выход на ней единица и она управляет устройством. к трём другим подключены кнопки.
Одна основная кнопка при нажатии которой на выходе появляется ноль на определённое время, не зависимо от времени удержания этой кнопки.
вот код который это реализует. Не знаю правильно ли он у меня написан, но в протеусе работает.
while (1) // Главный цикл
{
if (!PINB.3) // если нажата кнопка на pinB3
{
delay_ms(20); // антидребезговая задержка
PORTB.0=0; // установить на ноге PB0 ноль
delay_ms(100); // подождать 100ms,(продолжительность импульса)
DDRB.0=0; // сделать ногу PB0 входом.
PORTB.0=1; // установить на ноге 0 единицу
if (PINB.3==1) // если на ноге PB3 появиття 1 (единица) то
{
delay_ms(20); // антидребезговая задержка
DDRB.0=1; // ногу PB0 сделать выходом и
PORTB.0=1; // записать на ногу PB0 1 (единицу)
};
}
Теперь мне надо при нажатии на вторую кнопку
If (!PINB.2){ увеличивать продолжительность импульса }
а при нажатии на третью
if(!PINB.1){ уменьшать },
с шагом допустим 10ms. Можно ли это сделать с выше изложенным кодом или нужен другой алгоритм? Дальше будет стоять последняя задача: записать полученные изменения в EEPROM.
Что поиск рулит знаю. Забанен во всех поисковых системах.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Заведите переменную, которая будет хранить время продолжительности единички при нажатии кнопки №1. Опрашивайте кнопки №2,3 и изменяйте эту переменную, в зависимости от нажатой кнопки.
Алгоритм прост до безобразия...
ЗЫ: Про кнопки есть отдельная тема, почитайте её, там и примеры есть.
Алгоритм прост до безобразия...
ЗЫ: Про кнопки есть отдельная тема, почитайте её, там и примеры есть.
Re: CodeVision AVR в вопросах и ответах
А на мой вопрос мне так никто и не ответит на счет мигающего курсора?!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Marchello, Вы теперь через каждый пост будете вставлять свой ответ ?
Покурите даташит на контроллер своего дисплея, там есть возможность помигать курсором - уже Вам ответили выше.
Покурите даташит на контроллер своего дисплея, там есть возможность помигать курсором - уже Вам ответили выше.
Re: CodeVision AVR в вопросах и ответах
Та к в том то всё и дело, что для новичка он оказался не очень прост.Аlex писал(а):Заведите переменную, которая будет хранить время продолжительности единички при нажатии кнопки №1. Опрашивайте кнопки №2,3 и изменяйте эту переменную, в зависимости от нажатой кнопки.
Алгоритм прост до безобразия...
ЗЫ: Про кнопки есть отдельная тема, почитайте её, там и примеры есть.
Допустим я обозначу переменную time и задам ей значение и при нажатии кнопки я буду это значение уменьшать или увеличивать, тут понятно. Но уменя время импульса задано задержкой delay_ms(100), и как эту задержку привязать к переменной я не понимаю.
Про кнопки обязательно почитаю. Спасибо.
Что поиск рулит знаю. Забанен во всех поисковых системах.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
delay_ms(time);Или так
Код: Выделить всё
void _delay(unsigned int ms){
while(ms--) delay_ms(1);
}
.............
.............
_delay(time);
Re: CodeVision AVR в вопросах и ответах
Ок! Вопрос №2
Задаю массив - int loc_array[5][2] = {{8,1}, {11,1}, {8,2}, {11,2}, {14,2}}; в котором значения это x и y которые необходимо будет указывать в lcd_gotoxy ()
Как мне в lcd_gotoxy () прописать значение массива?
Задаю массив - int loc_array[5][2] = {{8,1}, {11,1}, {8,2}, {11,2}, {14,2}}; в котором значения это x и y которые необходимо будет указывать в lcd_gotoxy ()
Как мне в lcd_gotoxy () прописать значение массива?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
http://yandex.ru/yandsearch?clid=9582&t ... D0%B8&lr=2
Неужели это сложно сделать самому ?
Неужели это сложно сделать самому ?
Re: CodeVision AVR в вопросах и ответах
В том то и дело, что не сложно, проблема в том, что мне как новичку который никогда в жизни не программировал очень трудно разобраться в терминологии и в структуре той или иной функции. Поэтому я и обращаюсь к вам!
Re: CodeVision AVR в вопросах и ответах
И все равно ничего не понял! Может все таки кто нибудь подскажет как в lcd_gotoxy (); вставить значение x,y из массива int loc_array[5][2] = {{8,1}, {11,1}, {8,2}, {11,2}, {14,2}}; где {8 это x, 1 это y}, {11 это x, 1 это y} одним словом значения записанные в массив это координаты x,y
Re: CodeVision AVR в вопросах и ответах
Наверное, так:
Код: Выделить всё
lcd_gotoxy(loc_array[a][0], loc_array[a][1]); //a - номер пары координат
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
В какой терминологии ? Вам слово "массив" неизвестно ? Вы же его сами произносили.Marchello писал(а):мне трудно разобраться в терминологии и в структуре той или иной функции.
На самом деле всё просто. Берёте учебник, садитесь и читаете ... читаете ... читаете ... "до посинения". Такие элементарные вопросы есть в любой книге по Си.
Если Вас отправляют в гугл, это не значит, что Вас оскорбляют, издеваются, унижают и т.д... Значит этот вопрос тищу раз пережёван и ответы лежат в свободном доступе в интернете. Вам нужно просто сидеть и гуглить до тех пор, пока не найдёте ответ на свой вопрос.
И не стоит говорить фразу "я ничего не понял". Назревает сразу-же вопрс - что конкретно Вы не поняли ? Где это "то", что Вы не поняли ? Дайте ссылку на текст, в котором Вам что-то не понятно.
А так, складывается впечатление, что Вы ничего даже не искали и не читали, успокаивая себя словами "я новичок, я всё равно ничего не пойму..."...
Учитесь пользоваться литературой, она - сила !


