📄 amain.cpp
字号:
//---------------------------------------//
// 工程文件: ARON.PRJ
// 程序: MAIN.CPP
// 功能: 系统主控程序
// 作者: 胡丙龙
// 时间: 97年9月10日
//---------------------------------------//
#include <alloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include <math.h>
#include <float.h>
#include <dir.h>
#include "afun.h"
#include "adps.h"
#include "akey.h"
//定义系统全局变量
FILE *fp16; //汉字库的文件指针
char filename[13]="NONAME.DAT"; //编辑的文件名
char mnumber[3]="00"; //机台编号
char mtype[9]="Unknown"; //气门型号
char mlen[5]="00.0"; //气门杆长
char mradius[5]="00.0"; //气门杆径
char drlntp=SOLID_LINE; //绘图线型
char drcolor=WHITE; //绘图颜色
char modified=FALSE; //图形修改标志
char graphexist=FALSE; //图形已调入内存标志
DPS *head; //图形数据指针
int x0=0,y0=0; //绘图区参考点(左下点)坐标
int step=5; //移动步距
int comport=1;
int COMREGBASE;
int COMINTRNO;
int COMOPEN;
int COMCLOSE;
int comerror=0;
int sendcount=0,receivecount=0;
int sendready=0;
char *combuf;
//主函数
int main()
{
FILE *fp;
fp=fopen("acom.cfg","rb");
if(fp!=NULL) fread(&comport,sizeof(char),1,fp);
fclose(fp);
if(comport==1){
COMREGBASE=0x3f8; //串口1参数
COMINTRNO=0x0c;
COMCLOSE=0x10;
COMOPEN=0x0ef;
}
else{
COMREGBASE=0x2f8; //串口2参数
COMINTRNO=0x0b;
COMCLOSE=0x08;
COMOPEN=0x0f7;
}
head=(DPS*)malloc((FILE_SIZE)*LEN);
InitGraph(); //图形初始化
if (!OpenLIB()) ErrorMsg(); //打开点阵汉字库
ShowMenu(); //显示图形处理菜单
MnMenuChis(); //进入菜单选择功能
RealQuit(); //退出系统
return (0);
}
//图形初始化
void InitGraph()
{
int graphmode,graphdriver=DETECT;
registerbgidriver(EGAVGA_driver); //建立图形独立运行程序
initgraph(&graphdriver,&graphmode,"");
}
//系统主菜单,进入画图环境
void ShowMenu()
{
int x,y,i;
char *mm[]={
"功能菜单",
"数据读取",
"图形编辑",
"页面上移",
"页面下移",
"页面左移",
"页面右移",
"全图显示",
"数据输出",
"参数设定",
"图形打印",
"系统返回",
};
HideMouse();
setfillstyle(1,0);
bar(0,0,639,479);
setfillstyle(1,3);
bar(0,0,78,478);
Box1(1,1,75,39);
PutCC16(8,10,0,4,mm[0]);
for (i=1;i<12;i++) //显示图形编辑功能菜单
{
Box1(1,26+35*i,75,30);
PutCC16(8,32+35*i,0,1,mm[i]);
}
setfillstyle(1,0);
rectangle(0,0,639,479);
bar(80,1,638,478);
ShowBkGrnd(1); //显示作图区背景---坐标网格
ShowCoord(10,20); //显示横纵坐标刻度
setfillstyle(1,3);
bar(80,459,638,478);
rectangle(79,459,638,478);
ShowCurState(); //显示作图状态
ShowMouse();
}
//图形处理菜单选择
void MnMenuChis()
{
int i,btn,x,y,choice;
choice=0;
x=300;
y=200;
InitMouse();
ShowMouse();
for (;;)
{
HideMouse();
if (choice) PopUp1(1,26+35*choice,75,30); //如果有另一选项,则原来的一项按钮弹起
ShowMouse();
btn=0;
choice=0;
while(btn!=LEFT) ReadMouse(&btn,&x,&y);
while(LeftPrsd()); //滤掉多余按键信号
HideMouse();
for(i=1;i<12;i++)
{
if(MsInBox(1,26+35*i,75,26+35*i+30,x,y))
{
PrsBox1(1,26+35*i,75,30); //选择的一项按钮被按下
choice=i;
break;
}
}
ShowMouse();
switch(choice)
{
case 1:
ReadData(); //数据读取
break;
case 2:
EditGraph(); //图形编辑
break;
case 3:
PageUp(); //屏幕上移
break;
case 4:
PageDown(); //屏幕下移
break;
case 5:
PageLeft(); //屏幕左移
break;
case 6:
PageRight(); //屏幕右移
break;
case 7:
FullGraph(); //全图显示
break;
case 8:
WriteData(); //数据输出
break;
case 9:
SetSysPara(); //图形打印
break;
case 10:
PrintGraph(); //系统参数设置
break;
case 11:
Quit(); //系统退出
return;
}
}
}
//----------------------------------------------------//
//函数名:READDATA()
//功能: 读取数据
//入口参数:
//出口参数:
//----------------------------------------------------//
void ReadData()
{
int x1,y1,len,high,i;
int x,y,btn,choice;
void *buf;
char *item[]={ "从串口读",
"从文件读"};
char oldcolor;
oldcolor=getcolor();
HideMouse();
setfillstyle(1,7);
setlinestyle(0,0,1);
setcolor(15);
x1=83;
y1=61;
len=80;
high=30;
buf=malloc(imagesize(x1-2,y1-2,x1+len+2,y1+high*2+2));
getimage(x1-2,y1-2,x1+len+2,y1+high*3+2,buf);
bar(x1-2,y1-2,x1+len+2,y1+high*2+2);
rectangle(x1-2,y1-2,x1+len+2,y1+high*2+2);
for(i=0;i<2;i++) //显示子菜单
{
PutCC16(x1+12,y1+high*i+6,0,1,item[i]);
setcolor(15);
rectangle(x1,y1+high*i,x1+len,y1+high*(i+1));
}
ShowMouse();
btn=0;
while(btn!=LEFT) ReadMouse(&btn,&x,&y);
while(LeftPrsd());
for(i=0;i<2;i++) //判断所选的子菜单功能
{
if (MsInBox(x1,y1+high*i,x1+len,y1+high*(i+1),x,y))
{
choice=i+1;
break;
}
}
HideMouse();
putimage(x1-2,y1-2,buf,COPY_PUT);
free(buf);
setcolor(oldcolor);
switch(choice)
{
case 1:
ReadFromIFD(); //从接口读数据
break;
case 2:
ReadFromFile(); //从文件读数据
break;
}
ShowMouse();
}
//----------------------------------------------------//
//函数名:WRITEDATA()
//功能: 数据输出
//入口参数:
//出口参数:
//----------------------------------------------------//
void WriteData()
{
int x1,y1,len,high,i;
int x,y,btn,choice;
void *buf;
char *item[]={ "向串口写",
"向文件写"};
char oldcolor;
oldcolor=getcolor();
HideMouse();
setfillstyle(1,7);
setlinestyle(0,0,1);
setcolor(15);
x1=82;
y1=306;
len=80;
high=30;
buf=malloc(imagesize(x1-2,y1-2,x1+len+2,y1+high*2+2));
getimage(x1-2,y1-2,x1+len+2,y1+high*3+2,buf);
bar(x1-2,y1-2,x1+len+2,y1+high*2+2);
rectangle(x1-2,y1-2,x1+len+2,y1+high*2+2);
for(i=0;i<2;i++) //显示子菜单
{
PutCC16(x1+12,y1+high*i+6,0,1,item[i]);
setcolor(15);
rectangle(x1,y1+high*i,x1+len,y1+high*(i+1));
}
ShowMouse();
btn=0;
while(btn!=LEFT) ReadMouse(&btn,&x,&y);
while(LeftPrsd());
for(i=0;i<2;i++) //判断所选的子菜单功能
{
if (MsInBox(x1,y1+high*i,x1+len,y1+high*(i+1),x,y))
{
choice=i+1;
break;
}
}
HideMouse();
putimage(x1-2,y1-2,buf,COPY_PUT);
free(buf);
setcolor(oldcolor);
switch(choice)
{
case 1:
WriteToIFD(); //向接口写数据
break;
case 2:
WriteToFile(); //向文件写数据
break;
}
ShowMouse();
}
//----------------------------------------------------//
//函数名:READFROMFILE()
//功能: 从文件读数据
//入口参数:
//出口参数:
//----------------------------------------------------//
void ReadFromFile()
{
FILE *fp;
char *buf;
int i;
char *s;
if (!GetFile(READ)) return; //获取有效文件名
else
{
fp=fopen(filename,"rb"); //打开文件
buf=(char*)malloc((FILE_SIZE)*sizeof(char));
if (buf)
{
fseek(fp,0,SEEK_SET);
fread(mnumber,1,2,fp);
fread(mtype,1,12,fp);
fread(mlen,1,4,fp);
fread(mradius,1,4,fp);
fread(buf,FILE_SIZE,1,fp);
for(i=0;i<100;i++) //压力曲线
{
head[i].type=PRESSURE;
head[i].color=PCOLOR;
head[i].x=i;
head[i].y=buf[i]&0xff;
}
for(i=100;i<200;i++) //电压曲线
{
head[i].type=VOLTAGE;
head[i].color=VCOLOR;
head[i].x=i-100;
head[i].y=buf[i]&0xff;
}
free(buf);
ClearState();
ShowCurState();
graphexist=TRUE; //图形已调入内存
ShowBkGrnd(1); //显示作图背景网格
ShowCoord(10,20); //显示坐标轴刻度
ShowGraph(1); //显示曲线
}
fclose(fp);
}
}
//----------------------------------------------------//
//函数名:WRITETOFILE()
//功能: 向文件写数据
//入口参数:
//出口参数:
//----------------------------------------------------//
void WriteToFile()
{
FILE *fp;
char *buf;
int i;
if (!GetFile(WRITE)) return; //获取有效文件名
else
{
fp=fopen(filename,"wb");
buf=(char*)malloc((FILE_SIZE)*sizeof(char));
if (buf)
{
fseek(fp,0,SEEK_SET);
fwrite(mnumber,1,2,fp);
fwrite(mtype,1,12,fp);
fwrite(mlen,1,4,fp);
fwrite(mradius,1,4,fp);
for(i=0;i<200;i++)
{
buf[i]=head[i].y;
}
fwrite(buf,FILE_SIZE,1,fp);
free(buf);
modified=FALSE;
ClearState();
ShowCurState();
}
}
fclose(fp);
}
//----------------------------------------------------//
//函数名:READFROMIFD()
//功能: 从外设---串口读数据
//入口参数:
//出口参数:
//----------------------------------------------------//
void ReadFromIFD()
{
int key,dtime=0,i;
char *inferr="通讯失败";
char *infok="通讯成功";
combuf=(char*)malloc((FILE_SIZE+5)*sizeof(char));
receivecount=0;
sendcount=0;
sendready=0;
comerror=0;
SetComIntr();
InitCom();
SendByte(0x80); //发送首字节0x80
for(;;)
{
key=bioskey(1);
if(key==ESCKEY) {comerror=1;break;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -