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

📄 amain.cpp

📁 汽车气门生产自控系统控制算法及源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//---------------------------------------//
//  工程文件: 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 + -