Easyelectronics.ru

Электроника для всех
Текущее время: 30 мар 2017, 09:57

Часовой пояс: UTC + 5 часов



    • Изготовление печатных плат
    • Создание принципиальных схем и проектирование печатных плат
    • Симуляция работы на spice моделях
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: ADuC841. Работа с ЖКИ
СообщениеДобавлено: 07 фев 2016, 14:54 
Здравствуйте!

Зарегистрирован: 07 фев 2016, 14:47
Сообщения: 1
Здравствуйте. Есть плата ADuC841 на которой установлен LCD hd44780. Есть программа которая должна с ним работать, но она не работает. Можете посмотреть и подсказать что может быть не так?

Код:
#include <stdio.h>
#include <ADuC841.h>


#define LCD_HORIZ_SIZE  16
#define LCD_VERT_SIZE   2
#define LCD_BYTES_PER_LINE  (128 / LCD_VERT_SIZE)
#define LCD_CLEAR_CMD 0x01 // очистка
#define LCD_HOME_CMD 0x02  // возврат в самое начало
#define LCD_ON_CMD 0x0C    // курсор отключен, мигание отключено, дисплей вкл
#define LCD_SHIFT_CMD 0x14
#define LCD_CONFIG_CMD 0x38  // 5 на 7 пикселей и 2 строки 8 бит интерфейс



unsigned char xdata lcd_command_wr    _at_ 0xFE00;
unsigned char xdata lcd_status_rd    _at_ 0xFE01;
unsigned char xdata lcd_data_wr    _at_ 0xFE02;
unsigned char xdata lcd_data_rd    _at_ 0xFE03;

void delay16 (unsigned int i);
void lcd_busy(void);
void lcd_command(unsigned char cmd);
void lcd_putchar(char c);
void lcd_init(void);
void lcd_clear(void);
void lcd_home(void);
void lcd_set_xy(unsigned int x,y);


void delay16 (unsigned int i)
{
  do {} while(--i);
}
void lcd_busy(void)
{
   while (lcd_status_rd & 0x80)  ;
}


void lcd_command(unsigned char cmd)
{
   lcd_busy();
   lcd_command_wr = cmd;
}
void lcd_putchar(char c)
{
   lcd_busy();
   lcd_data_wr = c;
}

void lcd_init(void)
{   delay16(400);
   lcd_command(LCD_CONFIG_CMD);
   delay16(30000);
   lcd_command(LCD_ON_CMD);
   delay16(400);
   lcd_command(LCD_SHIFT_CMD);
   delay16(400);
   
}
void lcd_clear(void)
{
   lcd_command(LCD_CLEAR_CMD);
}

void lcd_home(void)
{
   lcd_command(LCD_HOME_CMD);
}
void lcd_set_xy(unsigned int x, y)
{
   
   switch (y) {
    case 0: y=0;    break;
    case 1: y=0x40; break;
 
   }
   
   
   lcd_busy();
   lcd_command_wr = (y * LCD_BYTES_PER_LINE + x) | 0x80;
}


void main()
{char c;

   lcd_init();

while (1) {

      lcd_clear();
      lcd_home();
      lcd_set_xy(0, 0);
      lcd_putchar('H');
      lcd_putchar('e');
      lcd_putchar('l');
      lcd_putchar('l');
      lcd_putchar('0');
      lcd_putchar('!');
}
}





Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ADuC841. Работа с ЖКИ
СообщениеДобавлено: 08 фев 2016, 10:23 
Свой человек

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 158
Хм... А как же оно работать вообще должно? Где функции дрыганья ножками E/RS/RW? Индикатор же не знает тогда, что с ним вообще делают: читают или пишут, в IR или DR, да и вообще, КОГДА это делают.
Или я чего-то не понял?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB