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

 
 
 
Reply to this topicStart new topic
> Вертикальный скролл LCD 4*20, Как организовать?
Sergey529
сообщение Jan 27 2012, 16:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 12-12-11
Пользователь №: 68 814



Имеется плата evk1100 c AT32UC3A. На ней располагается дисплей DIP204. Я еще новичок в Си, и уж тем более впервые сталкиваюсь с 32-разрядными контроллерами. Тем не менее есть поставленная задача... Пишу пока тестовую программу. Благодаря Framework разобрался с индикатором и usart.
Вот фрагмент кода:
Код
......
while (1)
  {
  a=usart_getchar(EXAMPLE_USART);
  dip204_printf_string("%c",a);
  if(a=='1')
     {
      usart_write_line(EXAMPLE_USART, "OK");
     }

  if(a=='0')
     {
      dip204_clear_display();
      }
   }
return 0;

Переменная a - некий буфер, куда заносятся символы, приходящие из терминальной программы с ПК. Как организовать вертикаьную прокрутку, на экране, когда все 80 знакомест заполнились?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 27 2012, 18:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sergey529 @ Jan 27 2012, 20:14) *
Как организовать вертикаьную прокрутку, на экране, когда все 80 знакомест заполнились?

Пожертвовать 80 байт RAM под буфер, все операции производить над ним. Для работы с дисплеем нужна будет только одна процедура - отрисовать буфер.
Go to the top of the page
 
+Quote Post
Sergey529
сообщение Feb 1 2012, 13:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 12-12-11
Пользователь №: 68 814



Если несложно, напишите пожалуйста какой-нибудь вариант кода, в котором можно будет все это организовать...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 1 2012, 13:38
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Все - это что именно, вертикальную прокрутку?

Сделайте, например, так:
Код
#define DISP_X_SZ  20
#define DISP_Y_SZ  4

char fb[DISP_Y_SZ][DISP_X_SZ];

void scroll_up(void)
{
    int a;

    for(a = 0; a < DISP_Y_SZ - 1; a++)
        memcpy(fb[a], fb[a + 1], DISP_X_SZ);
}
Go to the top of the page
 
+Quote Post
Sergey529
сообщение Feb 3 2012, 12:54
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 12-12-11
Пользователь №: 68 814



Цитата(aaarrr @ Feb 1 2012, 16:38) *
Все - это что именно, вертикальную прокрутку?

Сделайте, например, так:
Код
#define DISP_X_SZ  20
#define DISP_Y_SZ  4

char fb[DISP_Y_SZ][DISP_X_SZ];

void scroll_up(void)
{
    int a;

    for(a = 0; a < DISP_Y_SZ - 1; a++)
        memcpy(fb[a], fb[a + 1], DISP_X_SZ);
}


Спасибо большое за код! Напишите пожалуйста комментарии к нему.. Хочу разобраться что к чему.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 3 2012, 13:01
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sergey529 @ Feb 3 2012, 16:54) *
Спасибо большое за код! Напишите пожалуйста комментарии к нему.. Хочу разобраться что к чему.

Вообще, подобный код не требует комментариев. Но пожалуйста.

Код
#include <string.h>

#define DISP_X_SZ  20    /* Размер экрана по горизонтали */
#define DISP_Y_SZ  4     /* Размер экрана по вертикали */

char fb[DISP_Y_SZ][DISP_X_SZ];    // Буфер экрана в ОЗУ

void scroll_up(void)
{
    int a;

    for(a = 0; a < DISP_Y_SZ - 1; a++)          // Цикл от первой до предпоследней строки
        memcpy(fb[a], fb[a + 1], DISP_X_SZ);    // Копируем в текущую строку содержимое следующей
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 20:27
Рейтинг@Mail.ru


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