?? function.cpp
字號:
#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 + -