//**************************************************************************************************** //************************************ my_lcd.c ************************************************ //**************************************************************************************************** //************************************ Месяц А. ************************************************ //**************************************************************************************************** //1.Скопировать этот файл в папку с проектом и подключить при помощи " #include " //2.Подключить порты к LCD и сконфигурировать их на выход. #include #include //**************************************************************************************************** //**************************** Настройка подключения LCD ******************************************* //**************************************************************************************************** #define COLUMNS 16 //количество символов в строке #define EN PORTA.7 #define RS PORTA.6 #define LCD_PD4 PORTC.7 #define LCD_PD5 PORTC.6 #define LCD_PD6 PORTC.5 #define LCD_PD7 PORTC.4 //**************************************************************************************************** //**************************************************************************************************** //**************************************************************************************************** #define COMAND 0 // Команда #define DATA 1 // Данные #define lcd_delay 1 //При необходимости, подстроить #pragma used+ //функции void lcd_write(unsigned char data, unsigned char mode); void lcd_init(void); void lcd_putchar(unsigned char data); // отображение 1 символа в позиции (последняя + 1) void lcd_gotoxy(unsigned char x, unsigned char y); // задание позиции 1 символа x - символ =0..39 y - строка =0..3 void lcd_clear(void); // очистка LCD void lcd_puts(char *str); // вывод символа расположенного в SRAM на LCD void lcd_putsf(char flash *str); // вывод символа расположенного в FLASH на LCD void lcd_cursor_on(void); void lcd_cursor_off(void); void lcd_clear_string(unsigned char y,unsigned char from,unsigned char to);// очистка нужного количества символов в строке //**************************************************************************************************** flash unsigned char base_y[4]={0x80,0xc0,0x80+COLUMNS,0xc0+COLUMNS};// стартовые значения 1 и 2 строки unsigned char lcd_x, lcd_y; // переменные для хранения последней позиции символа //**************************************************************************************************** void lcd_write(unsigned char data, unsigned char mode){ if (mode)RS = 1;else RS = 0; //выбор режима 1-data 0-comand delay_us(lcd_delay); // старший нибл if (data & (1<<7)) LCD_PD7=1; else LCD_PD7=0; if (data & (1<<6)) LCD_PD6=1; else LCD_PD6=0; if (data & (1<<5)) LCD_PD5=1; else LCD_PD5=0; if (data & (1<<4)) LCD_PD4=1; else LCD_PD4=0; EN = 1; delay_us(lcd_delay); EN = 0; delay_us(lcd_delay); //младший нибл if (data & (1<<3)) LCD_PD7=1; else LCD_PD7=0; if (data & (1<<2)) LCD_PD6=1; else LCD_PD6=0; if (data & (1<<1)) LCD_PD5=1; else LCD_PD5=0; if (data & (1<<0)) LCD_PD4=1; else LCD_PD4=0; EN = 1; delay_us(lcd_delay); EN = 0; delay_us(lcd_delay); LCD_PD7=1; LCD_PD6=1; LCD_PD5=1; LCD_PD4=1; delay_ms(lcd_delay); }//lcd_write() //**************************************************************************************************** void lcd_init(){ RS=0; EN=0; delay_ms(200); lcd_write(0x33, COMAND); delay_ms(5); lcd_write(0x32, COMAND); lcd_write(0x28, COMAND); // 4 бит, 2 строки lcd_write(0x08, COMAND); // полное выключение дисплея lcd_write(0x01, COMAND); // очистка дисплея lcd_write(0x06, COMAND); // сдвиг курсора вправо lcd_write(0x0C, COMAND); // включение дисплея, выключение курсора lcd_clear(); }//lcd_init(); //**************************************************************************************************** void lcd_gotoxy(unsigned char x, unsigned char y){ if (y<=3)lcd_write((base_y[y]+lcd_x),COMAND); else lcd_write((base_y[0]+lcd_x),COMAND); lcd_x=x; lcd_y=y; }//lcd_gotoxy() //**************************************************************************************************** // очистка дисплея LCD void lcd_clear(void){ lcd_write(2,COMAND); // cursor home lcd_write(0x0c,COMAND); // cursor off lcd_write(1,COMAND); // clear lcd_x=lcd_y=0; }//lcd_clear() //**************************************************************************************************** // очистка нужного количества символов в строке void lcd_clear_string(unsigned char y,unsigned char from,unsigned char to){ while(from <= to){ lcd_gotoxy(from++,y); lcd_putchar(' '); };//while }//lcd_clear_string() //**************************************************************************************************** void lcd_cursor_on(){ lcd_write(0x0d,COMAND); }//lcd_cursor_on() //**************************************************************************************************** void lcd_cursor_off(){ lcd_write(0x0c,COMAND); }//lcd_cursor_off() //**************************************************************************************************** void lcd_putchar(unsigned char data){ if (lcd_x>(COLUMNS-1)){ if (++lcd_y>3){lcd_y=0;lcd_clear();} lcd_x=0; };//if lcd_gotoxy(lcd_x,lcd_y); lcd_write(data, DATA); lcd_x++; }//lcd_putchar(); //**************************************************************************************************** // вывод символа расположенного в SRAM на LCD void lcd_puts(char *str){ while(*str)lcd_putchar(*str++);// передача символа }//lcd_puts() //**************************************************************************************************** // вывод символа расположенного в FLASH на LCD void lcd_putsf(char flash *str){ while(*str)lcd_putchar(*str++);// передача символа }//lcd_putsf() //****************************************************************************************************