帮我看看这段代码是什么意思?是否有问题。
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <MATH.h>
static int baseaddress=0X220; //I/O 地址
static float PI=3.1415926;
int oneorthree; //0--单相;1--三相
int inorout; //0--键盘控制;1--开关控制
int set_v; //电压值
int set_i; //电流值
int iopoint;
char outbyte,inbyte;
int buffer1[120][6];
struct date startdate,currentdate;
struct time starttime,currenttime;
void interrupt (*oldvect)(...);
void interrupt dataio(...);
void i_enable(void);
void i_disable(void);
void data_process(void);
void show1(); //display
int main(void)
{
char kb1;
int temp;
clrscr();
getdate(&startdate);
gettime(&starttime);
oneorthree=0;
inorout=0;
set_v=57;
set_i=5;
iopoint=0;
show1();
data_process();
i_enable();
do
{
if (kbhit())
{
kb1=getch();
switch (kb1) {
case '1': break;
case '2': break;
case '3': break;
case '0': break;
default: break;
}
}
} while (kb1!='9');
i_disable();
return 0;
}
void show1(void)
{
gotoxy(3,3);
cputs("XXXXXXXX系统");
gotoxy(3,4);
cputs("============");
gotoxy(3,6);
if (inorout==0)
cputs("系统状态:开关控制");
else
cputs("系统状态:键盘控制");
gotoxy(3,8);
printf("启动时间: %4d-%02d-%02d %2d:%02d:%02d\n" ,startdate.da_year,startdate.da_mon, startdate.da_day,
starttime.ti_hour, starttime.ti_min, starttime.ti_sec);
gotoxy(3,9);
if (oneorthree==0)
cputs("相数:单相");
else
cputs("相数:三相");
gotoxy(3,10);
printf("电流值:%d (I)",set_i);
gotoxy(3,11);
printf("电压值:%d (V)",set_v);
return;
}
void data_process(void)
{
int i;
for (i=0 ;i<120;i++)
{
if (oneorthree==0)
{
buffer1[i][1]=sin(i*2*PI/120)*32767;
buffer1[i][2]=sin(i*2*PI/120)*32767*set_i/10;
}
else
{
buffer1[i][1]=sin(i*2*PI/120)*32767;
buffer1[i][2]=sin(i*2*PI/120)*32767*set_i/10;
buffer1[i][3]=sin(i*2*PI/120+2*PI/3)*32767;
buffer1[i][4]=sin(i*2*PI/120+2*PI/3)*32767*set_i/10;
buffer1[i][5]=sin(i*2*PI/120+4*PI/3)*32767;
buffer1[i][6]=sin(i*2*PI/120+4*PI/3)*32767*set_i/10;
}
}
return;
}
void i_enable(void)
{
int temp;
oldvect = getvect(0x72);
setvect(0x72,dataio);
temp=inportb(0x21)&0xFB;
outportb(0x21,temp);
temp=inportb(0xA1)&0xF7;
outportb(0xA1,temp);
return;
}
void i_disable(void)
{
int temp;
setvect(0x72,oldvect);
temp=inportb(0x21)|~0xFB;
outportb(0x21,temp);
temp=inportb(0xA1)|~0xF7;
outportb(0xA1,temp);
return;
}
void interrupt dataio(...)
{
outport(baseaddress,buffer1[iopoint][1]);
outport(baseaddress+2,buffer1[iopoint][2]);
outport(baseaddress+4,buffer1[iopoint][3]);
outport(baseaddress+6,buffer1[iopoint][4]);
outport(baseaddress+8,buffer1[iopoint][5]);
outport(baseaddress+10,buffer1[iopoint][6]);
outportb(baseaddress+12,outbyte);
inbyte=inportb(baseaddress+13);
iopoint++;
if (iopoint==120) iopoint=0;
outportb(0xA0,0x20);
outportb(0x20,0x20);
return;
}