CODE:
/* * * * * * * * * * *
* ИНИЦИАЛИЗАЦИЯ LCD *
* * * * * * * * * * */
void LCD_Init (void)
{
_delay_ms(30);
LCD_Command(0b0010,0b0010);
LCD_Command(0b1100,0b0000);
_delay_ms(40);
LCD_Command(0b0000,0b1110);//0b1100);
_delay_ms(40);
LCD_Command(0b0000,0b0001);
_delay_ms(2);
LCD_Command(0b0000,0b0110);
_delay_ms(10);
}
/* * * * * * * * * * * * *
* ПЕРЕДАЧА КОМАНД В LCD *
* * * * * * * * * * * * */
void LCD_Command (unsigned char Command1,unsigned char Command2)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111110; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|
/*Передача первой тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command1 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command2 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных
PORTB &= 0b10000000;
Temp = (Command >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);*/
asm("sei");
}
/* * * * * * * * * * * * *
* ПЕРЕДАЧА ДАННЫХ В LCD *
* * * * * * * * * * * * */
void LCD_Data (unsigned char Data)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111111; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|
/*Передача первой тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data << 3) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
asm("sei");
}
/* * * * * * * * * * *
* ИНИЦИАЛИЗАЦИЯ LCD *
* * * * * * * * * * */
void LCD_Init (void)
{
_delay_ms(30);
LCD_Command(0b0010,0b0010);
LCD_Command(0b1100,0b0000);
_delay_ms(40);
LCD_Command(0b0000,0b1110);//0b1100);
_delay_ms(40);
LCD_Command(0b0000,0b0001);
_delay_ms(2);
LCD_Command(0b0000,0b0110);
_delay_ms(10);
}
/* * * * * * * * * * * * *
* ПЕРЕДАЧА КОМАНД В LCD *
* * * * * * * * * * * * */
void LCD_Command (unsigned char Command1,unsigned char Command2)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111110; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|
/*Передача первой тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command1 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command2 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных
PORTB &= 0b10000000;
Temp = (Command >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);*/
asm("sei");
}
/* * * * * * * * * * * * *
* ПЕРЕДАЧА ДАННЫХ В LCD *
* * * * * * * * * * * * */
void LCD_Data (unsigned char Data)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111111; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|
/*Передача первой тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data << 3) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
/*Передача второй тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);
asm("sei");
}