Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Схемы и программы к микроконтроллерам библиотеки подключения HD44780 к MCS-51


Информационный Канал Subscribe.Ru


Здравствуйте уважаемый подписчик!

Ранее мной было разослано описание контроллера ЖКИ HD44780,в этом выпуске предлагаю
библиотеки для его подключения к контроллеру семейства MCS-51.

Если у Вас возникли вопросы по применению MCS-51 напишите мне rat_e@ngs.ru


//*****************library for work with HD44780(forXX51, KEIL)
//******************************************************* made by Nikolay Chernov

//Для работы с HD44780 просто подключите приведенные ниже функции к Вашему проекту
// и переадресуйте порты согласно Вашей схеме.

bit flag_t_c;


sbit RS  =     0xA5;                                            //присвоение битам порта имен
sbit R_W =     0xA6;                                            //используемых сигналов
sbit En  =     0xA7;


// Определение кодов временных задержек на частоте 2 МГц
        
#define t255_us                         0xFF2A
#define t15_ms                          0xF63B
#define t4_5_ms                         0xFD12
#define t50_us                          0xFFF8
#define t0_4_s                          0x0
#define t0_2_s                          0x7FFF
        
//Определение адреса начала первой и второй строк дисплея
        
#define set_first_line          0x80
#define set_second_line         0xC0


        
// Программирование таймера/счетчика для задания временных интервалов   
        
        void timer0_int(void) interrupt 1               //обработка прерывания от таймера/счетчика0
                {
                        flag_t_c = 1;                                   //Служит для задания временных интервалов
                }
                
                
                union                                                           //Объединение, позволяет преобразовывать
{                                                                                       //время задержки в два байта для таймера
        unsigned int time_delay;
        unsigned char time[2];
}T_C;


//***************************функция временной задержки**************************

        delay(unsigned int time_f)
                {
                        ET0 = 1;                                                        // разрешение прерывания от T/C0
                        T_C.time_delay = time_f;
                        TL0 = T_C.time[1];                                      // инициализация регистров T/C0
                        TH0 = T_C.time[0];
                        do{}while(flag_t_c != 1);
                        ET0 = 0;                                                        // запрет прерывания от T/C0    
                        flag_t_c = 0;
                }



//***************************передача в регистр HD44780*********************

        send_lcd_reg_4wire(unsigned char send_data)
                {
                        RS = 0;                                                                 //установка сигналов
                        R_W = 0;
                        En = 1;
                        P0 = (send_data << 4)|0x0F;                             //выдача в порт
                        delay(t50_us);
                        En = 0;
                }
// В данном случае рассмотрен вариант выдачи через старшие четыре бита порта
P0
// Применена приведенная выше функция временной задержки delay()

        
//***********************функция инициализации HD44780 в 4-х проводном режиме****
        
        init_lcd_4wire()
                {
                
                        En = 0;                                                 // временные задержки, необходимые
                        delay(t0_4_s);                                  // для правильного функционирования
                        delay(t15_ms);
                        send_lcd_reg_4wire(0x3);
                        delay(t4_5_ms);
                        send_lcd_reg_4wire(0x3);
                        delay(t255_us);
                        send_lcd_reg_4wire(0x3);
                        delay(t255_us);

                        send_lcd_reg_4wire(0x2);                        // установка 4-х проводного режима
                        delay(t255_us);

                        send_lcd_reg_4wire(0x2);                        // 4 бита, 2 линии, 5x7 пикселей
                        delay(t255_us);
                        send_lcd_reg_4wire(0x8);
                        delay(t255_us);


                        send_lcd_reg_4wire(0x0);                        // включение дисплея
                        delay(t255_us);
                        send_lcd_reg_4wire(0xC);
                        delay(t255_us);
                        
                        send_lcd_reg_4wire(0x0);                        // очистка дисплея 
                        delay(t255_us);
                        send_lcd_reg_4wire(0x1);
                        delay(t255_us);

                        send_lcd_reg_4wire(0x0);                        // задание режима
                        delay(t255_us);
                        send_lcd_reg_4wire(0x6);
                        delay(t255_us);


// ***********Функция вавода на дисплей в 4-проводном режиме**************

send_lcd_display_4wire(unsigned char address, unsigned char send_data)
                {
                        unsigned char send_data_h, send_data_l, address_l, address_h;

                        address_l = address;                    //адрес иданные разбиваются для передачи 
                        address_h = address >> 4;               // по 4 бита

                        send_data_l = send_data;
                        send_data_h = send_data >> 4;

                        RS = 0;                                                 //установка сигналов управления
                        R_W = 0;
                        En = 1;
                        P0 = (address_h << 4)|0x0F;
                        delay(t50_us);
                        En = 0;
                        delay(t255_us);
                        En = 1;
                        P0 = (address_l << 4)|0x0F;
                        delay(t50_us);
                        En = 0;         

                        delay(t255_us);

                        RS = 1;
                        R_W = 0;
                        En = 1;
                        P0 = (send_data_h << 4)|0x0F;
                        delay(t50_us);
                        En = 0;
                        delay(t255_us);
                        En = 1;
                        P0 = (send_data_l << 4)|0x0F;
                        delay(t50_us);
                        En = 0;                 
                }
// В данном случае рассмотрен вариант выдачи через старшие четыре бита порта
P0

//*************************** функция очистки дисплея *************************


        clear_display()
                {
                        send_lcd_reg_4wire(0x0);                
                        delay(t255_us);
                        send_lcd_reg_4wire(0x1);
                        delay(t255_us);
                }

// пример вывода на первую строку дисплея буквы B
//send_lcd_display_4wire(set_first_line,B);

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное