Меню

 

Форум

Список форумов :: ЖК-индикаторы :: Все перепробывал..
Гость
12 октября 2007 14:41

Id сообщения: 6021
Все перепробывал..
Что имеем ДШ на контроллер и на MT-16S2D также контроллер MSP430. Напряжения питания 3V U0, -LED - подтянуты к GND.
Выкладываю код..
Некоторые пояснения для лучшего прочтения кода приведены со знаком //
//1FFF -50ms
//0FFF -25ms
//04FF -8 ms
//00FF -2 ms
//000F -200mks
/*---------------------------------------------*/
//R/W-27- P2.7
//A0- 26- P2.6
//E- 25- P2.5
//DB6, DB4, DB2, DB0 - P4.0..P4.3
// 0x01, 0x02, 0x04, 0x08
//DB7, DB5, DB3, DB1 - P4.7..P4.4
//0x80, 0x40, 0x20, 0x10
//Все соответствующие порты описанные выше были определены как выходы.
------------------КОД-----------
typedef unsigned char byte;
byte LCD_DB(byte * db){ //Определяет соответствие между DB0..7 и P4.0..7(выводы МК)
static const byte cv_pout_val[]={0x08,0x10,0x04,0x20,0x02,0x40,0x10,0x80};
byte _p4out=0;
_p4out =((db[0] & 0x01) * cv_pout_val[0])
+ ((db[1] & 0x01) * cv_pout_val[1])
+ ((db[2] & 0x01) * cv_pout_val[2])
+ ((db[3] & 0x01) * cv_pout_val[3])
+ ((db[4] & 0x01) * cv_pout_val[4])
+ ((db[5] & 0x01) * cv_pout_val[5])
+ ((db[6] & 0x01) * cv_pout_val[6])
+ ((db[7] & 0x01) * cv_pout_val[7]);

return _p4out;
}
void lcd_init(){
unsigned char init_byte_set[9];
unsigned char init_byte_reset[9];

byte _db[8];
for(int i=0;i<8;i++){
_db[i]=0;
}
// Первая комманда инициализации
_db[5]=1;
_db[4]=1;
init_byte_set[0] = LCD_DB(_db); // высчитывания значения соответствия значения выводов
_db[5]=0;
_db[4]=0;
init_byte_reset[0] = LCD_DB(_db); //Спрос этих значений
// Вторая комманда инициализации
_db[5]=1;
_db[3]=1;
init_byte_set[1] = LCD_DB(_db);
_db[5]=0;
_db[3]=0;
init_byte_reset[1] = LCD_DB(_db);
// Третяя комманда инициализации
_db[2]=1;
_db[3]=1;
init_byte_set[2] = LCD_DB(_db);
_db[2]=0;
_db[3]=0;
init_byte_reset[2] = LCD_DB(_db);
// Чётвёртая комманда инициализации
_db[0]=1;
init_byte_set[3] = LCD_DB(_db);
_db[0]=0;
init_byte_reset[3] = LCD_DB(_db);
// Пятая комманда инициализации
_db[1]=1;
_db[2]=1;
init_byte_set[4] = LCD_DB(_db);
_db[1]=0;
_db[2]=0;
init_byte_reset[4] = LCD_DB(_db);

// Установка E-0,A0-0,RW-0
P2OUT=0x00;
timer1(0x1FFF); //Ожидание 50ms

// Тройная установка разрядности
for(int i=0;i<3;i++){
P4OUT=init_byte_set[0];
P2OUT=0x20;
P4OUT=init_byte_reset[0];
P2OUT&=~0x20;
timer1(0x000F); //ожидание около 250 mks>40mks
}
//1 Установка параметров

P2OUT=0x20; // Установка флага E
P4OUT=init_byte_set[1]; // Установка данных
P2OUT&=~0x20; // Сброс флага E
P4OUT=init_byte_reset[1]; // Сброс данных
delay(1); //50mks


//2 Здесь какая то глупость отключить дисплей (написанно в ДШ на MT-16S2D) Я не совсем понимаю как дальше производится очистка если он отключен??? По этому данная команда у меня отличается...

P2OUT=0x20;
P4OUT=init_byte_set[2];
P2OUT&=~0x20;
P4OUT=init_byte_reset[2];
delay(1);
//3 Очистка дисплея

P2OUT=0x20;
P4OUT=init_byte_set[3];
P2OUT&=~0x20;
P4OUT=init_byte_reset[3];
delay(1);

//4 Установка режима ввода.
P2OUT=0x20;
P4OUT=init_byte_set[4];
P2OUT&=~0x20;
P4OUT=init_byte_reset[4];
delay(1);

Итог данной опирации полное отсутствие жизни у представителя ЖКИ экранов MT-16S2D.. Где что не так.. Подключал на шину анализатора все красиво и аккуратно.. Данные защёлкиваются как положено.. Возникает флаг E через 50mks выставляю данные через 50мкs защёлкиваю Е и ещё через 50мкс защёлкиваю данные.



Код подтверждения:
Для зарегистрированых:
Логин
Пароль
Забыл пароль Регистрация Поиск


Телефоны офиса компании МЭЛТ:
тел: (495) 662-4414
e-mail: sales@melt.com.ru
ICQ: 221-319-648
Skype имя: melt-mos

Фактический адрес: 111024, Москва, Андроновское шоссе, д.26

Adress: 111024, Moscow, Andronovskoe highway, 26.

Адрес для корреспонденции: 109145, г. Москва, а/я 37, ООО "МЭЛТ".

Address for mail:  109145, Moscow, post box 37, MELT Ltd..

Продукция | Печатные платы | Сборочно-монтажные услуги | Документация | Цены | Новости | Контакты | Купить | Форум
создание - prorock web-soft