Вот хедер lcd.h:
Код: Выделить всё
#ifndef LCD_H
#define LCD_H
//-----------------
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/stdio.h>
//------------------------
#define LCD_DDR_DATE DDRB
#define LCD_PORT_DATE PORTB
#define LCD_PIN_DATE PINB
//---------------------------
#define LCD_DDR_COMMAND DDRG
#define LCD_PORT_COMMAND PORTG
#define LCD_PIN_COMMAND PING
//----------
#define RS PC0
#define RW PC1
#define E PC2
//--------------------------------------
void LCD_Command(unsigned char command); // запись команды в контроллер дисплея
void LCD_Date(unsigned char date); // запись данных в контроллер дисплея
void LCD_Init(); // инициализация
void LCD_Print(char *string); // вывод строки на дисплей
void LCD_Goto(unsigned char x, unsigned char y); // позиция курсора
void LCD_Clear(); // очистка дисплея
#endifКод: Выделить всё
#include "lcd.h"
//-------------------------------------
void LCD_Command(unsigned char command)
{
LCD_PORT_COMMAND &= ~(1 << RS);
LCD_PORT_DATE = command;
LCD_PORT_COMMAND |= (1 << E);
_delay_us(2);
LCD_PORT_COMMAND &= ~(1 << E);
LCD_PORT_DATE = (command << 4);
LCD_PORT_COMMAND |= (1 << E);
_delay_us(2);
LCD_PORT_COMMAND &= ~(1 << E);
_delay_us(40);
}
//-------------------------------
void LCD_Date(unsigned char date)
{
LCD_PORT_COMMAND |= (1 << RS);
LCD_PORT_DATE = date;
LCD_PORT_COMMAND |= (1 << E);
_delay_us(2);
LCD_PORT_COMMAND &= ~(1 << E);
LCD_PORT_DATE = (date << 4);
LCD_PORT_COMMAND |= (1 << E);
_delay_us(2);
LCD_PORT_COMMAND &= ~(1 << E);
_delay_us(40);
LCD_PORT_COMMAND &= ~(1 << RS);
}
//-------------
void LCD_Init()
{
LCD_DDR_COMMAND = 0XFF;
LCD_PORT_COMMAND = 0X00;
LCD_DDR_DATE = 0XFF;
LCD_PORT_DATE = 0X00;
_delay_ms(40);
LCD_Command(0x28); //4-ех разрядная шина, 2 строки
LCD_Command(0xf); //0b00001111 - дисплей, курсор, мерцание включены
LCD_Command(0x1); //0b00000001 - очистка дисплея
_delay_ms(2);
LCD_Command(0x6); //0b00000110 - курсор движется вправо, сдвига нет
}
//--------------------------
void LCD_Print(char *string)
{
}
//----------------------------------------------
void LCD_Goto(unsigned char x, unsigned char y)
{
}
//--------------
void LCD_Clear()
{
}

