Задача
Нарисовать семисегментный индикатор, зажигая сегменты по коду цифры 0…F.
Компоненты на форме
Edit (EditDigit), PaintBox, Button (ButtonShow).
Как работает
- Ввести шестнадцатеричную цифру.
- Получить маску сегментов из таблицы.
- Нарисовать семь сегментов, светящиеся — ярко.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 37. Рисованный 7-сегментный индикатор
// Цифра 0…F → сегменты, отрисовка на Canvas.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Таблица сегментов a…g для цифр 0..F в один байт (бит на сегмент).
// segMask — ядро, проверяется тестом на нескольких цифрах.
unsigned char segMask(int digit)
{
static const unsigned char T[16]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
return (digit>=0&&digit<16)?T[digit]:0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonShowClick(TObject *Sender)
{
int d=StrToIntDef("0x"+EditDigit->Text,0) & 0xF;
unsigned char m=segMask(d);
TCanvas *c=PaintBox1->Canvas;
c->Brush->Color=clBlack; c->FillRect(PaintBox1->ClientRect);
c->Pen->Width=6;
// a
c->Pen->Color=(m&0x01)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,20); c->LineTo(80,20);
// b
c->Pen->Color=(m&0x02)?clRed:(TColor)RGB(40,0,0); c->MoveTo(80,20); c->LineTo(80,70);
// c
c->Pen->Color=(m&0x04)?clRed:(TColor)RGB(40,0,0); c->MoveTo(80,70); c->LineTo(80,120);
// d
c->Pen->Color=(m&0x08)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,120); c->LineTo(80,120);
// e
c->Pen->Color=(m&0x10)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,70); c->LineTo(30,120);
// f
c->Pen->Color=(m&0x20)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,20); c->LineTo(30,70);
// g
c->Pen->Color=(m&0x40)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,70); c->LineTo(80,70);
}
//---------------------------------------------------------------------------
Пояснения
- Ядро segMask возвращает байт с битами a…g.
- Погашенный сегмент рисуется тёмно-красным для реализма.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.
Что дальше
Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.