Цитата(alux @ Jun 11 2008, 19:24)

Но обязательно использую этот исходник в следующем проекте.
Согласно комментариям в шапках каждого файла этот исходник распространяется под лицензией GPL. Вы готовы раскрыть исходные коды своего следующего проекта?
Кода немного, имеет смысл посмотреть как написан этот исходник (для осваивающих плюсы образец неплохой) и написать самому. По коду (смотрел бегло):
- вместо передачи в LCD::send() признака команда/данные как параметра лучше написать две функции. Причем одна из них может сбрасывать RS и вызывать вторую, а вторая в конце выставлять RS. Таким образом после любой операции с дисплеем RS в единице и при вызове второй функции его принудительно выставлять не нужно. Хороший компилятор может сгенерить из этих двух функций одну с двумя точками входа.
- при загрузке знакосинтезатора нет смысла передавать 8 байтов параметрами, эффективнее передать указатель на массив. Финт: поскольку 3 старших бита не выводятся, можно в старший из них записать единичку, девятым байтом в массив дописать ноль и таким образом превратить массив в С-строку. Потом можно заметить, что загружать можно все символы сразу одной командой (чаще всего требуется один раз при старте загрузить нужное количество символов и в процессе работы они не перегружаются). Потом становится видно, что после посылки команды установки адреса CGRAM дальнейшая загрузка очень похожа на вывод строки. Таким образом вся загрузка вырождается в посылку команды установки CGRAM и вызов функции вывода строки.
- функции, которые вызываются только один раз (конструктор, например) можно сделать встроенными.
- константы, заданные через #define (команды дисплея) можно перенести внутрь класса как static const члены или enum (что логичнее).
В общем критиковать всегда легко