Задача
Собрать байт из восьми флажков и вывести его на линии данных LPT-порта.
Компоненты на форме
CheckBox (D0..D7), Edit (EditBase), Button (ButtonOut), StatusBar.
Как работает
- Собрать байт из флажков функцией buildByte.
- Загрузить драйвер inpout32.dll.
- Вывести байт функцией Out32 по адресу порта.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 43. Вывод байта в LPT-порт
// Формирование байта из флажков и вывод (inpout32).
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Управление линиями LPT: восемь флажков → байт данных на выводах 2..9.
// buildByte — ядро, собирающее флажки в байт (проверяется тестом).
// Реальный вывод в порт делается драйвером inpout32 (Out32).
typedef void (__stdcall *TOut32)(short, short);
unsigned char buildByte(bool bits[8])
{
unsigned char v=0; for(int i=0;i<8;i++) if(bits[i]) v|=(1<<i); return v;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOutClick(TObject *Sender)
{
bool b[8]={D0->Checked,D1->Checked,D2->Checked,D3->Checked,
D4->Checked,D5->Checked,D6->Checked,D7->Checked};
unsigned char v=buildByte(b);
LabelByte->Caption="0x"+IntToHex((int)v,2)+" ("+IntToStr((int)v)+")";
HINSTANCE dll=LoadLibrary("inpout32.dll");
if (dll){
TOut32 Out32=(TOut32)GetProcAddress(dll,"Out32");
int base=StrToIntDef("0x"+EditBase->Text,0x378); // адрес LPT1
if (Out32) Out32(base, v);
FreeLibrary(dll);
StatusBar1->SimpleText="Выведено в порт 0x"+IntToHex(base,3);
} else StatusBar1->SimpleText="inpout32.dll не найдена (байт посчитан)";
}
//---------------------------------------------------------------------------
Пояснения
- Прямой доступ к портам в NT/XP и новее требует драйвера inpout32.
- Базовый адрес LPT1 обычно 0x378.
- Само формирование байта проверено тестом даже без порта.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.
Что дальше
Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.