Click here to Skip to main content
15,867,453 members
Articles / Programming Languages / C++
Article

Logical circuits and logical gates simulator

Rate me:
Please Sign up or sign in to vote.
3.79/5 (18 votes)
30 Sep 2003CPOL 81.3K   6.4K   42   11
Logical circuits and logical gates simulator. A program similar to PSpice.

Image 1

Introduction

This is a simple sample to simulate basic logical circuits (I hope I can develop this for FLIP-FLOPs too). There are all the  main gates in this program.

The list of Gates is :

  1. NOT
  2. AND
  3. OR
  4. NAND
  5. NOR
  6. XOR
  7. XNOR
  8. Simple left to right pip.
  9. Simple Up to down and down to up pip.
  10. Two way pip.

After drawing your gates on the board, right click on the board for TRACE menu. Select trace to see final result . You can change your trace mode from left top dialog in two modes : 1 - Fast mode. 2 - Step By Step .

Note : You can deleted any drawn gates by selecting delete tool from the left-side toolbox. And you can minimize/restore toolbox by clicking the pointer button on top left and button left side of toolbox.

Code Listing

C++
// This is a function that select correc cursor for mouse pointer .
BOOL CLCView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
  m_pViewWnd=pWnd;
  
  switch (m_dToolBox.CursorValue){
  case AND:  
    lhCursor=AfxGetApp()->LoadCursor(IDC_AND);
    SetCursor(lhCursor);
    ShowFlag=TRUE;
    break;

  case NAND:
    lhCursor=AfxGetApp()->LoadCursor(IDC_NAND);
    SetCursor(lhCursor);
    ...........  
} 

// This a function to draw selected gates on board 
// (after you click this gate on board)
void CLCView::ShowBitmap(int x,int y,int kind)
{
  CDocument* pDoc = GetDocument();
  CClientDC dc(this);
  CBitmap bitmap;
  CDC dcMemory;
  BITMAP bm;
  
  switch (kind) {
  case AND  : 
    bitmap.LoadMappedBitmap(IDB_AND,0);
    break;

  case NAND : 
    bitmap.LoadMappedBitmap(IDB_NAND,0);

// Call main calculator function
void CLCView::OnCalc() 
{
  m_dToolBox.UpdateData(TRUE);
  
  if (m_dToolBox.m_rOption==0)
    FastTrace=TRUE;    
  else
    FastTrace=FALSE;    

  m_dToolBox.UpdateData(FALSE);
  
  Calc();
}

// This function is like a snapper grid
boolean CLCView::Snaper(int x, int y,int kind)
{
  x=(x/32)*32;
  y=(y/32)*32;
  
  if(ShowFlag==TRUE)
  {
    ShowBitmap(x,y,m_dToolBox.CursorValue);
    ScreenMap(x,y,m_dToolBox.CursorValue);
  }
  else
  if (kind==_DEL)
  {
    ShowBitmap(x,y,m_dToolBox.CursorValue);
  .....
  .....
  }
...
}


// This function save your drawes gates for calculate
boolean CLCView::ScreenMap(int x, int y,int kind)
{
  int xMem,yMem;
  
  xMem=x/32;
  yMem=y/32;

  switch (kind) {
  case AND  : 
    screen[xMem][yMem].Gate=AND;
    screen[xMem][yMem].SGate="AND";
    screen[xMem][yMem].Group=1;
    screen[xMem][yMem].lunched=1;
    break;

  case NAND : 
    screen[xMem][yMem].Gate=NAND
...
...
// and this is calculatore of program
void CLCView::Calc()
{
for (int i=0;i<32;i++)
  for (int j=0;j<24;j++)
    if (screen[i][j].lunched==1)
    {
      UpdateData(FALSE);
      switch (screen[i][j].Gate)
      {
      case AND :
        {
        switch (screen[i-1][j].Gate) 
        {
        case DLR :
          screen[i][j].inValue1=screen[i-1][j].outValue1;
...........
.............
..............
}

Conclusion

If you have found any bug or if you can improve the code please contact me by my email at : mh2538@yahoo.com  or XpolitiX@yahoo.com. Thanks and bye.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Iran (Islamic Republic of) Iran (Islamic Republic of)
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questioncan i run the code source on vb.net 2010 ? Pin
Member 937482925-Mar-16 22:59
Member 937482925-Mar-16 22:59 
AnswerRe: can i run the code source on vb.net 2010 ? Pin
MH253827-Sep-16 3:44
MH253827-Sep-16 3:44 
QuestionGreat! Pin
Saeid Kalhor16-May-15 9:12
Saeid Kalhor16-May-15 9:12 
AnswerRe: Great! Pin
MH253827-Sep-16 3:40
MH253827-Sep-16 3:40 
QuestionHow to Run this Code Pin
Member 115706368-Apr-15 7:03
Member 115706368-Apr-15 7:03 
AnswerRe: How to Run this Code Pin
MH253827-Sep-16 3:41
MH253827-Sep-16 3:41 
Generalgreat work, but... Pin
Ezz Khayyat15-Jan-04 3:08
professionalEzz Khayyat15-Jan-04 3:08 
GeneralRe: great work, but... Pin
Jacee20-Apr-04 21:06
Jacee20-Apr-04 21:06 
Please fix this bug... but anyway great work!

Jacee
GeneralCustom cursors Pin
ronpeters13-Nov-03 7:47
ronpeters13-Nov-03 7:47 
GeneralVery impressive, but ... Pin
WREY6-Oct-03 22:47
WREY6-Oct-03 22:47 
GeneralNice Job but... Pin
Joe Sonderegger1-Oct-03 0:24
Joe Sonderegger1-Oct-03 0:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.