Здравствуйте, уважаемые форумчани!
Недавно появилось желание купить LCD дисплей на контроллере HD44780. У меня есть два типа, один (16x1) второй (16x2).
Было все это дело припаяно к LPT (бывший centronic). Запустил программу LCD Smartie, настроил – текст выводиться…
Далее появилось желание написать программу на Borland C++ Builder 6 которая будет выводить какой-то текст на экран. Установил port95nt. Подключил в программе inpout32.dll. Где-то намутил программу, а она не работает… И почему – не знаю. Прошу помощи!
Даташит на HD44780:
http://pdf1.alldatasheet.com/datasheet- ... 44780.html
Схема, по которой было все дело спаяно:
Дисплеи, которые имеются в наличии:
SC1601ASLB-SH-HB-R (готов к тестам)
WH1602A-YGH-CTK# (готов к тестам)
HW1602B-TMI-CT# (условно рабочий)
PLC1602D1W-SYL (еще не паяный)
Все дисплеи работают в LCD SMARTIE.
Код написанный в C++ Builder 6. Консольное приложение.
Код: Выделить всё
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream.h>
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
int main(void)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}
/*******************************************************/
char string[] = "My test string";
char init[3];
init[0] = 0x0F;
init[1] = 0x01; // clear display
init[2] = 0x38; // 38 - 2 line 30 - 1 line
cout << (inp32)(0x37A) << endl;
(oup32)(0x37A, (inp32)(0x37A) | 0x0F); //Reset control port
cout << (inp32)(0x37A) << endl;
(oup32)(0x37A, (inp32)(0x37A) ^ 0x0F); //Reset RS
cout << (inp32)(0x37A) << endl;
for (int count = 0; count < 3; count++)
{
(oup32)(0x378, 0xA0);
(oup32)(0x37A, (inp32)(0x37A) | 0x01); //Set Enable (E == 1)
Sleep(20);
(oup32)(0x37A, (inp32)(0x37A) & 0x0E); //Reset Enable (E == 0)
Sleep(20);
}
(oup32)(0x37A, (inp32)(0x37A) | 0x08); //Reset RS
int len = strlen(string);
for (int count = 0; count < len; count++)
{
(oup32)(0x378, string[count]);
(oup32)(0x37A, (inp32)(0x37A) | 0x01); //Set Enable
Sleep(20);
(oup32)(0x37A, (inp32)(0x37A) & 0x0E); //Reset Enable
Sleep(20);
}
/*******************************************************/
FreeLibrary(hLib);
system("pause");
return 0;
}
/*
lpt
378 -- 2,3,4,5,6,7,8,9 data (0-7)
37A -- 1,14,16,17 control (0-3)
1,2,4,8,16,32,64,128
10,20,40,80
lcd lpt
RS 4 16
E 6 1
7:14 2:9
*/
В общем, что есть – написано. Далее надо написать прогу, которая будет что-то выводить на экран. Команды на LPT подаются. Проверял самопалом со светодиодами, который подключается к LPT. Прошу помощи. Заранее благодарен!