Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Не могу победить WH1602A-YGB :((((0

Отправлено Двоешник (193.200.150.152) 16 марта 2010, г. 19:11


Две строки по 16 символов в каждой. Экранчик целый (с принтера снял) Управляю контрастом, и подсветкой, использую режим в котором данные записываются по 4 бита.
Если отрегулировать контраст, то просматривается заполненная верхняя строка, символы не выводит. Проверил уже все что только мог придумать, подскажите где ошибка?
Вот код:

...

#define LCD_CLEAR() LCD_Set(0x01)
#define LCD_RESET() LCD_Set(0x02)
#define LCD_AC_DEC_MODE() LCD_Set(0x04)
#define LCD_AC_INC_MODE() LCD_Set(0x06)
#define LCD_SHIFT_LEFT_MODE() LCD_Set(0x05)
#define LCD_SHIFT_RIGHT_MODE() LCD_Set(0x07)
#define LCD_DISPLAY_ON() LCD_Set(0x0C)
#define LCD_DISPLAY_OFF() LCD_Set(0x08)
#define LCD_CURSOR_ON() LCD_Set(0x0E)
#define LCD_CURSOR_OFF() LCD_Set(0x08)
#define LCD_BLANK_ON() LCD_Set(0x0D)
#define LCD_BLANK_OFF() LCD_Set(0x08)
#define LCD_SET_CURSOR_LEFT() LCD_Set(0x10)
#define LCD_SET_CURSOR_RIGHT() LCD_Set(0x14)
#define LCD_SET_DISPLAY_LEFT() LCD_Set(0x18)
#define LCD_SET_DISPLAY_RIGHT() LCD_Set(0x1C)
#define LCD_SET_CGR_ADDR(a) LCD_Set(0x40 | a)
#define LCD_SET_DDR_ADDR(a) LCD_Set(0x80 | a)



void LCD_Bus_Write(char data){
CLR_D7();
CLR_D6();
CLR_D5();
CLR_D4();
if (data & 0x80){SET_D7();}
if (data & 0x40){SET_D6();}
if (data & 0x20){SET_D5();}
if (data & 0x10){SET_D4();}
SET_E();
Delay_mSeconds(1);
CLR_E();
Delay_mSeconds(10);
CLR_D7();
CLR_D6();
CLR_D5();
CLR_D4();
if (data & 0x08){SET_D7();}
if (data & 0x04){SET_D6();}
if (data & 0x02){SET_D5();}
if (data & 0x01){SET_D4();}
SET_E();
Delay_mSeconds(1);
CLR_E();
Delay_mSeconds(4);
}


void LCD_Set(char cmd){
LCD_Bus_Write(cmd);
}






void LCD_GOTO_XY(char x,char y){
if(y==1) {LCD_SET_DDR_ADDR(x);}
if(y==2) {LCD_SET_DDR_ADDR(x+64);}
}
void LCD_Init(void){
Delay_mSeconds(350);
LCD_Bus_Write(0x30);
Delay_mSeconds(5);
LCD_Bus_Write(0x30);
Delay_mSeconds(1);
LCD_Bus_Write(0x30);
LCD_Bus_Write(0x32);
LCD_Bus_Write(0x28);
LCD_Bus_Write(0x08);
LCD_Bus_Write(0x01);
LCD_Bus_Write(0x06);
LCD_DISPLAY_OFF();
LCD_RESET();
LCD_CLEAR();
LCD_DISPLAY_ON();
LCD_GOTO_XY(0,0);
}






void LCD_DisplayCharacter ( char Char){
SET_RS();
Delay_mSeconds(1);
LCD_Bus_Write (Char);
CLR_RS();
Delay_mSeconds(1);
}



void LCD_DisplayString (unsigned char *string){
while (*string)
LCD_DisplayCharacter (*string++);
}


Init_Devices(){
...
LCD_Init();
...
}

...

main(void){
Init_Devices();
LCD_GOTO_XY(0,1); LCD_DisplayString("Hello World!");
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 45:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru