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

 
 
> ЖК MT-10S1 +AtMega8535
impuls-v
сообщение Jul 18 2006, 09:37
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Вот достался МЭЛТовский ЖК, написал по даташиту програмку, да вот чтото она не работает.
Пожалуйста подскажите что не так в программе.

#include <mega8535.h>
// частота кристалла [Гц]
#define xtal 16000000
// глобальные переменные
unsigned int F1;
//unsigned char RW;
init_LCD(); wait20m(); wait40(); writedata4(unsigned char data); writecode4(unsigned char code); wait1();

// основная программа
void main(void)
{
// локальные переменные
DDRB=0xff; //порт B как выход
PORTB=0X00;
DDRA=0xff; //порт A как выход тест
PORTA=0X00;//тест
#asm("sei"); // разрешение глобальных прерываний (установка бита 07 SREG)
PORTA.0=1; //тест
init_LCD(); // инициализация LCD
PORTA.5=1; //тест
writecode4(0x80+0x40);
PORTA.6=1; //тест
writedata4(0x32);
PORTA.7=1; //тест
while (1);
}

init_LCD(void)
{
PORTA.1=1; //тест
wait20m();
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.2=1; //тест
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x02; // установить4-х разрядн интерфейс
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.3=1; //тест
PORTB=0x02; // установить4-х разрядн интерфейс и выбор второй кодовой страницы (Windows-1251)
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x0A; // установить4-х разрядн интерфейс и выбор второй кодовой страницы (Windows-1251)
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x00; // установка параметров индикатора
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x08; // установка параметров индикатора
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x00; // очистка дисплея
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x01; // очистка дисплея
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.4=1; //тест
//PORTB=0x00; // очистка дисплея
//PORTB.6=1; // установить Е=1 - строб импульс
//wait1();
//PORTB.6=0; // установить Е=0
//PORTB=0x01; // очистка дисплея
//PORTB.6=1; // установить Е=1 - строб импульс
wait1();
//PORTB.6=0; // установить Е=0
//wait40();
wait20m();
PORTB=0x00; // установка режима ввода данных
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x06; // очистка дисплея
wait1();
PORTB.6=1; // установка режима ввода данных
wait1();
PORTB.6=0; // установить Е=0
wait40();
}

wait20m(void) //задержка на 20 мс
{
F1=0x49f0;
while (F1>0) {--F1;};
}


wait40(void)//задержка на 40 мс
{
F1=55;
while (F1>0) {--F1;};
}

writedata4(unsigned char data)
{
//data=(data>>4)|(data<<4);
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=data&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=data&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
/* Пример:

Правильное использование параметров
void change (int *x, int *y)
{ int k=*x;
*x=*y;
*y=k;
}

При вызове такой функции в качестве фактических параметров должны быть использованы не значения переменных, а их адреса

change (&a,&b);
*/

}

writecode4(unsigned char code)
{
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=code&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=code&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();

}

wait1(void) //задержка на переключ
{
F1=0x04;
while (F1>0) {--F1;};
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
SergSit
сообщение Jul 18 2006, 15:09
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 9-12-05
Пользователь №: 12 031



Вы не в CODEVISION писали программу? Если в нем то там есть библиотека для управления LCD
Go to the top of the page
 
+Quote Post
impuls-v
сообщение Jul 18 2006, 20:44
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Я конечно извиняюсь. Но смысл написать самому а не использовать готовое, кто муже библиотека сильно сьедает место.
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jul 18 2006, 22:08
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(impuls-v @ Jul 18 2006, 23:44) *
Я конечно извиняюсь. Но смысл написать самому а не использовать готовое, кто муже библиотека сильно сьедает место.

Кстати встроенная в СV библеотека не будет работать с МЭЛТовскими дисплеями ибо они не соответствуют по коммандам в 4 битном режиме, если надо вышлю Вам исправленный вариант.
Go to the top of the page
 
+Quote Post
impuls-v
сообщение Jul 19 2006, 05:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Было бы очень неплоха. Пришли пожалуйста на filyakov_s(гав-гав)vmtp.ru
Go to the top of the page
 
+Quote Post
Коляй
сообщение Jul 19 2006, 18:30
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 27-04-06
Пользователь №: 16 558



Ды я вот тоже с отечественным ЖКИ возился-возился, а потом думаю, не просто так ребята в документацию на LCD торкают. Почитал, написал три функции пока. (запись команды, запись данных, инициализация). Пока вот с помощью их(точнее всего двух) толкаю в ЖК всякие знаки. В целях изучения так сказать. Если частота кварца увеличивается, просто задержки увеличиваю(в эмуляторе). А работает на железе уже. (Только сильно не смейтесь, я же учусь. )

#include <pindef.h>

void delay (long p) {p*=100;
while (p>0)
p--;}

void LCD_COM(char COM){
LCD_RS=0;
LCD_RW=0;
LCD_DIR=0xFF;
LCD_PORT=COM;
LCD_E=1;
delay(15);
LCD_E=0;
LCD_DIR=0x00;
LCD_PORT=0x00;
delay(40);}

void LCD_DATA (char DATA){
LCD_RS=1;
LCD_RW=0;
LCD_DIR=0xFF;
LCD_PORT=DATA;
LCD_E=1;
delay(15);
LCD_E=0;
LCD_DIR=0x00;
LCD_PORT=0x00;
delay(40);}

void LCD_INIT(void){
delay(30);
LCD_COM(0x30);
delay(40);
LCD_COM(0x30);
delay(40);
LCD_COM(0x30);
delay(40);
LCD_COM(0x3A);//8-bit and rusian
delay(10);
LCD_COM(0x08);
delay(20);
LCD_COM(1);
delay(20);
LCD_COM(0x06);
delay(20);}

}
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jul 19 2006, 19:22
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(impuls-v @ Jul 19 2006, 09:25) *
Было бы очень неплоха. Пришли пожалуйста на filyakov_s(гав-гав)vmtp.ru

Отправил smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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