Имеется этот дисплей и библиотека к нему под STM32, http://www.coocox.org/driver_comp/lcd12 ... mc=4&sc=24 Дак вот в ней все устраивает, но в ней нет графики. Можно ли какнибудь вывести точку?
LCD128x64 на ST7920, вывод точки на экран.
Здраствуйте
Имеется этот дисплей и библиотека к нему под STM32, http://www.coocox.org/driver_comp/lcd12 ... mc=4&sc=24 Дак вот в ней все устраивает, но в ней нет графики. Можно ли какнибудь вывести точку?
Имеется этот дисплей и библиотека к нему под STM32, http://www.coocox.org/driver_comp/lcd12 ... mc=4&sc=24 Дак вот в ней все устраивает, но в ней нет графики. Можно ли какнибудь вывести точку?
- Реклама
А это разве не графика?6Н23П писал(а): в ней нет графики.
Код: Выделить всё
//*****************************************************************************
//
//! \brief Display a picture
//!
//! \param *pucPic is array of picture data
//!
//! \return None.
//
//*****************************************************************************
void ST7920DisplayPicture(unsigned char *pucPic) {
unsigned char i, j;
ST7920Write(ST7920_CMD, 0x34);
ST7920Write(ST7920_CMD, 0x36);
for (i = 0; i < 32; i++) {
ST7920Write(ST7920_CMD, 0x80 + i);
ST7920Write(ST7920_CMD, 0x80);
for (j = 0; j < 16; j++) {
ST7920Write(ST7920_DAT, *pucPic);
pucPic++;
}
}
#ifdef LCM12864
for (i = 0; i < 32; i++) {
ST7920Write(ST7920_CMD, 0x80 + i);
ST7920Write(ST7920_CMD, 0x88);
for (j = 0; j < 16; j++) {
ST7920Write(ST7920_DAT, *pucPic);
pucPic++;
}
}
#endif
ST7920Write(ST7920_CMD, 0x30);
}Можно допилить. Почитайте даташит http://www.dfrobot.com/image/data/fit0021/st7920.pdf Каждой точке соответчтвует бит в памяти контроллера. Напишите функцию, которая будет вычислять адрес байта, в котором находится точка. Затем читаете байт с этого адреса - устанавливаете желаемый бит и записывете байт обратно. Работы на 15 минут.
Все будет только лучше, в крайнем случае - хуже.
amv2000, да это графика, но простейших элементов таких как точа , линия, квадрат, круг, прямоугольник нету.
coredumped, спасибо за наводку.
Есть ли какиенибудь книги или доки где расписаны алгоритмы или инструкции как работать с дисплеями? А то мягко говоря в даташите мало чего понятно . Просто непонятно как пишут эти самые библиотеки для контроолера дисплея. В гугле мало чего по этому есть.
coredumped, спасибо за наводку.
Есть ли какиенибудь книги или доки где расписаны алгоритмы или инструкции как работать с дисплеями? А то мягко говоря в даташите мало чего понятно . Просто непонятно как пишут эти самые библиотеки для контроолера дисплея. В гугле мало чего по этому есть.
Для рисования линий -алгоритм Брезенхема
А ваще, возьмите любую либу, где есть интересующие Вас примитивы и портируйте. Но интереснее самому написать
А ваще, возьмите любую либу, где есть интересующие Вас примитивы и портируйте. Но интереснее самому написать
Все будет только лучше, в крайнем случае - хуже.
- Реклама
кароче не получается выводит мусор за место точки ......
код примерно такой
void LCD_point(void)
{
unsigned char x=5,y=10; //координаты
ST7920Write(ST7920_CMD, 0x34);
ST7920Write(ST7920_CMD, 0x36);
ST7920Write(ST7920_CMD, 0x80|x );
ST7920Write(ST7920_CMD, 0x80|y );
ST7920Write(ST7920_DAT, 0x01);
ST7920Write(ST7920_CMD, 0x30);
}
Кароче теперь я понимаю почему на этот дисплей нет вразумительной инфы...........
код примерно такой
void LCD_point(void)
{
unsigned char x=5,y=10; //координаты
ST7920Write(ST7920_CMD, 0x34);
ST7920Write(ST7920_CMD, 0x36);
ST7920Write(ST7920_CMD, 0x80|x );
ST7920Write(ST7920_CMD, 0x80|y );
ST7920Write(ST7920_DAT, 0x01);
ST7920Write(ST7920_CMD, 0x30);
}
Кароче теперь я понимаю почему на этот дисплей нет вразумительной инфы...........
У меня тот же дисплей, и скажу вам- Он прекрасный.
Память в нём совершенно долбанутая, и я в памяти(SRAM) контроллера сделал 1024 байтный массив, и обратчик к нему.
По прерыванию экран обновляется.
Ну а дальше гораздо проще и быстрее обращаться к массиву контроллера.
Мой дисплей всегда работает в графическом режиме, и текст(6x8) выводит так же.
Память в нём совершенно долбанутая, и я в памяти(SRAM) контроллера сделал 1024 байтный массив, и обратчик к нему.
По прерыванию экран обновляется.
Код: Выделить всё
#define DATAPORT PORTC
#define RS PORTA.0
#define RW PORTA.1
#define OE PORTA.2
#define PSB PORTA.3
#define RESET PORTA.4
#define SYSTEMVIDEOCLK OE=1;delay_us(1);OE=0;
. . .
unsigned char VideoDump[64][16];
. . .
void VideoRender(void) {
for(cy=0; cy<32; cy++){
RS=0;
DATAPORT=(0x80|cy);
SYSTEMVIDEOCLK
DATAPORT=(0x80);
SYSTEMVIDEOCLK
RS=1;
for(cx=0; cx<16; cx++) {
DATAPORT=(VideoDump[cy][cx]);
SYSTEMVIDEOCLK
} }
for(cy=0; cy<32; cy++){
RS=0;
DATAPORT=(0x80|cy);
SYSTEMVIDEOCLK
DATAPORT=(0x88);
SYSTEMVIDEOCLK
RS=1;
for(cx=16; cx<32; cx++) {
DATAPORT=(VideoDump[cy+32][cx-16]);
SYSTEMVIDEOCLK
} } }
Мой дисплей всегда работает в графическом режиме, и текст(6x8) выводит так же.
Если возникнут вопросы - посмотрите на мой аватар.
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
А в чем это выражается...0867532 писал(а):У меня тот же дисплей, и скажу вам- Он прекрасный.
Память в нём совершенно долбанутая
Ух ты... и я так же хотел сделать http://forum.cxem.net/index.php?showtop ... try17878970867532 писал(а):я в памяти(SRAM) контроллера сделал 1024 байтный массив, и обратчик к нему.
Как я понял у вас программно выплевывается... а нельзя ли через DMA запилить... чтобы уж совсем присесть на преимущества STM-ки...0867532 писал(а):По прерыванию экран обновляется.
Ух ты... и я туда же... http://forum.cxem.net/index.php?showtop ... try18118780867532 писал(а):Мой дисплей всегда работает в графическом режиме, и текст(6x8) выводит так же.


