Easyelectronics.ru

Электроника для всех
Текущее время: 25 мар 2017, 12:52

Часовой пояс: 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
Сообщения: 154
Хм... А как же оно работать вообще должно? Где функции дрыганья ножками E/RS/RW? Индикатор же не знает тогда, что с ним вообще делают: читают или пишут, в IR или DR, да и вообще, КОГДА это делают.
Или я чего-то не понял?


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

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


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

Сейчас этот форум просматривают: Yahoo [Bot]


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

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

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