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

📄 function.cpp

📁 用C++控制喷泉程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "dos.h"
#include "alloc.h"
#include "stdio.h"
#include "math.h"
#include "constdec.h"
#include "vardec.h"
#include "interrup.h"
#include "mouse.h"
#include "function.h"
void RealTimeFoun(int mode)
{
 static int bitcount[6];
 static int bitcount2[2];
 static unsigned long oldtime;
 static unsigned long oldsteptime;
 static unsigned long oldfreqtime;
 static char oldtemp[RealPortNum];
 static int tofreq;
 unsigned long time=GetTime();
 int i;

 if(mode!=0)
 {
	for(i=RealPortNoNum;i<RealPortNoNum+RealPortNum;i++)
	{
	 oldtemp[i-RealPortNoNum]=OutPortMem[i].data;
	 OutPortMem[i].data=0;
	}
	mode=0;
	oldtime=time-200;
 }
 if(time-oldsteptime>1)
 {
	char k=inportb(InPortAdd1);
	char m=0x02;
	oldsteptime=time;
	for(i=1;i<6;i++)
	{
	 if(k&m)
	 {
		bitcount[i]++;
	 }
	 m=m<<1;
	}
	m=0x02;
	for(i=0;i<2;i++)
	{
	 if(k&m)
	 {
		bitcount2[i]++;
	 }
	 m=m<<1;
	}
 }
 if(time-oldtime>100)
 {
	char temp[RealPortNum];
	oldtime=time;
	for(i=0;i<RealPortNum;i++)
	{
		temp[i]=0;
	}
	for(i=0;i<6;i++)
	{
	 if(bitcount[i]>40)
	 {
		for(int y=0;y<RealPortNum;y++)
		 {
			temp[y]=temp[y]|MusicPortBit[i][y];
		 }
	 }
	 bitcount[i]=0;
	}
	for(i=RealPortNoNum;i<RealPortNoNum+RealPortNum;i++)
	{
	 outportb(*(OutPortMem[i].add),~(oldtemp[i-RealPortNoNum]&temp[i-RealPortNoNum]));
	}
 }
 if(stopFreq!=1)
 {
	 if(time-oldfreqtime>200)
	 {
		tofreq=0;
		oldfreqtime=time;
		for(i=0;i<2;i++)
		{
		 if(bitcount2[i]>48)
		 {
			 tofreq=0x80;
		 }
		 bitcount2[i]=0;
		}
		OutPortMem[3].data=(tofreq&0x80)|(OutPortMem[3].data&0x3f);
		outportb(*(OutPortMem[3].add),~OutPortMem[3].data);
	 }
 }
}
void PortDataOut(void)//口数据输出
{
 int i;
 for(i=0;i<LightPortNoNum;i++)
 {
	outportb(*(OutPortMem[i].add),~OutPortMem[i].data);
 }
 for(i=LightPortNoNum;i<LightPortNoNum+LightPortNum;i++)
 {
	if(LightSwitch==1)
	{
	 outportb(*(OutPortMem[i].add),~OutPortMem[i].data);
	}
	else
	{
	 outportb(*(OutPortMem[i].add),0xff);
	}
 }
 for(i=LightPortNoNum+LightPortNum;i<PortNum;i++)
 {
	outportb(*(OutPortMem[i].add),~OutPortMem[i].data);
 }
}
void ClearPort(int mode)//清口
{
 if(mode==0)
 {
	FreqClear();
	for(int i=0;i<PortNum;i++)
	{
	 OutPortMem[i].data=0x00;
	}
 }
 if(mode==1)
 {
	for(int i=0,j=0;i<PortNum;i++)
	{
	 if(i==RunFounNoUsePort[j].index&&j<RunFounNoUsePortNum)
	 {
		OutPortMem[i].data&=RunFounNoUsePort[j].PortData;
		j++;
	 }
	 else
	 {
	 OutPortMem[i].data=0x00;
	 }
	}
 }
 PortDataOut();
}
/////Ding Wei////2001-07-21////////////////////////////////
int Flag[DW_DLJNum]={1,1,1,1,1,1};                  //定位标志
long int Stopstarttime[DW_DLJNum];         		      //定位开始时间
int DWstoptime[DW_DLJNum]={0,0,0,0,0,0}; 		            //定位微调时间
int DWpoint[1][DW_DLJNum]={{0x01,0x02,0x04,0x08,0x10,0x20}}; //定位点位置
BUTTONPORT DLJpoint[DW_DLJNum]={
								{No4,0x04},
								};
int DWunit[DW_DLJgroup]={1,1,1,1,1,1};

void DingWei(int tempvalue)
{
	 int DW_DLJstart=0;
	 for(int unit=0;unit<DW_DLJgroup;unit++)
	 {
			 int t_temp=tempvalue&0x03;
			 if(t_temp==3)
			 {
				for(int i=DW_DLJstart;i<DW_DLJstart+DWunit[unit];i++)
				{
					 Stopstarttime[i]=0;
					 Flag[i]=1;  //定位标志赋初值
					 OutPortMem[DLJpoint[i].index].data|=DLJpoint[i].PortData;
					 outportb(*(OutPortMem[DLJpoint[i].index].add),~OutPortMem[DLJpoint[i].index].data);
				}
			 }
			 else
			 if(t_temp==0)
			 {
					for(int i=DW_DLJstart;i<DW_DLJstart+DWunit[unit];i++)
					{
						 Stopstarttime[i]=0;
						 Flag[i]=1;  //定位标志赋初值
						 OutPortMem[DLJpoint[i].index].data&=~DLJpoint[i].PortData;
						 outportb(*(OutPortMem[DLJpoint[i].index].add),~OutPortMem[DLJpoint[i].index].data);
					}
			 }
			 else
			 {
					for(int i=DW_DLJstart;i<DW_DLJstart+DWunit[unit];i++)
					{
						if((inportb(InPortAdd2)&DWpoint[t_temp-1][i])&&(OutPortMem[DLJpoint[i].index].data&DLJpoint[i].PortData))
						{
							if(Flag[i]==1)
							{
								Stopstarttime[i]=GetTime();
								Flag[i]=(-1)*Flag[i];
							}
							if((GetTime()-Stopstarttime[i])>DWstoptime[i])
							{
								OutPortMem[DLJpoint[i].index].data&=~DLJpoint[i].PortData;
								outportb(*(OutPortMem[DLJpoint[i].index].add),~OutPortMem[DLJpoint[i].index].data);
								Flag[i]=1;
							}
						}
				 }
			}
			DW_DLJstart+=DWunit[unit];
			tempvalue>>=2;
	}
}
void QueuePush(QUEUE **PointHead,QUEUE **PointEnd,const BUTTONPORT *bump,int bumpnum)//压栈
{
 for(int i=0;i<bumpnum;i++)
 {
	 if((*PointEnd)==NULL)//建立新结点
	 {
		 (*PointHead)=(*PointEnd)=(QUEUE*)malloc(sizeof(QUEUE));
		 (*PointHead)->prev=NULL;
		 (*PointHead)->next=NULL;
		 (*PointEnd)->portdata=bump[i];
	 }
	 else
	 {
		 (*PointEnd)->next=(QUEUE*)malloc(sizeof(QUEUE));
		 (*PointEnd)->next->prev=(*PointEnd);
		 (*PointEnd)=(*PointEnd)->next;
		 (*PointEnd)->next=NULL;
		 (*PointEnd)->portdata=bump[i];
	 }
 }
}
void QueueFoun(QUEUE **OnPointHead,QUEUE **OnPointEnd,QUEUE **OffPointHead,QUEUE **OffPointEnd,unsigned long &OldTime,int DelayTime)//执行
{
 QUEUE *ontemp,*offtemp;
 int delflag=0;
 if(GetTime()-OldTime>=DelayTime)
 {
	 OldTime=GetTime();
	 if((*OnPointHead)!=NULL&&(*OffPointHead)!=NULL)
	 {
	  ontemp=(*OnPointHead);
	  for(;ontemp!=NULL;)
	  {
		  offtemp=(*OffPointHead);
		  for(;offtemp!=NULL&&ontemp!=NULL;)
			{
			 if(ontemp->portdata.index==offtemp->portdata.index
					 &&ontemp->portdata.PortData==offtemp->portdata.PortData)
			 {
				 if(ontemp==(*OnPointHead)&&ontemp==(*OnPointEnd))
				 {
					 free(ontemp);
					 (*OnPointHead)=(*OnPointEnd)=ontemp=NULL;
				 }
				 else
				 {
					 if(ontemp==(*OnPointHead))
					 {
						 (*OnPointHead)=(*OnPointHead)->next;
						 free(ontemp);
						 ontemp=(*OnPointHead);
						 ontemp->prev=NULL;
					 }
					 else
					 {
						 if(ontemp==(*OnPointEnd))
						 {
							(*OnPointEnd)=(*OnPointEnd)->prev;
					    free(ontemp);
					    ontemp=(*OnPointEnd);
					    ontemp->next=NULL;
						 }
					   else
					   {
					    if(ontemp!=(*OnPointHead)&&ontemp!=(*OnPointEnd))
						{
						    ontemp->next->prev=ontemp->prev;
						    ontemp=ontemp->next;
								free(ontemp->prev->next);
						    ontemp->prev->next=ontemp;
					    }
					   }
				   }
				  }
					if(offtemp==(*OffPointHead)&&offtemp==(*OffPointEnd))
				  {
					  free(offtemp);
						(*OffPointHead)=(*OffPointEnd)=offtemp=NULL;
				  }
				  else
				  {
						if(offtemp==(*OffPointHead))
					  {
						  (*OffPointHead)=(*OffPointHead)->next;
						  free(offtemp);
						  offtemp=(*OffPointHead);
						  offtemp->prev=NULL;
						}
					  else
					  {
						  if(offtemp==(*OffPointEnd))
						  {
							  (*OffPointEnd)=(*OffPointEnd)->prev;
							  free(offtemp);
								offtemp=(*OffPointEnd);
							  offtemp->next=NULL;
						  }
							else
						  {
							  if(offtemp!=(*OffPointHead)&&offtemp!=(*OffPointEnd))
								{
								  offtemp->next->prev=offtemp->prev;
								  offtemp=offtemp->next;
								  free(offtemp->prev->next);
								  offtemp->prev->next=offtemp;
							  }
						  }
						}
				  }
				  delflag=1;
				  break;
			  }
			  else
				{
				  offtemp=offtemp->next;
			  }
		  }
			if(delflag==0)
		  {
			  ontemp=ontemp->next;
			}
		  else
		  {
			  delflag=0;
		  }
	  }
	 }
	 if((*OnPointHead)!=NULL)
	 {
		 int i=(OutPortMem[(*OnPointHead)->portdata.index].data)
									 &((*OnPointHead)->portdata.PortData);
		 if(i==0)
		 {
			 OutPortMem[(*OnPointHead)->portdata.index].data=OutPortMem[(*OnPointHead)->portdata.index].data^
										 (*OnPointHead)->portdata.PortData;
			 outportb(*(OutPortMem[(*OnPointHead)->portdata.index].add),~OutPortMem[(*OnPointHead)->portdata.index].data);
		 }
		 if((*OnPointHead)->next!=NULL)
		 {
			 (*OnPointHead)=(*OnPointHead)->next;
			 free((*OnPointHead)->prev);
			 (*OnPointHead)->prev=NULL;
		 }
		 else
		 {
			 free((*OnPointHead));
			 (*OnPointHead)=(*OnPointEnd)=NULL;
		 }
	 }
//	 for(int off_i=0;(*OffPointHead)!=NULL&&off_i<3;off_i++)
	 if((*OffPointHead)!=NULL)
	 {
		 int i=(OutPortMem[(*OffPointHead)->portdata.index].data)
									 &((*OffPointHead)->portdata.PortData);
		 if(i>0)
		 {
			 OutPortMem[(*OffPointHead)->portdata.index].data=OutPortMem[(*OffPointHead)->portdata.index].data^
										 (*OffPointHead)->portdata.PortData;
			 outportb(*(OutPortMem[(*OffPointHead)->portdata.index].add),~OutPortMem[(*OffPointHead)->portdata.index].data);
		 }
		 if((*OffPointHead)->next!=NULL)
		 {
			 (*OffPointHead)=(*OffPointHead)->next;
			 free((*OffPointHead)->prev);

⌨️ 快捷键说明

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