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

 
 
> ЖК 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



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

 


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


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