Работа с графическими ЖКИ на контроллере KS0108 и аналогах
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
Работа с графическими ЖКИ на контроллере KS0108 и аналогах
Тут на сайте я нашел интересную статью о подключении графического 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 ошибки
Смотрите ниже скришоты
#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 ошибки
Смотрите ниже скришоты
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Нет.
Я полагаю что исходник у вас под компилятор imagecraft.com - узнайте там где вы его взяли.
Я полагаю что исходник у вас под компилятор imagecraft.com - узнайте там где вы его взяли.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
Иван.паяльшик виноват, что не оперативно ответил, дела замотали. Моя статья. Начнём по порядку #include <iom8v> выдаёт ошибку по тому что видимо у вашего компилятора другое название заголовочного файла для кристалла какое именно надо уточнить в документации на компилятор собственно поэтому ругается на DDRD, про init_lsd не знаю пока, возможно после устранения первых двух ошибок остальное нормализуется. Компилятор ICC for AVR могу скинуть вместе с лекарством и описанием на русском для этого надо написать мне в личку или аську. tych ярый поклонник вашего компилятора пусть напишет какие праильные названия заголовков для кристаллов. Кстати функции putc и puts немного уточнены символы 10 и 13 отображаются , и . Могу выложить. Скажу честно у меня претензий к работе не было, активно пользую фукции текста. С курсором пока не работал, только пока статью писал функцию сделал думал пригодиться.
У вас в компиляторе надо объявить вместо <iom8v> <mega8> если не поможет скачайте файл который прикреплён и положите его в папку с кодом, тогда надо объявить <m8_128>
У вас в компиляторе надо объявить вместо <iom8v> <mega8> если не поможет скачайте файл который прикреплён и положите его в папку с кодом, тогда надо объявить <m8_128>
- Вложения
-
- m8_128.h
- (54 КБ) 2013 скачиваний
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
именно с .h
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
Ну я сделал все возможное и вложил Файл который мне выложили в папку INC менял имя и нечего как выдавало 2 ошибки так и выдает:))
У меня в компиляторе в паке INC есть файл MEGA8 как я понел это и есть заголовочный файл , я попробал также написать и в програме
#include <MEGA8>
#include <macros>
#include <stdlib>
И он мне выдает ошибки
У меня в компиляторе в паке INC есть файл MEGA8 как я понел это и есть заголовочный файл , я попробал также написать и в програме
#include <MEGA8>
#include <macros>
#include <stdlib>
И он мне выдает ошибки
- Вложения
-
- ошибка.GIF
- (4.95 КБ) 2078 скачиваний
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
Файл должен лежать в той же папке где код программы и файл ks0108.h тоже поэтому я подозреваю init_lcd ругает, объявляете правильно надо так
#include <полное название файла>
Если совсем ничего не помогает создайте пустой проект мастером кода по контроллер mega8 и посмотрите какие мастер делает заголовки для этого контроллера.
Попробуйте сначала просто сделать какой нибудь простенький проект чтоб разобраться с компилятором
#include <полное название файла>
Если совсем ничего не помогает создайте пустой проект мастером кода по контроллер mega8 и посмотрите какие мастер делает заголовки для этого контроллера.
Попробуйте сначала просто сделать какой нибудь простенький проект чтоб разобраться с компилятором
- Вложения
-
- delay.h
- Вот файл задержек они правда под 16МГц, но меня это ничуть не смущает в данном коде это не критично
- (446 байт) 1746 скачиваний
-
- iom8v.h
- Вот заголовочный файл моего компилятора
- (11.12 КБ) 1603 скачивания
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
Ну вот я закинул эти два файла которые вы мне дали и теперь компилятор выдает вот такую ошибку
- Вложения
-
- Ошибочка.GIF
- (14.65 КБ) 1995 скачиваний
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
Я понимаю что вы ещё начинающий но учитесь думать сами, код написан под другой компилятор соответственно при переносе надо смотреть чтоб соответстволи команды. Си тоже знать надо хотя бы азы. Вы похоже сразу схватились за куш, не разобравших в азах тем не менее объясняю оператор #include включает указанный файл в код программы, это делается для того чтоб не захлямлять основной код. При этом файл должен находится в той же директории что исполняемый файл, т.е. тот в котором мы включаем, исключения составляют служебные файлы с функциями они находятся в специально отведённой директории как правило include, в настройках можно его изменить, но не стоит. системные файлы включаются в знаки <>, обычные которые повторюсь должны лежать в той же дирректории или вложенной папке (тогда надо указать полный путь) пишутся в кавычках
#include <macros>
это объявление специфичное для данного компилятора необходимое для того чтоб работали Си макросы т.е. #define
#include <stdlib>
включает строковые и часть символьных функций, является типовым для языка Си в целом, возможно спецефичен для вашего компилятора
NOP();
это пустая команда в вашем компиляторе она может быть отличной
в асемблере она так и обозначается
nop
Файл ks0108.h должен обязательно быть в дирректории с файлом ks.c(или какой у вас исполняемый) без него ничего работать никогда не будет т.к. функции для работы с индикатором я включил туда для удобства пользования см. статью.
Разберитесь со своим компилятором. Почитайте докуметацию
#include <macros>
это объявление специфичное для данного компилятора необходимое для того чтоб работали Си макросы т.е. #define
#include <stdlib>
включает строковые и часть символьных функций, является типовым для языка Си в целом, возможно спецефичен для вашего компилятора
NOP();
это пустая команда в вашем компиляторе она может быть отличной
в асемблере она так и обозначается
nop
Файл ks0108.h должен обязательно быть в дирректории с файлом ks.c(или какой у вас исполняемый) без него ничего работать никогда не будет т.к. функции для работы с индикатором я включил туда для удобства пользования см. статью.
Разберитесь со своим компилятором. Почитайте докуметацию
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
- Пожиратель AVR
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт янв 11, 2007 12:14:33
- Контактная информация:
Помогите компилятор выдает вот такие ошибки
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
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
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
На индикаторе reset снабжён системмой сброса кондёр-резистор. поэтому я его вообще не подключаю. когда писалась статья про это я не знал и чесно уже не помню, что там и как в той версии. Прошивку сегодня выложу в течении дня. Тока мне надо знать под железку компилировать или под Протеус есть разница про которую писал в статье
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
-
lexmulya
- Встал на лапы
- Сообщения: 124
- Зарегистрирован: Ср авг 29, 2007 10:42:31
- Контактная информация:
Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
lexmulya
С бысторой графикой это как?
быстрее чем ks0108 читает все равно не получится
Я вроде под максимум писал с небольшим запасом.
А про статус я тоже сначало было заморочился, но вспомнил про принцип разумной достаточности. Работал с данным ЖК много. пока нареканий не выявленно, тока библиотеки немного обновил
на LC7981 где то дока была ... могу поискать если надо. Он вроде даже в протеусе есть.
С бысторой графикой это как?
быстрее чем ks0108 читает все равно не получится
А про статус я тоже сначало было заморочился, но вспомнил про принцип разумной достаточности. Работал с данным ЖК много. пока нареканий не выявленно, тока библиотеки немного обновил
на LC7981 где то дока была ... могу поискать если надо. Он вроде даже в протеусе есть.
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
- Denis-d20
- Открыл глаза
- Сообщения: 52
- Зарегистрирован: Сб ноя 24, 2007 10:06:53
- Откуда: Украина,хмельницкий
- Контактная информация:
lexmulya писал(а):Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой
Если не трудно то скинь.