|
#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