Глянь, может поможет...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Al Volovich 10 декабря 2004 г. 10:28
В ответ на: LCD 2004 (4 стоки по 20 символов) страшная проблема: отправлено kan 10 декабря 2004 г. 09:25


#define OutPort P0
#define BusyFlag P0_7

#define LCDEn P1_1 // Разрешение записи/чтения
#define LCDRS RD // Выбор регистра данных или команд
#define LCDRW WR // Выбор операции чтения или записи

#define ClearDisplay 0x01
#define ReturnHome 0x02
#define EntryModeSet 0x04
#define DisplayON 0x08
#define CursorShift 0x10
#define FunctionSet 0x20
#define SetCGRAM 0x40
#define SetDDRAM 0x80

#define EntryMode_ID 0x02 // Ввод символов вправо (влево)
#define EntryMode_SH 0x01 // Сдвиг экрана при переполнении строки

#define Display_D 0x04 // Включить дисплей
#define Display_C 0x02 // Включить курсор
#define Display_B 0x01 // Включить мигание курсора

#define Shift_SC 0x08 // Сдвиг дисплея (курсора)
#define Shift_RL 0x04 // Сдвиг вправо (влево)

#define Function_DL 0x10 // Интерфейс 8-разрядный (4-разрядный)
#define Function_N 0x08 // Дисплей 2-строчный (1-строчный)
#define Function_F 0x04 // Символы 5х11 (5х8)


bit BusyLCD() // Проверка занятости дисплея
{
OutPort=0xFF;
LCDRS=0;
LCDRW=1;
LCDEn=1;
CY=BusyFlag;
LCDEn=0;
return (CY);
}

//====================================================================================
InstructionLCD(ubyte Instruction) // Запись команды в дисплей
{
OutPort=Instruction;
LCDRS=0;
LCDRW=0;
LCDEn=1;
LCDEn=0;
}

CursorOn(void){ //включает курсор
InstructionLCD(DisplayON|Display_D|Display_C);
while(BusyLCD()==1);
}

CursorOff(void){ //выключает курсор
InstructionLCD(DisplayON|Display_D);
while(BusyLCD()==1);
}

BlinkOn(void){ //включает блинк курсора
InstructionLCD(DisplayON|Display_D|Display_C|Display_B);
while(BusyLCD()==1);
}

putchar(ubyte ccc) //выводит символ в текущую позицию курсора
{
OutPort=ccc;
LCDRS=1;
LCDRW=0;
LCDEn=1;
LCDEn=0;
while(BusyLCD()==1);
}

GotoXY(ubyte col, ubyte line) //перемещает курсор в указанную позицию 0,0 - левый верх
{
if(line&0x01)col+=0x40;
if(line&0x02)col+=LCDCol;

LCDRS=0;
LCDRW=0;
LCDEn=1;
OutPort=SetDDRAM|col;
LCDEn=0;
while(BusyLCD()==1);
}

//================ Очищает дисплей и переводит курсор в начало ======================
ClrScr(void){
InstructionLCD(ClearDisplay); // Очищаем дисплей
while(BusyLCD()==1);
}

//////////////////////////////////////////////////////////////////////////////////////
InitLCD(void) // Инициализация дисплея
{
LCDEn=0;
while(BusyLCD()==1);

InstructionLCD(FunctionSet|Function_DL|Function_N); //Ширина интерфейса 8 бит, 2 строки
while(BusyLCD()==1);

InstructionLCD(DisplayON|Display_D); // Display ON
while(BusyLCD()==1);

ClrScr();
}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru