?? 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 + -