⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 数字面板开发的单片机的软件仿正程序
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "pslab.h"

#include "MainFrm.h"
#include "pslabDoc.h"
#include "pslabView.h"

#define simrunhead

///PSLAB---INCLUDE
#include "psrun.h"
#include "psrun.cpp"
///PSLAB---INCLUDE

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
	int i;
	i=0;
	subfFile.Close();
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
	fileerr=0;
	strCFile[0]=0;
	CFrameWnd::SetTimer(1,100,NULL);
	ijk=0;
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

	//********************MAIN LOOP
	char str[80];
	uchar i;
	uint j,k;
	MSG msg;
	CDC *pDC=GetDC();
	if(nIDEvent==1)
	{
		CFrameWnd::KillTimer(1);

///PSLAB---MLOOP
		while(!fileerr)
		{
///PSLAB---route for STEP CYCLE CONTINUE	
			if(BSCrun)
			{
				if(kchstep)
				{
					txtrun=TRUE;
				}
	    	if(BSTEPrun)
				{
					if(kchstep)
					{
						if(runCYCLE>BSTEP)
						{
							runCYCLE=0;
							kchstep=0;
							goto NOTSIM;
						}
						runCYCLE++;
						goto	pDCSTEPSIMRUN;
					}
					else
					{
						goto NOTSIMX;
					}
				}
			  if(BASTEPrun)
				{
					if(kchstep)
					{
						if(runCYCLE>BASTEP)
						{
							runCYCLE=0;
							goto pDCSTEPSIMRUN;
						}
						runCYCLE++;
						goto	NOTSIM;
					}
					else 
					{
						goto NOTSIMX;
					}
				}
				else if(BCYCLErun)
				{
					if(kchstep)
					{
						if(pc==CPPPC)
						{
							if(runCYCLE>BCYCLE)
							{
								runCYCLE=0;
								kchstep=0;
								goto NOTSIM;
							}
							runCYCLE++;
						}
						goto	SIMRUN;
					}
					else
					{
						goto	NOTSIMX;
					}
				}
			}
SIMRUN:
///PSLAB***route for STEP CYCLE CONTINUE	
	
			dat2simrun();
		

///PSLAB---runTime				
			kkkk+=tmstep;
///PSLAB***runTime				

///PSLAB---run loop counter	
			if(BSCrun)
			{
				if(BSCdsp)
				{
					BSCdsp=FALSE;
					pDC->TextOut(200,ly0,strBSC);//BSC
				}
				if(BCYCLErun)
				{
					if(pc==CPPPC)
					{
						goto	CYCLEpDC;
					}
				}
				else
			{
					goto	STEPpDC;
				}
			}
			else if(pc==CPPPC)
			{
				if(runCYCLE>ACYCLE)
				{
					runCYCLE=0;
				/*	if(kkkk>=400000)
					{
						kkkk-=400000;
						itm+=2000;
						iikk++;
						pDC->TextOut(00,ly0,_itoa(iikk,str,10) );//iikk
					}*/
					goto	OUTpDC;
				}
				runCYCLE++;
			}
			else if(kkkk>=400000)
			{
				kkkk-=400000;
				itm+=2000;
				iikk++;
				pDC->TextOut(00,ly0,_itoa(iikk,str,10) );//iikk
				goto	OUTpDC;
			}
			continue;
///PSLAB***run loop counter	

pDCSTEPSIMRUN:
			itm+=1000;	

			{
				
				goto	SIMRUN;
			}

///PSLAB---break pDC DISPLAY	
STEPpDC:
CYCLEpDC:
NOTSIM:
BRKTXTOUT:
			if((txtrun)&&(kchstep==0))
			{
				txtrun=FALSE;
				rtxtFile.Open(frtxt, CFile::modeWrite);
				if(rtxtFile==-1)
				{
					fileerr=1;
					strcpy(strCFile,"frtxtFile Write error!");
					return;
				}
				strcpy(str,"    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0E 0E 0F");					
				str[51]=13;
				str[52]=10;
				rtxtFile.Write(str,53);
				for(i=0;i<32;i++)
				{
					_itoa(i,str,16);
					k=strlen(str);
					if(k==1)
					{
						str[1]=str[0];
						str[0]='0';
					}
					str[2]=0x20;
					rtxtFile.Write(str,3);
					for(j=0;j<16;j++)
					{
						_itoa(filv[(i*16)+j],str,16);
						k=strlen(str);
						if(k==1)
						{
							str[2]=str[0];
							str[1]='0';
						}
						else if(k==2)
						{
							str[2]=str[1];
							str[1]=str[0];
						}
						str[0]=0x20;
						rtxtFile.Write(str,3);					
					}
					str[0]=13;
					str[1]=10;
					rtxtFile.Write(str,2);
				}
				rtxtFile.Close();
			}
//OUTpDC:	

///PSLAB---simDATdsp pDC DISPLAY========simdatval.digital.led
			for(i=0;i<4;i++)
			{
				k=1;
				simdatvalold[i]^=filv[simdatval[i+2]];
				for(j=0;j<8;j++)
				{
					if((simdatvalold[i]&k)==k)
				{
					if((filv[simdatval[2+i]]&k)==k)
					{
						pDC->TextOut(D00X[((i*8)+j)],D00Y[((i*8)+j)],D001[((i*8)+j)]);
					}
					else
					{
						pDC->TextOut(D00X[((i*8)+j)],D00Y[((i*8)+j)],D000[((i*8)+j)]);
					}
					}
					k*=2;
				}
				simdatvalold[i]=filv[simdatval[i+2]];
			}
///PSLAB***simDATdsp pDC DISPLAY	
			
///PSLAB***break pDC DISPLAY	

NOTSIMX:
			if(kkkk!=kkkkold)
			{
				//if(pctrcwcnt!=pctrcdsp)//if(pctrcwcnt>0)
				{


					if(pctrccnt)
					{
						if(pctrccnt>pcdsp8)
						{
							pctrccnt=pcdsp8;
							pctrcdspnow=pcdsp8;
						}
						pctrcdsp=pctrcdspnow;
						if(pctrcwnow<pctrccnt)
						{
							j=pctrcwnow-pctrccnt+pctrcwcnt;
						}
						else
						{
							j=pctrcwnow-pctrccnt;
						}
						for(;pctrccnt;pctrccnt--)
						{
							pctrcdspnow++;
							if(pctrcdspnow>=pcdsp8)
							{
								pctrcdspnow=0;//pcdsp8;
							}
							if(j>pctrcwcnt)
							{
								j=0;
							}
							_itoa(pctrcw[j],strdisasm[pctrcdspnow],16);
							i=strlen(strdisasm[pctrcdspnow]);
							while(i<6)
							{
								strdisasm[pctrcdspnow][i++]=0x20;
							}
							strdisasm[pctrcdspnow][i]=0x0;
							strcat(strdisasm[pctrcdspnow],datstr[pctrcw[j]]);
							i=strlen(strdisasm[pctrcdspnow]);
							while(i<28)
							{
								strdisasm[pctrcdspnow][i++]=0x20;
							}
							j++;
							strdisasm[pctrcdspnow][i]=0x0;							
							pDC->TextOut(430,lyxx[pctrcdspnow],strdisasm[pctrcdspnow]);//disasm						
						}
					}
					//pctrccnt=0;
						//pctrcdsp=pctrcwcnt;
				}

				
				//if((BSTEPrun)||(BASTEPrun))
				{				//PSLAB---dsp disasmble
				
				//PSLAB---dsp disasmble

				//PSLAB---dsp SP
					if(sppdsp!=spp0)
					{
						k=spp;
						if(k>8)
						{
							k=9;
						}
						for(j=spp0;j<=sppdsp;j++)
						{
							if(j==k)
							{							
								pDC->TextOut(600,lyxx[j],strsp111);//stack							
								_itoa(spaddr[j],strSPj,16);
								i=strlen(strSPj);
								while(i<6)
								{
									strSPj[i++]=0x20;
								}
								strSPj[i]=0x0;
								strcat(strSPj,datstr[spaddr[j]]);
								i=strlen(strSPj);
								while(i<28)
								{
									strSPj[i++]=0x20;
								}
								strSPj[i]=0x0;
								pDC->TextOut(620,lyxx[j],strSPj);//stack							
							}
							else
							{
								pDC->TextOut(600,lyxx[j],strspold);//stack							
							}
						}
						sppdsp=spp;
						spp0=spp;
					}
				//PSLAB---dsp SP
				}
				//pDC->TextOut(238,ly0,"  ");//PCLATH
				//_itoa(filv[PCLATH],str,16);
				//pDC->TextOut(230,ly0,str);//PCLATH
				pDC->TextOut(238,ly0,"  ");//w
				_itoa(wreg,str,16);
				pDC->TextOut(230,ly0,str);//w
				pDC->TextOut(268,ly0,"  ");//STATUS
				_itoa(filv[STATUS],str,16);
				pDC->TextOut(260,ly0,str);//status
				pDC->TextOut(328,ly0,"    ");//FRP01
				_itoa(frp01,str,16);
				pDC->TextOut(319,ly0,str);//FRP01
				pDC->TextOut(342,ly0,":");//filv[frp01]
				pDC->TextOut(353,ly0,"  ");//filv[frp01]
				_itoa(filv[frp01],str,16);
				pDC->TextOut(345,ly0,str);//filv[frp01]
				kkkkold=kkkk;
				_itoa(pc,str,16);//PC
				i=strlen(str);
				while(i<6)
				{
					str[i++]=0x20;
				}
				str[i]=0x0;
				pDC->TextOut(388,ly0,str);//PC
				_itoa(kkkk/4,str,10);//kkkk
				i=strlen(str);
				j=5;
				if(i<5)
				{
					while(i)
					{
						i--;
						j--;
						str[j]=str[i];
					}
					while(j)
					{
						j--;
						str[j]='0';
					}
				}
				str[5]=0x0;
				pDC->TextOut(40,ly0,str);//kkkk
			}

OUTpDC:	
			{	
///PSLAB---run infomation pDC DISPLAY	
				itm++;
				if(BSCdsp)
				{
					BSCdsp=FALSE;
					pDC->TextOut(200,ly0,strBSC);//BSC
				}
				if(B0dsp)
				{
					B0dsp=FALSE;
					if(B0run)
					{
						pDC->TextOut(85,ly0,_itoa(rundatval[0],str,16));//B0
					}
					else
					{
						pDC->TextOut(85,ly0,"-------");//B0
					}					
				}
				if(B1dsp)
				{
					B1dsp=FALSE;
					if(B1run)
					{
						pDC->TextOut(123,ly0,_itoa(rundatval[1],str,16));//B1
					}
					else
					{
						pDC->TextOut(123,ly0,"-------");//B1
					}					
				}
				if(B2dsp)
				{
					B2dsp=FALSE;
					if(B2run)
					{
						pDC->TextOut(161,ly0,_itoa(rundatval[2],str,16));//B2
					}
					else
					{
						pDC->TextOut(161,ly0,"-------");//B0
					}					
				}
				if(VALSETSTRdsp)
				{
					VALSETSTRdsp=0;
					pDC->TextOut(0,ly1,VALSETSTR);
				}
				if(VALSETPTdsp)
				{
					VALSETPTdsp=0;
					pDC->TextOut(20,ly1,VALSETPTSTR);
				}
				if(VALSETVALdsp)
				{
					VALSETVALdsp=0;
					pDC->TextOut(50,ly1,VALSETVALSTR);
				}
				if(BF0dsp)
				{
					BF0dsp=0;
					if(BF0run)
					{
						_itoa(BF0VALPT,str,16);
						strcat(str,":");
						pDC->TextOut(150,ly1,str);
						pDC->TextOut(175,ly1,_itoa(BF0VALBRK,str,16));//BF0
					}
					else
					{
						pDC->TextOut(150,ly1,"---------");//BF0
					}					
				}
				if(BF1dsp)
				{
					BF1dsp=0;
					if(BF1run)
					{
						_itoa(BF0VALPT,str,16);
						strcat(str,":");
						_itoa(BF1VALPT,str,16);
						strcat(str,":");
						pDC->TextOut(190,ly1,str);
						pDC->TextOut(215,ly1,_itoa(BF1VALBRK,str,16));//BF1
					}
					else
					{
						pDC->TextOut(190,ly1,"---------");//BF1
					}					
				}
				if(BF2dsp)
				{
					BF2dsp=0;
					if(BF2run)
					{
						_itoa(BF2VALPT,str,16);
						strcat(str,":");
						pDC->TextOut(230,ly1,str);
						pDC->TextOut(255,ly1,_itoa(BF2VALBRK,str,16));//BF2
					}
					else
					{
						pDC->TextOut(230,ly1,"---------");//BF1
					}					
				}
///PSLAB***run infomation pDC DISPLAY	

///PSLAB---simDATdsp pDC DISPLAY	
				if(dspval(6))
				{
					pDC->TextOut(80,ly6,strKCH);//KCH
				}
				if(dspval(5))
				{
					pDC->TextOut(20,ly6,strE);//E
				}
				if(dspval(2))
				{
					pDC->TextOut(120,ly7,strB);//B
				}
				if(dspval(4))
				{
					pDC->TextOut(70,ly8,strD);//D
				}
				if(dspval(1))
				{
					pDC->TextOut(120,ly8,strA);//A
				}
				if(dspval(3))
				{
					pDC->TextOut(20,ly8,strC);//C
				}
//				{
//					pDC->TextOut(220,ly6,_itoa(pccnt,str,10));
//				}

				j=0;
				k=0;
				while(j<simdatcnt)//filv[simdatval]
				{
					for(i=0;i<16;i++)
					{
						if(dspsimdatval(j))
						{
							pDC->TextOut(00+i*25,ly2+k*15,strsimDSP[j]);//LCDXDAT/LCDADDR/DSPDAT/DSPDAT1/DSPDAT2/DSPDAT3
						}
						j++;
						if(j>=simdatcnt)
						{
							break;
						}
					}
					k++;
				}
///PSLAB***simDATdsp pDC DISPLAY	
				
///PSLAB---PAUSE FOR MESSAGE PROCESS	
				if(itm>=25000)
				{
					if(pctest!=kkkk)
					{
						pctest=kkkk;
						//simout();
						if(pctrcwdsp!=pctrcwcnt)
						{
							runtrcFile.Open("F:\\runtrc.asm", CFile::modeReadWrite);
							if(runtrcFile==-1)
							{
								runtrcFile.Open("F:\\runtrc.asm",CFile::modeCreate);
								if(runtrcFile==-1)
								{
									fileerr=1;
									strcpy(strCFile,"runtrcFile Create error!");
									break;
								}
								else
								{
									runtrcFile.Close();
									runtrcFile.Open("F:\\runtrc.asm", CFile::modeReadWrite);
								}
							}
										
							k=pctrcwnow;
							if(pctrcwcnt>pc10100)
							{
								pctrcwcnt=pc10100;
							}
							for(j=1;j<pctrcwcnt;j++)
							{
								if(k<pc10100)
								{
									k++;
								}
								else
								{
									k=0;
								}																
								
								_itoa(j,str,10);
								i=strlen(str);
								while(i<5)
								{
									str[i++]=0x20;
								}
								str[i]='x';
								runtrcFile.Write(str,6);
								
								_itoa(pctrcw[k],str,16);
								i=strlen(str);
								while(i<6)
								{
									str[i++]=0x20;
								}
								runtrcFile.Write(str,6);
								runtrcFile.Write(datstr[pctrcw[k]],strlen(datstr[pctrcw[k]]));
								runtrcFile.Write(strnextln,2);							
							}
							if(pctrcwcnt>=pc10100)
							{
								pctrcwcnt=pc10100-1;
							}
							runtrcFile.Close();
							pctrcwdsp=pctrcwcnt;
							pctrcdsp=pctrcwcnt;
						}
					}
					if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))	//有消息在等待吗?
					{
						TranslateMessage (&msg) ; //翻译消息
						PostMessage(msg.message,NULL,NULL) ; //撤去消息
					}
					itm-=25000;
					//if(itm>25000)
					{
					//	itm=25000;
					}
					ijk=10;
					break;
				}
///PSLAB***PAUSE FOR MESSAGE PROCESS	
				
			}
		}
	}
///PSLAB***MLOOP

///PSLAB---ERROR EXIT
	if(fileerr)
	{
		pDC->TextOut(120,ly3,strCFile);//fileerr
	}
///PSLAB***ERROR EXIT
	
	CFrameWnd::OnTimer(nIDEvent);

}


LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class

	if(ijk==10)
	{
		ijk=0;
		CFrameWnd::SetTimer(1,1,NULL);
	}
	else if(ijk==20)
	{
		ijk=0;
		CFrameWnd::SetTimer(1,100,NULL);
	}
	return CFrameWnd::WindowProc(message, wParam, lParam);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -