#define LCD_E 0b00010000 #define LCD_RW 0b01000000 #define LCD_RS 0b00100000 void lcd_init(void) //инициализация дисплея { PORT_LCD=0b00000011; //8-бит NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_ms(5); PORT_LCD=0b00000011; //8-бит NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(110); PORT_LCD=0b00000011; //8-бит NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00000010; //4-бит NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00000010; //4-бит NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00001100; //SET NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0; NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00001000; NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0; NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00000001; NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0; NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); PORT_LCD=0b00000110; //Set NOP(); SetBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_ms(2); } void WriteSym(char sym) //запись символа в активную область { char _temp; _temp=sym; asm("swap %sym"); sym &=0x0F; sym |=LCD_RS; sym |=LCD_E; NOP(); NOP(); PORT_LCD=sym; NOP(); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); sym=_temp; sym &=0x0F; sym |=LCD_RS; sym |=LCD_E; NOP(); NOP(); PORT_LCD=sym; NOP(); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); Delay_mks(43); } void WriteDDR(char ddr) //выбор адреса { char _temp; _temp=ddr; asm("swap %ddr"); ddr&=0x0F; ddr|=LCD_E; ClrBit(ddr,LCD_RS); //ClrBit(ddr,LCD_RW); PORT_LCD=ddr; NOP(); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); NOP(); NOP(); NOP(); ddr=_temp; ddr&=0x0F; ddr|=LCD_E; ClrBit(ddr,LCD_RS); PORT_LCD=ddr; NOP(); NOP(); NOP(); NOP(); ClrBit(PORT_LCD,LCD_E); Delay_mks(43); } void lcd_puts(char stp[],int delay) // вывод строки на дисплей с задержкой { int n=0; for(n;n=16) return; if(stp[n]!=0xFF) { WriteSym(stp[n]); Delay_ms(delay); } } } void lcd_rus(char stp[]) //вывод строки по-русски { int n=0; for(n;n=16) return; Delay_mks(100); switch(stp[n]) { case 192: WriteSym(65); break; case 'а': WriteSym('a'); break; case 'Б': WriteSym(160); break; case 'б': WriteSym(178); break; case 'В': WriteSym('B'); break; case 'в': WriteSym(179); break; case 'Г': WriteSym(161); break; case 'г': WriteSym(180); break; case 'Д': WriteSym(224); break; case 'д': WriteSym(227); break; case 'Е': WriteSym('E'); break; case 'е': WriteSym('e'); break; case 'Ё': WriteSym(162); break; case 'ё': WriteSym(181); break; case 'Ж': WriteSym(163); break; case 'ж': WriteSym(182); break; case 'З': WriteSym(164); break; case 'з': WriteSym(183); break; case 'И': WriteSym(165); break; case 'и': WriteSym(184); break; case 'Й': WriteSym(166); break; case 'й': WriteSym(185); break; case 'К': WriteSym('K'); break; case 'к': WriteSym('k'); break; case 'Л': WriteSym(167); break; case 'л': WriteSym(187); break; case 'М': WriteSym('M'); break; case 'м': WriteSym(188); break; case 'Н': WriteSym('H'); break; case 'н': WriteSym(189); break; case 'О': WriteSym('O'); break; case 'о': WriteSym('o'); break; case 'П': WriteSym(168); break; case 'п': WriteSym(190); break; case 'Р': WriteSym('P'); break; case 'р': WriteSym('p'); break; case 'С': WriteSym('C'); break; case 'с': WriteSym('c'); break; case 'Т': WriteSym('T'); break; case 'т': WriteSym(191); break; case 'У': WriteSym(169); break; case 'у': WriteSym(121); break; case 'Ф': WriteSym(0xAA); break; case 'ф': WriteSym(0xE4); break; case 'Х': WriteSym(88); break; case 'х': WriteSym(120); break; case 'Ц': WriteSym(225); break; case 'ц': WriteSym(229); break; case 'Ч': WriteSym(171); break; case 'ч': WriteSym(192); break; case 'Ш': WriteSym(172); break; case 'ш': WriteSym(193); break; case 'Щ': WriteSym(226); break; case 'щ': WriteSym(230); break; case 'Ъ': WriteSym(173); break; case 'ъ': WriteSym(194); break; case 'Ы': WriteSym(174); break; case 'ы': WriteSym(195); break; case 'Ь': WriteSym(98); break; case 'ь': WriteSym(196); break; case 'Э': WriteSym(175); break; case 'э': WriteSym(197); break; case 'Ю': WriteSym(176); break; case 'ю': WriteSym(198); break; case 'Я': WriteSym(177); break; case 'я': WriteSym(199); break; default : WriteSym(stp[n]); break; } } } void Write_CGRAM(void) { WriteDDR(0x40); //WriteSym(0); WriteSym(0); WriteSym(0b00000100); WriteSym(0b00000010); WriteSym(0b11111111); WriteSym(0b00000010); WriteSym(0b00000100); WriteSym(0); WriteSym(0); Delay_ms(2); WriteDDR(0x48); WriteSym(0b00000110); WriteSym(0b00001001); WriteSym(0b00001001); WriteSym(0b00000110); WriteSym(0); WriteSym(0); WriteSym(0); WriteSym(0); }