Форум по микроконтроллерам: Библиотека LCD HD44780 для PIC - Форум по микроконтроллерам

Перейти к содержимому

  • 3 Страниц +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Библиотека LCD HD44780 для PIC С поддержкой Русских символов

#1 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 06 Август 2012 - 16:16

Прикрепленный файл  LCD.rar (110,08К)
Количество загрузок:: 1086
Компиляторы : HI-TECH PICC18 , Microchip C18 (MCC18).

В папку с проектом необходимо добавить файлы "lcd.h" и "lcd.c" и в главном файле подключите библиотеку
#include "lcd.h"
В файле lcd.h указывается частота осцилятора и назначение выводов для дисплея.

PS: Пример использования в аттаче.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#2 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 29 Сентябрь 2012 - 01:05

По многочисленным просьбам, добавил возможность создания собственных символов. Плюс сделал поддержку компиляторов HI-TECH PICC и XC8.
Прикрепленный файл  LCD.rar (153,29К)
Количество загрузок:: 783


void lcd_cgram(char *arr, unsigned char adr)
Добавляет массив строк из arr в CGRAM, по адресу adr.

Пример использования:
char arr_cgram[8]={0b00010,0b00101,0b00101,0b00010,};       // Символ градуса
char lcd_buff[16];

..............
..............

lcd_cgram(arr_cgram, 0x00);         // Загружаем символ в адрес 0x00

lcd_gotoxy(0,0);
sprintf(lcd_buff, "25.5");
lcd_puts(lcd_buff);
lcd_putch(0x00);                    // Выводим символ градуса из адреса 0x00
lcd_putch('C');
Выведет на дисплей нечто подобное:
Прикрепленное изображение: DSCF2243.jpg
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#3 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 09 Ноябрь 2012 - 07:54

Такой вопрос:
Допустим по SPI или i2c пришла команда - 0b11000001, можно ли ее вот так и отобразить на дисплее?

Сообщение отредактировал BiNaR: 09 Ноябрь 2012 - 07:55

0

#4 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 09 Ноябрь 2012 - 08:15

"Вот так" - это как ?
И что значит команда "0b11000001" ? Приходит строка что-ли ?
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#5 Пользователь офлайн   medved 

  • Завсегдатай
  • PipPipPip
  • Группа: SuperMod
  • Сообщений: 366
  • Регистрация: 15 Февраль 11
  • ГородЕкатеринбург

Отправлено 09 Ноябрь 2012 - 09:23

0b11000001 - это код команды. Правильно?
Конечно же на индикатор можно вывести и этот код. Но на мой взгляд удобнее выводить название команды. Например, "включить канал 1"
0

#6 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 09 Ноябрь 2012 - 09:47

Просмотр сообщенияmedved (09 Ноябрь 2012 - 09:23) писал:

0b11000001 - это код команды. Правильно?
Конечно же на индикатор можно вывести и этот код. Но на мой взгляд удобнее выводить название команды. Например, "включить канал 1"


Да, да, вы правильно поняли. Нет, надо именно код чтобы следить за тем что передается....
0

#7 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 09 Ноябрь 2012 - 12:10

unsigned char bin_val;

..........
..........

bin_val=100;
lcd_gotoxy(0,0);
sprintf(lcd_buff, "0b%b",bin_val);
lcd_puts(lcd_buff);

Прикрепленный файл  LCD.rar (85,81К)
Количество загрузок:: 389
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#8 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 05:03

Просмотр сообщенияAlex (09 Ноябрь 2012 - 12:10) писал:

unsigned char bin_val;

..........
..........

bin_val=100;
lcd_gotoxy(0,0);
sprintf(lcd_buff, "0b%b",bin_val);
lcd_puts(lcd_buff);

Прикрепленный файл LCD.rar


Спасибо...
0

#9 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 06:42

Чет не компилится...
Компилятор HI-TECH Universal Tool Suite. Ругается на эту строчку -
sprintf(lcd_buff, (far rom char*)"0b%b",bin_val);

Сообщение отредактировал BiNaR: 10 Ноябрь 2012 - 06:44

0

#10 Пользователь офлайн   MuKeXa 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 197
  • Регистрация: 15 Февраль 11
  • ГородУкраина. Киев/ Брусилов/ Фастов

Отправлено 10 Ноябрь 2012 - 08:09

а текст ругательств?
0

#11 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 08:21

Warning [370] D:\4SPI\main.c; 88.24 illegal basic type; int assumed
Error [195] D:\4SPI\main.c; 88.27 expression syntax
Error [187] D:\4SPI\main.c; 88.42 too few function arguments
Error [194] D:\4SPI\main.c; 88.42 ")" expected
Error [195] D:\4SPI\main.c; 88.42 expression syntax

Сообщение отредактировал BiNaR: 10 Ноябрь 2012 - 08:22

0

#12 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 10 Ноябрь 2012 - 12:01

(far rom char*) Уберите
sprintf(lcd_buff,"0b%b",bin_val);

Не говорите что мне делать, и я не скажу куда Вам идти !
0

#13 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 15:19

Просмотр сообщенияAlex (10 Ноябрь 2012 - 12:01) писал:

(far rom char*) Уберите
sprintf(lcd_buff,"0b%b",bin_val);



Тогда пишет -
Warning [1299] D:\4SPI\main.c; 90.8 non-standard modifier "b" - use "hh" instead
Error   [969] D:\4SPI\main.c; 90.8 end of string in format specifier

0

#14 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 10 Ноябрь 2012 - 15:27

Хм.. Значит хайтек не понимает спецификатор для бинарного вывода ( %b ). :huh:
Я на МСС пробовал.

Выводите значит по одному символу, читая каждый бит.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#15 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 10 Ноябрь 2012 - 15:44

bin_val=0b10101010;
lcd_gotoxy(0,0);
sprintf(lcd_buff,"0b%d%d%d%d%d%d%d%d", \
                    (bin_val&(1<<7))>0,\
                    (bin_val&(1<<6))>0,\
                    (bin_val&(1<<5))>0,\
                    (bin_val&(1<<4))>0,\
                    (bin_val&(1<<3))>0,\
                    (bin_val&(1<<2))>0,\
                    (bin_val&(1<<1))>0,\
                    (bin_val&(1<<0))>0);
lcd_puts(lcd_buff);

bin_val=0b10101010;
lcd_gotoxy(0,0);
sprintf(lcd_buff,"0b");
lcd_puts(lcd_buff);
lcd_putch((bin_val&(1<<7))?'1':'0');
lcd_putch((bin_val&(1<<6))?'1':'0');
lcd_putch((bin_val&(1<<5))?'1':'0');
lcd_putch((bin_val&(1<<4))?'1':'0');
lcd_putch((bin_val&(1<<3))?'1':'0');
lcd_putch((bin_val&(1<<2))?'1':'0');
lcd_putch((bin_val&(1<<1))?'1':'0');
lcd_putch((bin_val&(1<<0))?'1':'0');

bin_val=0b10101010;
lcd_gotoxy(0,0);
lcd_putch('0');
lcd_putch('b');
for(i=0;i<8;i++){
    lcd_putch((bin_val&(0x80))?'1':'0');
    bin_val<<=1;
}

:)
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#16 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 16:18

bin_val=0b10101010;
lcd_gotoxy(0,0);
lcd_putch('0');
lcd_putch('b');
for(i=0;i<8;i++){
    lcd_putch((bin_val&(0x80))?'1':'0');
    bin_val<<=1;
}


:) Да, вот так показывает... Спасибо за помощь.
0

#17 Пользователь офлайн   BiNaR 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 64
  • Регистрация: 01 Август 12
  • ГородNovosibirsk

Отправлено 10 Ноябрь 2012 - 16:20

lcd_putch((bin_val&(0x80))[color="#FF0000"]?[/color]'1':'0');

Кстати, а для чего здесь знак вопроса?

Сообщение отредактировал BiNaR: 10 Ноябрь 2012 - 16:54

0

#18 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 10 Ноябрь 2012 - 18:55

Читайте буквари :)
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#19 Пользователь офлайн   MuKeXa 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 197
  • Регистрация: 15 Февраль 11
  • ГородУкраина. Киев/ Брусилов/ Фастов

Отправлено 10 Ноябрь 2012 - 20:30

тю блин... Сижу и думаю при чем там color. А это решили знак вопроса выделить цветом в теге [code] )))
?: - очень интересная конструкция, преподавателей в замешательство приводил её использованием )
0

#20 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 10 Ноябрь 2012 - 20:45

Цитата

преподавателей в замешательство приводил её использованием )
:D
Не говорите что мне делать, и я не скажу куда Вам идти !
0

Поделиться темой:


  • 3 Страниц +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей