реклама на сайте
подробности

 
 
> Поделитесь примером динамической индикации на Си, Хочется сделать правильно
Pyku_He_oTTyda
сообщение Sep 20 2006, 17:27
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Собственно вопрос в названии темы. Алгоритм понятен, но хочется посмотреть, как делают профи.


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alexander Storm
сообщение Sep 21 2006, 12:50
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 17-09-06
Из: Kyiv
Пользователь №: 20 469



Цитата(Pyku_He_oTTyda @ Sep 21 2006, 13:00) *
А устройсто простое (тестер):
некий привод для запорного механизма на трубе (для крана), у которого на борту 8 или 10 битный АЦП.
Коробочка связана по двум линяям по 485, по одной линии в привод идут СИ, по другой возвращаются данные.
Задача вывести на трехэлементный семисегментник значение кода, получаемого от устройства.

Создаешь кодовую таблицу от своих сегментов. Типа как:
Код
const uchar KodePage[] = {0x7E, 0x06, 0xDA, 0x9E, 0xA6, 0xBC, 0xFC, 0x0E,
                     0xFE, 0xBE, 0xEE, 0xF4, 0x78, 0xD6, 0xF8, 0xE8,
                     0x10, 0xE6, 0x80, 0x16, 0x70, 0xC4, 0xD4, 0xEA,
                     0xC0, 0xAA, 0xF0, 0x76, 0x54, 0xB6, 0x6E, 0x00};

Создаешь переменную для буфера, типа: uchar LcdBuff[]={0,0,0};
Можешь вместо 0 инициальные значения написать (на загрузку покажет smile.gif)
А затем по таймеру выкидываешь по одному разряду. Только частоту прерывания таймера подбери чтоб не мигала.

Вот кусок от драйвера ЖКИ, у тебя почти тоже самое будет:

Код
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TimeX++;          //Для анализа времени вывода по SPI

switch(TimeX&0xF)
{
///---------------Группа операций вывода на LCD
case 0:{ //Out LCD Data - main Out
              wPB.o_LCD = 0;//800us
            PORTB = *(uchar *) &wPB;
              break;};// end case 2
case 4:{//Out LCD Data - main Out
         SPDR = LcdBuff[--LCD_PTR];
         if (!LCD_PTR) {LCD_PTR = 24;};  
         break;};// end case 2
case 14:{//Out LCD - Formirovanie signala LOAD
           wPB.o_LCD = (LCD_PTR&0x07)?0:1;
          PORTB = *(uchar *) &wPB;          
           break;};//end case 34
};//end switch
PORTB ^=0x02;
TCNT0 = 0xD7; //reload counter value
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 11:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016