Click here to Skip to main content
Click here to Skip to main content

Logical circuits and logical gates simulator

By , 30 Sep 2003
Rate this:
Please Sign up or sign in to vote.

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

// 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)

About the Author

MH2538
Web Developer
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I was born and live in Tehran, Iran.
I start programming with Visual C++ 5.0 on 1997
and then jump to Delphi for 4 years and finally i'm here with C# and VB.net

Comments and Discussions

 
Generalgreat work, but... PinmemberEzz Khayyat15-Jan-04 3:08 

its too great, but one problem, when the window goes in the background, then back to forground, all the contents will be cleared!!! must use auto paint!
 
good job Roll eyes | :rolleyes:
GeneralRe: great work, but... PinmemberJacee20-Apr-04 21:06 
GeneralCustom cursors Pinsussronpeters13-Nov-03 7:47 
GeneralVery impressive, but ... PinmemberWREY6-Oct-03 22:47 
GeneralNice Job but... PinmemberNice Life1-Oct-03 0:24 

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

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

| Advertise | Privacy | Mobile
Web01 | 2.8.140415.2 | Last Updated 1 Oct 2003
Article Copyright 2003 by MH2538
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid