Страница 1 из 15
Работа с графическими ЖКИ на контроллере KS0108 и аналогах
Добавлено: Сб май 12, 2007 09:15:56
Пожиратель AVR
Тут на сайте я нашел интересную статью о подключении графического LCD дисплея WG12864A и захотел тоже попробать .Для начала я взял самую простейшию програму .
#include <iom8v>
#include <macros>
#include <stdlib>
#define SetBit(x,y) (x|=y)
#define ClrBit(x,y) (x&=~y)
#define TestBit(x,y) (x&y)
#define LCD_RST 0b00000001
#define LCD_E 0b00000010
#define LCD_RW 0b00000100
#define LCD_RS 0b00001000
#define LCD_CS2 0b00010000
#define LCD_CS1 0b00100000
#define LCD_DB PORTD
#define LCD_COM PORTC
#include "delay.h"
#include "ks0108.h"
void main()
{
DDRC=0xFF;
DDRD=0xFF;
init_lcd();
Delay_ms(10);
clear();
Delay_ms(1);
WriteXY(6,2,LCD_CS1);
Delay_ms(1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b01001000,LCD_CS1);
WriteData(0b11110000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b01100010,LCD_CS1);
WriteData(0b01100001,LCD_CS1);
WriteData(0b00000010,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b01010000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b01100010,LCD_CS1);
WriteData(0b01100001,LCD_CS1);
WriteData(0b00000010,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b11110000,LCD_CS1);
WriteData(0b01001000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);
WriteXY(6,3,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00000011,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00010000,LCD_CS1);
WriteData(0b00100000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b10001000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b10010101,LCD_CS1);
WriteData(0b10010010,LCD_CS1);
WriteData(0b10010101,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b10001000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b00100000,LCD_CS1);
WriteData(0b00010000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00000011,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
while(1);
}
Нувот я еёвставил в компилятор CVAVR и он мне выдал вот 3 ошибки
Смотрите ниже скришоты
Добавлено: Сб май 12, 2007 09:17:03
Пожиратель AVR
Ошибка
Добавлено: Сб май 12, 2007 09:17:54
Пожиратель AVR
и еше компилятор выдал
Добавлено: Сб май 12, 2007 09:50:30
tych
Нет.
Я полагаю что исходник у вас под компилятор imagecraft.com - узнайте там где вы его взяли.
Добавлено: Пн май 14, 2007 16:33:59
moLCHec
Иван.паяльшик виноват, что не оперативно ответил, дела замотали. Моя статья. Начнём по порядку #include <iom8v> выдаёт ошибку по тому что видимо у вашего компилятора другое название заголовочного файла для кристалла какое именно надо уточнить в документации на компилятор собственно поэтому ругается на DDRD, про init_lsd не знаю пока, возможно после устранения первых двух ошибок остальное нормализуется. Компилятор ICC for AVR могу скинуть вместе с лекарством и описанием на русском для этого надо написать мне в личку или аську. tych ярый поклонник вашего компилятора пусть напишет какие праильные названия заголовков для кристаллов. Кстати функции putc и puts немного уточнены символы 10 и 13 отображаются , и . Могу выложить. Скажу честно у меня претензий к работе не было, активно пользую фукции текста. С курсором пока не работал, только пока статью писал функцию сделал думал пригодиться.
У вас в компиляторе надо объявить вместо <iom8v> <mega8> если не поможет скачайте файл который прикреплён и положите его в папку с кодом, тогда надо объявить <m8_128>
Добавлено: Пн май 14, 2007 16:50:08
tych
именно с .h
Добавлено: Пн май 14, 2007 16:51:45
moLCHec
tych прав с .h я так и писал тока отображается без него, просьба адм. принять меры.
Добавлено: Пн май 14, 2007 17:38:30
Пожиратель AVR
Ну я сделал все возможное и вложил Файл который мне выложили в папку INC менял имя и нечего как выдавало 2 ошибки так и выдает:))
У меня в компиляторе в паке INC есть файл MEGA8 как я понел это и есть заголовочный файл , я попробал также написать и в програме
#include <MEGA8>
#include <macros>
#include <stdlib>
И он мне выдает ошибки
Добавлено: Пн май 14, 2007 17:52:32
moLCHec
Файл должен лежать в той же папке где код программы и файл ks0108.h тоже поэтому я подозреваю init_lcd ругает, объявляете правильно надо так
#include <полное название файла>
Если совсем ничего не помогает создайте пустой проект мастером кода по контроллер mega8 и посмотрите какие мастер делает заголовки для этого контроллера.
Попробуйте сначала просто сделать какой нибудь простенький проект чтоб разобраться с компилятором
Добавлено: Вт май 15, 2007 11:09:03
Пожиратель AVR
А что мы делаем вот этими двумя командами
#include <macros>
#include <stdlib>
что ими открываем и у меня компилятор ругается на файл файл ks0108.h у меня его тоже нет!!!
Добавлено: Вт май 15, 2007 11:19:45
Пожиратель AVR
Ну вот я закинул эти два файла которые вы мне дали и теперь компилятор выдает вот такую ошибку
Добавлено: Вт май 15, 2007 16:21:37
moLCHec
Я понимаю что вы ещё начинающий но учитесь думать сами, код написан под другой компилятор соответственно при переносе надо смотреть чтоб соответстволи команды. Си тоже знать надо хотя бы азы. Вы похоже сразу схватились за куш, не разобравших в азах тем не менее объясняю оператор #include включает указанный файл в код программы, это делается для того чтоб не захлямлять основной код. При этом файл должен находится в той же директории что исполняемый файл, т.е. тот в котором мы включаем, исключения составляют служебные файлы с функциями они находятся в специально отведённой директории как правило include, в настройках можно его изменить, но не стоит. системные файлы включаются в знаки <>, обычные которые повторюсь должны лежать в той же дирректории или вложенной папке (тогда надо указать полный путь) пишутся в кавычках
#include <macros>
это объявление специфичное для данного компилятора необходимое для того чтоб работали Си макросы т.е. #define
#include <stdlib>
включает строковые и часть символьных функций, является типовым для языка Си в целом, возможно спецефичен для вашего компилятора
NOP();
это пустая команда в вашем компиляторе она может быть отличной
в асемблере она так и обозначается
nop
Файл ks0108.h должен обязательно быть в дирректории с файлом ks.c(или какой у вас исполняемый) без него ничего работать никогда не будет т.к. функции для работы с индикатором я включил туда для удобства пользования см. статью.
Разберитесь со своим компилятором. Почитайте докуметацию
Добавлено: Ср июн 13, 2007 11:56:49
Пожиратель AVR
Помогите компилятор выдает вот такие ошибки
C:\iccv7avr\bin\imakew -f LCD.mak
iccavr -c -e -D__ICC_VERSION="7.03C" -DATMega8 -l -g -Mavr_enhanced_small -Wa-W C:\iccv7avr\LCD\ks_c.c
!W C:\iccv7avr\LCD\ks0108.h(129):[warning] calling function without prototype may cause errors
!E C:\iccv7avr\LCD\ks0108.h(142): undeclared identifier `LCD_IO'
!E C:\iccv7avr\LCD\ks0108.h(151): undeclared identifier `LCD_DBI'
C:\iccv7avr\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1
что надо делать?
делал проэкт в ImageCraft Development Tools
Добавлено: Вс окт 28, 2007 09:06:03
nerozero
Здравствуйте, переписал ваш пример под winavr, появилось много вопросов, из Даташита, ks0108 имеет инвертированный reset на приведенной вами картинке с "котом" rst - имеет высокий уровень, в коде не обнаружил никаких ссылок на это.
не могли-б вы вы выложить рабочий hex файл?
Добавлено: Вс окт 28, 2007 09:12:18
moLCHec
На индикаторе reset снабжён системмой сброса кондёр-резистор. поэтому я его вообще не подключаю. когда писалась статья про это я не знал и чесно уже не помню, что там и как в той версии. Прошивку сегодня выложу в течении дня. Тока мне надо знать под железку компилировать или под Протеус есть разница про которую писал в статье
Добавлено: Чт дек 13, 2007 16:56:51
Denis-d20
Hарод драсте если вместо WG12864A с контроллером ks0108 взять НBG128128AGPL с контроллером LC7981 особые изменения кроме того что он 128*128 прийдется делать?
Добавлено: Чт дек 13, 2007 17:08:34
lexmulya
Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой
Добавлено: Чт дек 13, 2007 17:44:04
moLCHec
lexmulya
С бысторой графикой это как?
быстрее чем ks0108 читает все равно не получится

Я вроде под максимум писал с небольшим запасом.
А про статус я тоже сначало было заморочился, но вспомнил про принцип разумной достаточности. Работал с данным ЖК много. пока нареканий не выявленно, тока библиотеки немного обновил
на LC7981 где то дока была ... могу поискать если надо. Он вроде даже в протеусе есть.
Добавлено: Пт дек 14, 2007 23:40:47
Denis-d20
lexmulya писал(а):Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой
Если не трудно то скинь.
Добавлено: Вс дек 16, 2007 08:55:30
moLCHec
Файл ks0108.h в статье имеетсясмотрите внимательнее