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

📄 mainprog.cpp

📁 基于PC104平台
💻 CPP
字号:
#include "mainprog.h"
extern void deal();
extern void initial();
WORD CardStatusYx;

void Watchdog();
void ClearWatchdog();
void DetectCard();
void SCMain();
void SCQuit();
//void InitParallel();
//void ResetParallel();
//void InitAD();
//void ResetAD();
void Interface();
//extern void ReadSecurity();

extern void InitMoxa1();
extern void ResetMoxa1();
extern void InitMoxa2();
extern void ResetMoxa2();
extern void CommInit();
extern void ResetComm();
extern void SetTimer();
extern void ResetTimer();
//extern BOOLEAN SecuCheck();
//extern void interrupt (*ADOldHand)(...);
//extern void interrupt ADNewHand(...);

BOOLEAN ResetState;
BOOLEAN RunState;

void Watchdog()
{
	outportb(0x444,1);
}


void ClearWatchdog()
{
	inportb(0x44);
}

void SCQuit()
{
	ResetComm();
	ResetTimer();
	if (CardStatusYx & 0x1)	ResetMoxa1();
	if (CardStatusYx & 0x2)	ResetMoxa2();
//	if (CardStatusYx & 0x4)	ResetParallel();
//	if (CardStatusYx & 0x8)	ResetAD();
	ClearWatchdog();
	textbackground(BLACK);
	textcolor(WHITE);
	clrscr();
}

void SCMain()
{
	SetTimer();		// setup int8 interrupt   def yxclass.h
	DetectCard();
	CommInit();
	if (CardStatusYx & 0x1) InitMoxa1();
	if (CardStatusYx & 0x2) InitMoxa2();
//	if (CardStatusYx & 0x4) InitParallel();
//	if (CardStatusYx & 0x8) InitAD();

	do {
		if( (watchdog[0]<WATCHDOGLIMIT)&&(watchdog[1]<WATCHDOGLIMIT)&&(watchdog[2]<WATCHDOGLIMIT)&&(watchdog[3]<WATCHDOGLIMIT)
			&&(watchdog[4]<WATCHDOGLIMIT)&&(watchdog[5]<WATCHDOGLIMIT)&&(watchdog[6]<WATCHDOGLIMIT)&&(watchdog[7]<WATCHDOGLIMIT)
			&&(watchdog[8]<WATCHDOGLIMIT)&&(watchdog[9]<WATCHDOGLIMIT) )
			Watchdog();
	//	if (SecuCheck()==TRUE)
		{
		   //yc.selectayc(); 	// must be followed a time gap between yc.startayc()
						// wait for 4067 stable
			yk.doyk();			// process yk
			yx.yxgetdeal();		// process yx
			ym.ymdeal();	   	// process ym
		   // yc.startayc();		// start a/d convert
			yc.ycdeal();		// process yc
		}
		if(port_set[COM1].chk_time_gap!=255)	{ port9.deal(); port_run_flag[8] = TRUE;}
		if(port_set[COM2].chk_time_gap!=255)	{ port10.deal(); port_run_flag[9] = TRUE;}
		if (CardStatusYx & 0x01) {
			if(port_set[PORT1].chk_time_gap!=255)	{ port1.deal(); port_run_flag[0] = TRUE;}
			if(port_set[PORT2].chk_time_gap!=255)	{ port2.deal(); port_run_flag[1] = TRUE;}
			if(port_set[PORT3].chk_time_gap!=255)	{ port3.deal(); port_run_flag[2] = TRUE;}
			if(port_set[PORT4].chk_time_gap!=255)   { port4.deal(); port_run_flag[3] = TRUE;}
		}

		if (CardStatusYx & 0x02) {
			if(port_set[PORT5].chk_time_gap!=255)	{ port5.deal(); port_run_flag[4] = TRUE;}
			if(port_set[PORT6].chk_time_gap!=255)	{ port6.deal(); port_run_flag[5] = TRUE;}
			if(port_set[PORT7].chk_time_gap!=255)	{ port7.deal(); port_run_flag[6] = TRUE;}
			if(port_set[PORT8].chk_time_gap!=255)	{ port8.deal(); port_run_flag[7] = TRUE;}
		}

		Interface();
	} while (RunState == TRUE);  // when F8 F10 pressed quit program
	SCQuit();
}

void main()
{
	do {
		//ReadSecurity();
		ResetState = FALSE;
		RunState = TRUE;
		directvideo=1;
		for(int i; i < 10; i++)
			port_run_flag[i] = FALSE;
		SCMain();
	} while (ResetState == TRUE);
}

void DetectCard()
{
	if (inportb(hardwareset[C36401].address + 2) != 0xff) CardStatusYx |= 0x1;
	else CardStatusYx &= 0xfffe;							// 4 port moxa(1)
	if (inportb(hardwareset[C36402].address + 2) != 0xff) CardStatusYx |= 0x2;
	else CardStatusYx &= 0xfffd;							// 4 port moxa(2)

/*	outportb(hardwareset[C3724].address + 9, 0x00);
	outportb(hardwareset[C3724].address + 3, 0x80);
	outportb(hardwareset[C3724].address + 8, 0xff);
	outportb(hardwareset[C3724].address + 9, 0xff);

	outportb(hardwareset[C3724].address, 0xaa);
	if (inportb(hardwareset[C3724].address) == 0xaa) CardStatusYx |= 0x4;
	else CardStatusYx &= 0xfffb;							// 24 bit parallel card

	if (inportb(hardwareset[C3718].address + 2) != 0xff) CardStatusYx |= 0x8;
	else CardStatusYx &= 0xfff7;  */ //ggg	5.12						// 12 bit ad card
}

/*void InitParallel()
{
	outportb(hardwareset[C3724].address + 9, 0x00); // disable all gates

	outportb(hardwareset[C3724].address + 3, 0x90); // init 8255 #0
																// A0 input B0,C0 output
	outportb(hardwareset[C3724].address + 7, 0x90);
	outportb(hardwareset[C3724].address + 5, 0x00);
	outportb(hardwareset[C3724].address + 6, 0x8f); // init 8255 #1

	outportb(hardwareset[C3724].address + 8, 0x1b); // set launch direction
	outportb(hardwareset[C3724].address + 9, 0xff); // make port active
}                                               // A1 input B1,C1 output

void ResetParallel()
{
	outportb(hardwareset[C3724].address + 8, 0x00);
	outportb(hardwareset[C3724].address + 9, 0x00);
	outportb(hardwareset[C3724].address + 3, 0x00);
	outportb(hardwareset[C3724].address + 7, 0x00);
}

void InitAD()
{
	int i;
	BYTE picmask, temp;
	BYTE StartChan = 0, StopChan = 15, Range = 0;
													// 0: +/-5V  4: 0-10V  5: 0-5V
	asm cli;
	picmask = 1 << (hardwareset[C3718].intno % 8);
	temp = inportb(0x21);               // read PIC old value
	outportb(0x21, temp & !picmask);		// enable PIC IRQ7
	outportb(0x20, 0x20);					// reset the PIC
	asm sti;

	temp = (hardwareset[C3718].intno + 8) << 4;
	outportb(hardwareset[C3718].address + 9, 0xf0); 	// IRQ7 enable

	for (i = 0; i <= StopChan; i++) {	// set a/d range
		outportb(hardwareset[C3718].address + 2, i);
		outportb(hardwareset[C3718].address + 1, Range);
	}
	outportb(hardwareset[C3718].address + 2, StopChan << 4 | StartChan); // set scan
	ADOldHand = getvect(hardwareset[C3718].intno + 8);
	setvect(hardwareset[C3718].intno + 8, ADNewHand);	// set isp
}

void ResetAD()
{
	BYTE picmask, temp;
	setvect(hardwareset[C3718].intno + 8, ADOldHand);
	asm cli;
	picmask = 1 << (hardwareset[C3718].intno % 8);
	temp = inportb(0x21);
	outportb(0x21, temp | picmask);	// enable PIC IRQ7
	outportb(0x20, 0x20);				// reset the PIC
	asm sti;
}*/  //ggg 5.12


void Interface()
{
	INT8U keychar;
	win.UpdateClock();
	if (bioskey(1) == 0)	{	// key not pressed
		if (win.item_flag == TRUE && win.window_flag == TRUE)	{
			if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x00))
				win.systemsate();

			if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x01)
				&& (win.message_pause_flag == FALSE))
				win.showmessage();

			if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x01)
				&& (win.message_pause_flag == TRUE))
				win.showmespause();

			if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x00))
				win.showyx();

			if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x01))
				win.showyc();

			if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x02))
				win.showym();

			if ((win.mainmenuno == LOCALFUNC) && (win.itemmenuno == 0x00))
				win.doykopinfo();
		}
		else win.dropmessage();
		return;
	}

	else { 				// key pressed
		rdkey = bioskey(0);
		switch (rdkey) {		// receive cursor move
			case UPARR:	 win.mainuparr();	 break;
			case DNARR:	 win.maindnarr();	 break;
			case RTARR:	 win.mainrtarr();	 break;
			case LTARR:	 win.mainltarr();	 break;
			case ENTER:	 win.mainenter();	 break;
			case ESC:	 win.mainesc();	 break;
			case F1:	    win.mainf1();	    break;
			case F5:     win.mainf5();	    break;
			case F6:     win.mainf6();	    break;
			case F7:	    win.mainf7();	    break;
			case F9:	    win.mainf9();	    break;
			case PGUP:	 win.mainpgup();	 break;
			case PGDN:	 win.mainpgdn();	 break;
			case F10:	 RunState = FALSE; break;
			case BACKSP: win.KeyDrop();	 break;
		}

		keychar = rdkey & 0xff;

		if (keychar == '.' || keychar == '-' || keychar == '+'
			|| isalpha(keychar) || isdigit(keychar))
			win.parakeyin(toupper(keychar));

		if ((win.item_flag == TRUE) && (win.window_flag == FALSE))
			win.PopSubMenu(win.mainmenuno);
		else if ((win.item_flag == TRUE) && (win.window_flag == TRUE))
			win.showwindow();
		else if ((win.item_flag == FALSE) && (win.window_flag == FALSE))
			win.drawmain();
/*		else if (win.helpfirst == TRUE) {
			win.showhelpwindow();
			win.helpfirst = FALSE;
		}*/
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//       The end of mainprog.cpp
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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