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

 
 
> Свои символы hd44780
Specialist
сообщение Jul 29 2008, 09:23
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 25-06-08
Пользователь №: 38 539



Привет. Пишу свои функции для управления дисплеем. Использую PIC, компилятор Hi-Tech C for PIC Вроде бы все работает нормально. Но как только загружаю свой символ в CGRAM у меня а дисплее абракадабра получается.

Записать 4 бита RS data
void mylcd_wdata4(char,char);

Делаю вот так, но я не полностью понял как пользовательские символы записывать туда.

Код
char user_gradus[16] = {0b0000,0b1110,0b0001,0b0001,0b0001,0b0001,0b0000,0b1110,0,0,0,0,0,0,0,0}; // Цельсий

mylcd_init();

mylcd_wdata4(0,0b0100);//Пока записываю по 4 бита, дальше не делал.
mylcd_wdata4(0,0b0001);//Тут я выбрал адрес в CGRAM

for (i=0; i<16; i++) mylcd_wdata4(1,user_gradus[i]);


Что тут не так ?

Сообщение отредактировал Specialist - Jul 29 2008, 09:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sKWO
сообщение Jul 29 2008, 10:59
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Specialist @ Jul 29 2008, 12:23) *
Привет. Пишу свои функции для управления дисплеем. Использую PIC, компилятор Hi-Tech C for PIC Вроде бы все работает нормально. Но как только загружаю свой символ в CGRAM у меня а дисплее абракадабра получается.
Что тут не так ?

Может поможет дабовление нуля в конце массива?
Код
char user_gradus[17] = {0b0000,0b1110,0b0001,0b0001,0b0001,0b0001,0b0000,0b1110,0,0,0,0,0,0,0,0,0x00}; // Цельсий


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Specialist
сообщение Jul 29 2008, 11:28
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 25-06-08
Пользователь №: 38 539



Цитата(sKWO @ Jul 29 2008, 12:59) *
Может поможет дабовление нуля в конце массива?
Код
char user_gradus[17] = {0b0000,0b1110,0b0001,0b0001,0b0001,0b0001,0b0000,0b1110,0,0,0,0,0,0,0,0,0x00}; // Цельсий


Мне нужно отправить 8 байт информации. Я их отправляю по 4 бита, значит всего будет 16 кусков данных.
А если я добавлю еще 17-ю часть то это уже получиться не правильно.
Вот они

char user_gradus[16] = {0b0000,0b1110,0b0001,0b0001,0b0001,0b0001,0b0000,0b1110,0,0,0,0,0,0,0,0}; // Цельсий

Если нарисовать то, что я отправляю получиться так:
01110
10001
10001
01110
00000
00000
00000
00000

Я уже разобрался в из-за чего у меня глюки дисплея, но не пойму почему.
Go to the top of the page
 
+Quote Post
VXDRV
сообщение Aug 9 2008, 04:34
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Цитата(Specialist @ Jul 29 2008, 17:28) *
Мне нужно отправить 8 байт информации. Я их отправляю по 4 бита, значит всего будет 16 кусков данных.
А если я добавлю еще 17-ю часть то это уже получиться не правильно.
Вот они

char user_gradus[16] = {0b0000,0b1110,0b0001,0b0001,0b0001,0b0001,0b0000,0b1110,0,0,0,0,0,0,0,0}; // Цельсий

Если нарисовать то, что я отправляю получиться так:
01110
10001
10001
01110
00000
00000
00000
00000

Я уже разобрался в из-за чего у меня глюки дисплея, но не пойму почему.


Код
    INIT_LCD();                while (WAIT_READY()==0);
    WRITE_IR(0x40);            while (WAIT_READY()==0);    // зашиваем незакрашенный квадратик в LCD, USER-символ по адресу 0x00
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    WRITE_DR(0b00010001);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    WRITE_DR(0b00010001);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);

    WRITE_DR(0b00011111);    while (WAIT_READY()==0);    // зашиваем закрашенный квадратик в LCD, USER-символ по адресу 0x01
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    
    WRITE_IR(0x50);            while (WAIT_READY()==0);    // зашиваем что-то ещё в LCD (сердечко), USER-символ по адресу 0x03
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    WRITE_DR(0b00001010);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00011111);    while (WAIT_READY()==0);
    WRITE_DR(0b00001110);    while (WAIT_READY()==0);
    WRITE_DR(0b00000100);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);
    WRITE_DR(0b00000000);    while (WAIT_READY()==0);

Пример...
Go to the top of the page
 
+Quote Post



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

 


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


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