Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 00:01   #1
stepan070793
 
Регистрация: 03.04.2011
Сообщений: 3
По умолчанию Семисегментный индикатор

Народ, нужна помощь, задали курсовую сделать Семисегментный индикатор и там должны загораться светодиоды в зависимости от поступающего значения.
Помогите кто чем сможет, буду очень благодарен
stepan070793 вне форума Ответить с цитированием
Старый 11.06.2012, 00:33   #2
stepan070793
 
Регистрация: 03.04.2011
Сообщений: 3
По умолчанию

Дело вот в чем, группой делаем программу типо протеуса на с++билдере6, каждый делает свою часть программы. Вот мне и дали семисегментный индикатор, т.е. он скорее софтовый. В него поступает какото двоичное число и должны загореться определенные светодиоды(десятичное число) в программе
stepan070793 вне форума Ответить с цитированием
Старый 11.06.2012, 11:29   #3
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Это простейшая программа. Располагаете семь шейпов определенным образом и затем пишете обработку в цикле__
Код:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
      TShape *semi[7] ;
      char deci[10]={ 0x3F,6,0x5B,0x4F,0x66,0x6D,0x7D,7,0x7F,0x6F };

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
       semi[0]=Shape1; semi[1]=Shape2; semi[2]=Shape3; semi[3]=Shape4;
       semi[4]=Shape5; semi[5]=Shape6; semi[6]=Shape7;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
     if (SpeedButton1->Down)
       for (int i=0;i<7;i++)
         semi[i]->Visible = (1<<i)&deci[UpDown1->Position];
     else
       for (int i=0;i<7;i++) semi[i]->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
     SpeedButton1Click(0);
}
//---------------------------------------------------------------------------
Изображения
Тип файла: gif capture.gif (5.5 Кб, 107 просмотров)
nick42 вне форума Ответить с цитированием
Старый 11.06.2012, 16:57   #4
stepan070793
 
Регистрация: 03.04.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от nick42 Посмотреть сообщение
Это простейшая программа. Располагаете семь шейпов определенным образом и затем пишете обработку в цикле__
Спасибо конечно же, но возможно ли это реализовать с помощью GDI, и поступающее значение в виде двоичного числа, его нужно вывести на сегмент в виде десятичного, вот пример кода для прорисовки самого индикатора :
Код:
  HPEN hOldPen, hPen; 
  HBRUSH hOldBrush,hBrush; 
  hPen = CreatePen(PS_SOLID,2,RGB(0,0,0));
  hBrush = CreateSolidBrush (RGB(100,100,100));
  int x=30;
  int y=20;
  int m=2;
        Rectangle(dc,x,y,x+40*m,y+60*m);
        MoveToEx(dc,x+10*m,y+10*m,NULL);
        LineTo(dc,x+30*m,y+10*m);
        MoveToEx(dc,x+10*m,y+30*m,NULL);
        LineTo(dc,x+30*m,y+30*m);
        MoveToEx(dc,x+10*m,y+50*m,NULL);
        LineTo(dc,x+30*m,y+50*m);
        MoveToEx(dc,x+8*m,y+12*m,NULL);
        LineTo(dc,x+8*m,y+28*m);
        MoveToEx(dc,x+32*m,y+12*m,NULL);
        LineTo(dc,x+32*m,y+28*m);
        MoveToEx(dc,x+8*m,y+48*m,NULL);
        LineTo(dc,x+8*m,y+32*m);
        MoveToEx(dc,x+32*m,y+48*m,NULL);
        LineTo(dc,x+32*m,y+32*m);
        Ellipse(dc,x+34*m,y+48*m,x+37*m,y+51*m);
        ReleaseDC(Form1->Handle,dc);
stepan070793 вне форума Ответить с цитированием
Старый 11.06.2012, 17:23   #5
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

... Продолжайте учиться; у Вас большое будущее...
nick42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индикатор Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 12.04.2010 22:05
Семисегментный индикатор! ассемблер dswar Помощь студентам 7 12.04.2010 17:30
USB индикатор Kn793 Компьютерное железо 31 21.03.2009 10:37
Индикатор SERG1980 Компоненты Delphi 6 29.09.2007 21:49