AFON//Радиотехник
C++Builder · проект 13/50

Резистор для светодиода

Гасящий R и ближайший номинал E24.

Задача

Рассчитать гасящий резистор для светодиода и подобрать ближайший номинал ряда E24.

Компоненты на форме

Edit (EditUpit, EditUled, EditI), Button (ButtonCalc), Memo (MemoOut).

Как работает

  1. Ввести питание, падение на светодиоде и ток.
  2. Посчитать R = (Uпит − Uсвд)/I.
  3. Найти ближайший E24 и мощность на резисторе.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 13. Гасящий резистор для светодиода
// R = (Uпит − Uсвд)/I и ближайший номинал ряда E24.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

static const double E24[24] = {
    1.0,1.1,1.2,1.3,1.5,1.6,1.8,2.0,2.2,2.4,2.7,3.0,
    3.3,3.6,3.9,4.3,4.7,5.1,5.6,6.2,6.8,7.5,8.2,9.1 };
double nearestE24(double v)
{
    if (v <= 0) return v;
    double best=0, bd=1e30;
    for (int d=-2; d<=9; d++) for (int i=0;i<24;i++){
        double c=E24[i]*pow(10.0,d), diff=fabs(log(c/v));
        if (diff<bd){ bd=diff; best=c; }
    }
    return best;
}
double LedResistor(double Upit, double Uled, double Imma)
{
    double I = Imma / 1000.0;
    if (I <= 0) return 0;
    return (Upit - Uled) / I;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
    double Upit, Uled, Imma;
    try { Upit=StrToFloat(EditUpit->Text); Uled=StrToFloat(EditUled->Text); Imma=StrToFloat(EditI->Text); }
    catch (...) { MemoOut->Text="Проверьте числа"; return; }
    if (Upit <= Uled) { MemoOut->Text="Питание должно быть выше падения на светодиоде"; return; }

    double R = LedResistor(Upit, Uled, Imma);
    double Pr = (Upit - Uled) * (Imma/1000.0);
    MemoOut->Lines->Clear();
    MemoOut->Lines->Add("Расчётный R:   " + FormatFloat("0.#", R) + " Ом");
    MemoOut->Lines->Add("Ближайший E24: " + FormatFloat("0.#", nearestE24(R)) + " Ом");
    MemoOut->Lines->Add("Мощность на R: " + FormatFloat("0.####", Pr) + " Вт");
}
//---------------------------------------------------------------------------

Пояснения

  • Ряд E24 зашит массивом, ближайший ищется по логарифму отношения.
  • Мощность резистора берут с запасом (обычно ×2).
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.