Код: Выделить всё
#ifndef hd44780
#define hd44780
// HD44780
#define RS BIT7 // 0 - команда, 1 - данные
#define E BIT6 // Стробирующий вход (синхр.)
// 74HC595
#define SH BIT5 //
#define ST BIT4 //
#define DS BIT3 //
#endif /* hd44780 */
int StrokaOne[] = {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}; // 16
int StrokaTwo[]= {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32}; // 16
int LedPauza = 50;
// Init_HD_44780(Комманда);
int Init_HD_44780(int Commands)
{
// Команда
//************************
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
P1OUT &= ~RS;
P1OUT |= E;
//P1OUT = 12;
HC595Out(Commands);
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
P1OUT &= ~RS + E;
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
//************************
}
// OUT_LED_Word(Символы, Номер строки, Адрес стартовой ячейки, Статус Символов (char - 1 или int - 2), Символ в Dec);
int OUT_LED_Word(char Text[], int Stroka, int StartAadres, int StatusChar, int TextDec[])
{
if(StatusChar == 1)
{
if(Stroka == 1)
{
Stroka = 128;
}
if(Stroka == 2)
{
Stroka = 168;
}
for(int i = 0; i <= 16; i++)
{
if(Text[i] == 0)
{ }
else
{
if(Text[i+1] == 0)
{
if(Text[i+1] == 0)
{
OutStrokaOne(Text[i], i, StartAadres, Stroka);
i = 16;
}
else
{
OutStrokaOne(Text[i], i, StartAadres, Stroka);
}
}
else
{
OutStrokaOne(Text[i], i, StartAadres, Stroka);
}
}
}
}
if(StatusChar == 2)
{
if(Stroka == 1)
{
Stroka = 128;
}
if(Stroka == 2)
{
Stroka = 168;
}
for(int i = 0; i <= 16; i++)
{
if(TextDec[i] == 0)
{ }
else
{
if(TextDec[i+1] == 0)
{
if(TextDec[i+1] == 0)
{
OutStrokaOne(TextDec[i], i, StartAadres, Stroka);
i = 16;
}
else
{
OutStrokaOne(TextDec[i], i, StartAadres, Stroka);
}
}
else
{
OutStrokaOne(TextDec[i], i, StartAadres, Stroka);
}
}
}
}
}
// OUT_LED_Dec(Значение, Номер строки, Адрес стартовой ячейки, Статус дроби);
int OUT_LED_Dec(int Value, int Stroka, int StartAadres, int Share )
{
//Value = Value * 100;
unsigned char s[16];
if(Stroka == 1)
{
Stroka = 128;
}
if(Stroka == 2)
{
Stroka = 168;
}
if(Value < 0)
{
s[0] = '-';
}
else { s[0] = ' '; }
for(int i = 0; i <4; i++)
{
if(Value <= 9)
{
if(Share == 1)
{
s[1] = '0';
s[2] = '0';
s[3] = '.';
s[4] = Value % 10 + '0';
}
if(Share == 2)
{
s[1] = ' ';
s[2] = ' ';
s[3] = ' ';
s[4] = Value % 10 + '0';
}
}
if(Value <= 99)
{
if(Share == 1)
{
s[1] = '0';
s[2] = (Value / 10) % 10 + '0';
s[3] = '.';
s[4] = Value % 10 + '0';
}
if(Share == 2)
{
s[1] = ' ';
s[2] = ' ';
s[3] = (Value / 10) % 10 + '0';
s[4] = Value % 10 + '0';
}
}
if(Value <= 999)
{
if(Share == 1)
{
s[1] = (Value / 100) % 10 +'0';
s[2] = (Value / 10) % 10 + '0';
s[3] = '.';
s[4] = Value % 10 + '0';
}
if(Share == 2)
{
s[1] = ' ';
s[2] = (Value / 100) % 10 +'0';
s[3] = (Value / 10) % 10 + '0';
s[4] = Value % 10 + '0';
}
}
}
for (int i = 0; i <= 4; i++)
{
OutStrokaOne(s[i], i, StartAadres, Stroka);
}
}
// OutStrokaOne(Символ в Dec, Номер символа, Адрес стартовой ячейки, Адрес строки(128, 168));
int OutStrokaOne(int Simvl, int StrokaAdres, int StartAdresStrokaOne, int StrokaOneTwo)
{
//************************ Команда
P1OUT &= ~RS;
P1OUT |= E;
//P1OUT = StrokaOneTwo + StrokaAdres + StartAdresStrokaOne;
HC595Out(StrokaOneTwo + StrokaAdres + StartAdresStrokaOne);
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
P1OUT &= ~RS + E;
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
//************************
//************************ Данные
P1OUT |= RS;
P1OUT |= E;
//P1OUT = Simvl;
HC595Out(Simvl);
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
P1OUT |= RS;
P1OUT &= ~E;
for(volatile unsigned int i = LedPauza; i != 0; i--); // Задержка
//************************
}
// HC595Out(Значение int); // Вывод на 74HC595
int HC595Out(int Data)
{
int OutDataRS = 0;
P2OUT &= ~SH;
P2OUT &= ~ST;
P2OUT &= ~DS;
for(int i = 0; i < 8; i++)
{
OutDataRS = Data >> i;
if((1&OutDataRS) == 1)
{
for(volatile unsigned int i = 40; i != 0; i--); // Задержка
P2OUT |= DS;
P2OUT |= SH;
for(volatile unsigned int i = 50; i != 0; i--); // Задержка
P2OUT &= ~SH;
}
else
{
for(volatile unsigned int i = 40; i != 0; i--); // Задержка
P2OUT &= ~DS;
P2OUT |= SH;
for(volatile unsigned int i = 50; i != 0; i--); // Задержка
P2OUT &= ~SH;
}
}
P2OUT |= ST;
//for(volatile unsigned int i = 50; i != 0; i--); // Задержка
}