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

📄 an11.c

📁 采用PC104实现多串口通信,同时显示数据.此程序可以直接使用.
💻 C
📖 第 1 页 / 共 5 页
字号:
#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
#include<string.h>
#include<bios.h>
#include<io.h>
#include <fcntl.h>
#include<process.h>
#include<alloc.h>
//#include"display.h"


#define SPPDATA 0x0378
#define SPPSTAT 0x0379
#define SPPCNTL 0x037a
#define EPPADDR 0x037b
#define EPPDATA 0x37c
#define a   0
#define b   0
#define L 320
#define W 240
#define x0 0
#define y0 0
#define WORD unsigned int
#define BYTE unsiged char

#ifdef __cplusplus
	 #define __CPPARGS ...
#else
	 #define __CPPARGS
#endif

#define SER_RBF        0    // the read buffer
#define SER_THR        0    // the write buffer
#define SER_IER        1    // the int. enable register
#define SER_IIR        2    // the int. identification register
#define SER_LCR        3    // control data config. and divisor latch
#define SER_MCR        4    // modem control reg.
#define SER_LSR        5    // line status reg.
#define SER_MSR        6    // modem status of cts, ring etc.
#define SER_DLL        0    // the low byte of baud rate divisor
#define SER_DLH        1    // the hi byte of divisor latch


#define SER_BAUD_9600  12


#define SER_GP02        8     // enable interrupt

#define COM_1           0x3f8 // base port address of port 0
#define COM_2           0x2F8 // base port address of port 1
#define COM_3           0x3e8
#define COM_4           0x2e8

#define SER_STOP_1      0     // 1 stop bit per character
#define SER_STOP_2      4     // 2 stop bits per character

#define SER_BITS_5      0     // send 5 bit characters
#define SER_BITS_6      1     // send 6 bit characters
#define SER_BITS_7      2     // send 7 bit characters
#define SER_BITS_8      3     // send 8 bit characters

#define SER_PARITY_NONE 0     // no parity
#define SER_PARITY_ODD  8     // odd parity
#define SER_PARITY_EVEN 24    // even parity

#define SER_DIV_LATCH_ON 128  // used to turn reg 0,1 into divisor latch

#define PIC_IMR    0x21   // pic's interrupt mask reg.
#define PIC_ICR    0x20   // pic's interupt control reg.

#define INT_SER_PORT_0    0x0C  // port 0 interrupt com 1
#define INT_SER_PORT_1    0x0B  // port 0 interrupt com 2
#define INT_SER_PORT_2    0x0f  //com 3
#define INT_SER_PORT_3    0x0d  //com 4


//#define SERIAL_BUFF_SIZE 128    // current size of circulating receive buffer

// G L O B A L S /////////////////////////////////////////////////////////////

int malui_data_communt(int,int);
void huanwei(int h_count,int start_bei,int over_bei);
int pinlui_data_communt(int,int);
int huzaibo_data_communt(int,int);
void draw_number(int* m0,int* b0,int* xx,int* yy,int* curx,int* cury,char* p,int x,int length);
void change_han(int start,int end,int *xx,int *yy,int color);
void change_han_zz(int start,int end,int *xx,int *yy,int color);
int hanzib();
int hanzic();
void button_xu(int x,int y);
void anzi();
int falinn_data_communt(int,int);
int canshui_12_communt(int);
int canshui_11_communt(int);
int canshui_10_communt(int);
void buttonx(int x,int y);
void Mywin(int x1,int y1,int x2,int y2);
void MySwin(int x,int y,int length,int width);
void setmenu(int x1,int y,int x2,int m,int n);
void onSM1(int x1,int y1,int x2,int y2);
void onSMcls(int x1,int y1,int x2,int y2);
void draw_lin();

int  drawline();
void serial_to(int countt,char *pp,int serial_portt);
void interrupt far (*Old_Isr)(__CPPARGS);  // holds old com port interrupt handler


unsigned char ser_buffer[50];  // the receive buffer
int  SERIAL_BUFF_SIZE=50;

int ser_end = -1,ser_start=-1;      // indexes into receive buffer
unsigned char ser_ch;int char_ready=0;           // current character and ready flag
int old_int_mask;                   // the old interrupt mask on the PIC
int open_port;                      // the currently open port
int serial_lock = 0;              	// serial ISR semaphore so the buffer
unsigned char jidai_communt_data[50];
int jidai_data_long;
int jidai_over;
int jidai_flag=0;
int jidai_he=0;
int led_dataok;
unsigned char ji_communt_data[20];

long int fist=0;
int jidai_he_t=0;

float test_tongxin;
float bili;
char  cbili[3]="0.0";
char  test_char[2];

int malui_chang_zh=0;
int huzaibo_chang_zh=0;
int bidui_chang_zh=0;
int cishu_chang_zh=0;
int pinlui_chang_zh=0;
int pinpian_chang_zh=0;
int gonglui_chang_zh=0;
int jiatiao_chang_zh=0;
int jiazai_chang_zh=0;
int serial_comtz;


int pserial_lock=0;
unsigned char pser_buffer[50];
int  pSERIAL_BUFF_SIZE=50;
int pser_end = -1,pser_start=-1;
unsigned char pser_ch;
unsigned char shanxin_communt_data[50];
int shanxin_data_long;
int shanxin_over;
int shanxin_flag=0;
unsigned char sh_communt_data[20];


int sserial_lock=0;
unsigned char sser_buffer[50];
int  sSERIAL_BUFF_SIZE=50;
int sser_end = -1,sser_start=-1;
unsigned char sser_ch;
unsigned char shanwei_communt_data[50];
int shanwei_data_long;
int shanwei_over;
unsigned char we_communt_data[20];
int shanwei_flag=0;
int shanwei_he=0;

int shanwei_he_zhuan;


unsigned char serial_com10[20];
unsigned char com10_ch;
int com_ser_end=-1;
int com_ser10=8;

float malui_data_float;
int malui_data_int;

int done;
int flag1=0;
int flag3=0;
int flag2=0;
int flag=0;
int up_flag=0;
int up_flag1=0;
int flag5=0;
int com1_flag5=0;

unsigned char communt_data[100];
char  communt;

int  tzhong_bidui=1;
int  tzhong_tiaozhi=2;
int  tzhong_jiazai=2;
int  tzhong_dahuan=1;
int  tzhong_falin=1;
int  tzhong_jiazaimin=1;
int  tzhong_jiatiao=2;
int  tzhong_falinn=0;
int  wait=0;

unsigned int led_data=0;

int  jiazai_guan;

char malui_data_flow[]={"1.2"};
char smg_pinlui[]="1750000";
char smg_pinpian[]="15";
char smg_gonglui[]="00";
char smg_cishu[]="2000";
char huzaibo_data_char[]="9.60";

char smg_error[]="0000";

int  pinlui_communt_data;
int  malui_communt_data;

float pinlui_data_float;
char  pinlui_zhong_data[2];
float huzaibo_float;



char  char_comp_malui[]={"000"};
char  char_comp_pinlui[]={"0000000"};
char  char_comp_pinpian[]={"00"};
char  char_comp_gonglui[]={"11"};
char  char_comp_cishu[]={"1111"};
char  char_comp_huzaibo[]={"0000"};

int    int_comp_bidui=0;
int    int_comp_falin=0;
int    int_comp_tiaozhi=0;
int    int_comp_jiatiao=0;
int    int_comp_dahuan=0;
int    int_comp_jiazai=0;
int    int_comp_jiazailin=0;
int    check;

static void interrupt far (*oldkb)();
static void interrupt newkb();

int key,update=0;

void set_bar(int *,int *,int,int,int,int,int);
void set_cur_line(int *,int *,int,int,int);
void set_chanel_data(char *,char *,int);
int  hanzi();

int cmp_updata,cmp_updata1,cmp_updata2,cmp_updata3,cmp_updata4,cmp_updata5;


int  pinlui_int;
int  pinpian_int;
int  gonglui_int;
int  cishu_int;
int  clr_led=1;


  //	char  *malui_data_zizhen;

  int   h_x=1;
  int   huzaibo_data_8=8;
  int   huzaibo_data_4=4;
  int   huzaibo_data_2=2;
  int   huzaibo_data_1=1;

  int   malui_data_x=0;
  int   huzaibo_data_x;

  int   huzaibo_data_y;
  float huzaibo_data_int;

  char  *huzaibo_string;
  int   jiazai_start=53;int jiazai_over=55;
  int   jiatiao_start=12;int jiatiao_over=14;
  int   jiazaimin_start=2;int jiazaimin_over=4;
  int   jiazait_start=57;int jiazait_over=59;
  int   chuan_start=65;int chuan_over=67;
//  jiazait_start=57;jiazait_over=59;tzhong_jiazai=2;

  int   chuan_data_x=2;
  int   chuan_data_xx=2;
  int   jiazai_data_x=2;
  int   jiatiao_data_x=2;
  int   jiazaimin_data_x=1;
  int   jiazait_data_x=1;
  int   bar_y=1;
  int   k_key=0;
  int   shui_x=0;int shui_y=0;
  int   hanzic_start=0;int hanzic_over=4;

  int   zhong_com=7;
  int   zhong_com_data[100];
  int   zhong_done=0;
  int   xx,yy,b0,curx,cury;

  unsigned char buffer_data[100];
  unsigned char co_buffer_data[20];
void interrupt newkb()
{
	key=inportb(0x60);
	switch(key)
	{
		case 130:
			key=49;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 131:
			key=50;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 132:
			key=51;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 133:
			key=52;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 134:
			key=53;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 135:
			key=54;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 136:
			key=55;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 137:
			key=56;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 138:
			key=57;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 139:
			key=48;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 129:
			key=27;update=1;cmp_updata1=0;cmp_updata2=0;cmp_updata4=1;zhong_done=1;wait=1;
			break;
		case 48:
			key=115;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 141:
			key=61;update=1;zhong_done=1;
			break;
		case 32:
			key=99;update=1;cmp_updata1=0;cmp_updata2=0;zhong_done=1;
			break;
		case 46:
			key=113;update=1;cmp_updata=1;cmp_updata3=0;zhong_done=1;
			break;
		case 140:
			key=45;update=1;cmp_updata1=0;cmp_updata2=0;zhong_done=1;
			break;
		case 30:
			key=97;update=1;zhong_done=1;        //自检
			break;
		case 31:
			key=98;update=1;zhong_done=1;        //解锁
			break;
		case 34:
			key=101;update=1;zhong_done=1;     //复位
			break;
		case 18:
			key=85;update=1;zhong_done=1;     //自毁
			break;
		case 143:
			key=9;update=1;zhong_done=1;
			break;
		case 33:
			key=100;update=1;zhong_done=1;
			break;
		default:
			break;
	}
	(*oldkb)();

}

int main(void)
  {
	int hanzib();
	int hanzic();
	int m0,m1,add;
	int b1,b2;
	int i,j,k,f,x,y,h;
	int errorcode;
	int bkcolor,midx,midy,ch;
	int gdriver=EGA,gmode=EGAHI;
	int handle;int num;
	int esc=0;
	int graphdriver;
	int graphmode;
	FILE* wrfile;
	FILE* fppa;
	WORD  modex[59][16];



	char *p;


  void *gothic_fontp;
  unsigned fsize;

  handle = open("Litt.chr", O_RDONLY|O_BINARY); //选择小号字体
		 if (handle == -1)
		 {
		  printf("unable to open font file 'GOTH.CHR'\n");
		  exit(1);
		 }

		fsize=filelength(handle);
		 gothic_fontp = malloc(fsize);
		 if (gothic_fontp == NULL)
		 {
		  printf("unable to allocate memory for font file'GOTH.CHR'\n");
		  exit(1);
		 }
	if (read(handle, gothic_fontp, fsize) != fsize)
		 {
		  printf("unable to read font file 'GOTH.CHR'\n");
		  exit(1);
		 }
	close(handle);
	if (registerfarbgifont(gothic_fontp) !=SMALL_FONT)
		 {
			printf("unable to register font file'GOTH.CHR'\n");
			exit(1);
		 }



	initgraph(&gdriver,&gmode,"");
	errorcode=graphresult();
	if(errorcode!=grOk)
	  {
		printf("Graphics error:%s\n",grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1);
		}

/*y是垂直坐标,x是水平坐标,xx是文本水平坐标,yy是垂直文本坐标*/

//h=0;
xx=a+64;yy=b+87;h=2;
b0=b1=b2=m0=m1=0;/*m2_zhen=m2_data_flow=time=m3_zhen=m3_time=m4_zhen=m4_time=0;*/

curx=a+40;cury=b+21;xx=curx+4;yy=cury-2;
x=a+4+4+88;y=b+4+3+16+5;


//设置键盘中断

oldkb=getvect(9);
disable();
setvect(9,newkb);
enable();
anzi();

//while(!wait){}
delay(3000);

setgraphmode(getgraphmode());
h=1;b0=0;add=0;m0=1;
MySwin(x0,y0,L,W);
setcolor(9);
//outtextxy(a+5,10, "ss");  //title

i=0;j=0;
for(i=0;i<2;i++)
for(j=0;j<4;j++)
	{
		setcolor(6);
		setmenu(a+7+10+155*i,b+30+24*j,a+7+10+140+155*i,i,j);
	}


Mywin(a,b+30+24*j, a+L,b+20+24*j+70);
setfillstyle(1,15);
bar(a+4,b+30+24*j+4,a+L-4,b+30+24*j+60-3);

/*Mywin(a,b+20+24*j, a+L,b+10+24*j+70);
setfillstyle(1,7);
bar(a+4,b+10+24*j+4,a+L-4,b+10+24*j+60-3); */


setcolor(8);
line(a+4,b+20+24*j+70+1,a+L-4,b+20+24*j+70+1);

buttonx(a+76+7+1+10+155+46,b+31+1+24+24+22);

draw_lin();
hanzib();  //调用的汉字

huanwei(1,0,4);

wrfile=fopen("wrsave.dat","r");
for(i=0;i<3;i++)
fscanf(wrfile,"malui_data_flow=%c",&malui_data_flow[i]);

setfillstyle(1,7);
onSM1(a+4,b+24+6,a+79+10,b+45+6);


x=a+76+7+1+10;y=b+31+1;
set_bar(&x,&y,1,45,17,0,0);
setcolor(15);
outtextxy(a+76+7+1+15,b+31+2,malui_data_flow);


for(i=0;i<7;i++)
fscanf(wrfile,"smg_pinlui=%c",&smg_pinlui[i]);


x=a+76+7+1+10+155;y=b+31+1;
set_bar(&x,&y,7,60,17,0,0);
setcolor(8);
outtextxy(a+76+7+1+10+155+4,b+31+1+2,smg_pinlui);


for(i=0;i<2;i++)
fscanf(wrfile,"smg_pinpian=%c",&smg_pinpian[i]);
x=a+76+7+1+10+155;y=b+31+1+24;
set_bar(&x,&y,7,60,17,0,0);
setcolor(8);
outtextxy(a+76+7+1+10+155+4,b+31+1+2+24,smg_pinpian);

for(i=0;i<2;i++)
 fscanf(wrfile,"smg_gonglui=%c",&smg_gonglui[i]);

x=a+76+7+1+10+155;y=b+31+1+24+24;
set_bar(&x,&y,7,60,17,0,0);
setcolor(8);
outtextxy(a+76+7+1+10+2+2+155,b+31+1+2+24+24,smg_gonglui);

for(i=0;i<4;i++)
 fscanf(wrfile,"huzaibo_data_char=%c",&huzaibo_data_char[i]);

 x=a+76+7+1+10;y=b+31+1+24;
 set_bar(&x,&y,7,45,17,0,0);
 setcolor(8);
 outtextxy(a+76+7+1+10+2+2,b+31+1+2+24,huzaibo_data_char);

fscanf(wrfile,"tzhong_jiatiao=%d",&tzhong_jiatiao);
if(tzhong_jiatiao==1)

 {jiazai_start=51;jiazai_over=53;}
else
 {jiazai_start=53;jiazai_over=55;}
 x=a+76+7+1+10;y=b+31+1+24+24+24;
  set_bar(&x,&y,7,45,17,0,0);
 x=a+76+7+1+10+5;y=b+31+1+24+24+24;
 change_han(jiazai_start,jiazai_over,&x,&y,8);

fscanf(wrfile,"tzhong_jiazai=%d",&tzhong_jiazai);
if(tzhong_jiazai==1)

 {jiazait_start=55;jiazait_over=57;}
else
 {jiazait_start=57;jiazait_over=59;}

 x=a+76+7+1+10;y=b+31+1+24+24;
 set_bar(&x,&y,7,45,17,0,0);
 x=a+76+7+1+10+5;y=b+31+1+24+24;
 change_han(jiazait_start,jiazait_over,&x,&y,8);


 fclose(wrfile);

//setcolor(1);
//bar(a+2,b+31+1+24+24+24+25,a+6+310,b+31+1+24+24+24+25+25);

malui_data_float=atof(&malui_data_flow);
huzaibo_data_y=malui_data_float;
huzaibo_data_y=36/huzaibo_data_y;

outportb(SPPCNTL,0x04);
outportb(SPPDATA,0);
i=0;




while(esc==0)
 {
  Open_Serial(COM_1,SER_BAUD_9600,SER_PARITY_NONE | SER_BITS_8 | SER_STOP_1);
  Open_Serial(COM_2,SER_BAUD_9600,SER_PARITY_NONE | SER_BITS_8 | SER_STOP_1);
  Open_Serial(COM_3,SER_BAUD_9600,SER_PARITY_NONE | SER_BITS_8 | SER_STOP_1);


while(!zhong_done)
 {
  if(jidai_over==1)
	{
	 jidai_over=0;
	 i=0;
	 if(jidai_flag==1)
	  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -