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

📄 main.c

📁 这是一整套USB2.0试验程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			PromptY1 = 124;
			PromptX2 = 1;
			PromptY2 = 148;
			PromptX3 = 1;
			PromptY3 = 172;
			PromptX4 = 1;
			PromptY4 = 196;
			Putstr(PromptX1,PromptY1,"*操作提示*",0,0);
			Put_uint(22,127,4,200,0,1);
			Putstr(26,127,"ms",0,1);
			Put_uint(32,127,4,2000,0,0);
			Putstr(36,127,"ms",0,0);
			

			Putstr(PromptX2,PromptY2,"空贱腚键移动光标空",0,0);
			Put_uint(22,157,4,400,0,0);
			Putstr(26,157,"ms",0,0);			
			Putstr(33,150,"输入",0,0);

			Putstr(PromptX3,PromptY3,"确认键设定加速时间",0,0);
			Put_uint(22,187,4,800,0,0);
			Putstr(26,187,"ms",0,0);
			Putstr(33,173,"标定",0,0);
			
			Put_uint(22,217,4,1200,0,0);
			Putstr(26,217,"ms",0,0);
			Putstr(31,196,"开始加速",0,0);

			Putstr(33,219,"退出",0,0);

//			Linexy(240,204,319,204,1);
//			Putstr(33,217,"退出",0,0);
		   	
			MaxSubMenuCode = 9;								//子菜单数目
			LeftSubMenuCode = 4;							//左边子菜单数目

			SPEEDTIME = 200;
			fSpeedTime = SPEEDTIME;

			CYLINDERNUMBER = 4;
			WRITHE = 600;

			ParaFlag = 19;								//用电压的标志区分转速档位
			fTimeParaMul = 200/fPara[ParaFlag];
			fTimeParaAdd = 0.0f;

			fSpeedParaMul = 1.0f;
			fSpeedParaAdd = 0.0f;
			SetWrithe();

			StartFlag = 0;
			COUNTER = 0;
			Timer4Counter = 0;
			bUp = 1;
//			Timer4PointTotal = 0;
			TIMER4DRVCLOCK = SYSCLOCK;///12;
			Timer4Overflow = 0;
//			CKCON &= 0xb8; //Timer4使用系统时钟/12
			CKCON |= 0x40; //Timer4使用系统时钟	  
			T4CON = 0x0d;//允许并工作在捕捉方式,系统时钟/12
			EIE2 |= 0x04;//允许中断

			EIP2 &= 0xdf;//INT7外部中断置为低优先级
			ResetStepCounter();
			break;
		case 3:
			fSpeed = 0;
			CYLINDERNUMBER = 3;
			WRITHE = 1200;
			CLOSEANGLE = 60;
			fCloseAngle = CLOSEANGLE;

			Putstr(15,4,"闭合角检定",0,0);    
			
			Putstr(10,36,"转速值:",0,0);
			Putf(17,36,"62",fSpeed,0);
			Putstr(25,36,"转/分",0,0);

			Putstr(13,68,"闭合角:",0,0);
			Putf(20,68,"42",fCloseAngle,0);
			Putstr(25,68,"度",0,0);
			Linexy(ScreenLeft,100,ScreenRight,100,1);
			
			Putstr(2,102,"缸量03",0,0);
			Putstr(11,102,"闭合角60",0,0);
			Putstr(21,102,"缸量选择",0,0);
			Putstr(31,102,"选闭合角",0,0);
			Linexy(ScreenLeft,120,ScreenRight,120,1);
			Linexy(160,100,160,239,1);
			Linexy(80,100,80,120,1);
			Linexy(240,100,240,239,1);

		    PromptX1 = 5;
			PromptY1 = 124;
			PromptX2 = 1;
			PromptY2 = 148;
			PromptX3 = 1;
			PromptY3 = 172;
			PromptX4 = 1;
			PromptY4 = 196;
			Putstr(PromptX1,PromptY1,"*操作提示*",0,0);
			Put_uint(24,124,2,3,0,1);
			Put_uint(33,124,2,60,0,0);
			Putstr(35,124,"度",0,0);
			

			Putstr(PromptX2,PromptY2,"空贱腚键移动光标空",0,0);
			Put_uint(24,148,2,4,0,0);
			Put_uint(33,144,2,65,0,0);
			Putstr(35,144,"度",0,0);

			Putstr(PromptX3,PromptY3,"空确认键设定缸量空",0,0);
			Put_uint(24,172,2,6,0,0);
			Put_uint(33,164,2,70,0,0);
			Putstr(35,164,"度",0,0);
			
			Put_uint(24,196,2,8,0,0);
			Putstr(33,184,"输入",0,0);

			Putstr(23,220,"输入",0,0);
			Putstr(33,204,"标定",0,0);

			Putstr(33,224,"退出",0,0);
		   	
			MaxSubMenuCode = 11;								//子菜单数目
			LeftSubMenuCode = 5;							//左边子菜单数目

			ParaFlag = 24;
			fCloseAngleParaMul = 60/fPara[ParaFlag];
			fCloseAngleParaAdd = 0.0f;
			fSpeedParaMul = 1.0f;
			fSpeedParaAdd = 0.0f;
			SetWrithe();

			Timer4Counter = 0;
			TIMER4DRVCLOCK = SYSCLOCK;///12;
			Timer4Overflow = 0;
//			CKCON &= 0xb8; //Timer4使用系统时钟/12
			CKCON |= 0x40; //Timer4使用系统时钟	  
			T4CON = 0x0d;//允许并工作在捕捉方式,系统时钟/12
			EIE2 |= 0x04;//允许中断
			break;
		case 4:
			FIREANGLE = 4;
			CYLINDERNUMBER = 4;
			WRITHE = 600;
			fSpeed = 0;
			fFireAngle = 4;
			Putstr(13,4,"缸压提前角检定",0,0);    
			
			Putstr(10,36,"转速值:",0,0);
			Putf(17,36,"62",fSpeed,0);
			Putstr(25,36,"转/分",0,0);

			Putstr(13,68,"提前角:",0,0);
			Putf(20,68,"42",fFireAngle,0);
			Putstr(25,68,"度",0,0);
			Linexy(ScreenLeft,100,ScreenRight,100,1);
			
			Putstr(1,102,"转速0600",0,0);
			Putstr(11,102,"提前角04",0,0);
			Putstr(21,102,"转速选择",0,0);
			Putstr(31,102,"选提前角",0,0);
			Linexy(ScreenLeft,120,ScreenRight,120,1);
			Linexy(160,100,160,239,1);
			Linexy(80,100,80,120,1);
			Linexy(240,100,240,239,1);

		    PromptX1 = 5;
			PromptY1 = 124;
			PromptX2 = 1;
			PromptY2 = 148;
			PromptX3 = 1;
			PromptY3 = 172;
			PromptX4 = 1;
			PromptY4 = 196;
			Putstr(PromptX1,PromptY1,"*操作提示*",0,0);
			Put_uint(23,124,4,600,0,1);
			Put_uint(33,124,2,4,0,0);
			Putstr(35,124,"度",0,0);
			

			Putstr(PromptX2,PromptY2,"空贱腚键移动光标空",0,0);
			Put_uint(23,148,4,1200,0,0);
			Put_uint(33,148,2,10,0,0);
			Putstr(35,148,"度",0,0);

			Putstr(PromptX3,PromptY3,"空确认键设定转速空",0,0);
			Put_uint(23,172,4,2400,0,0);
			Put_uint(33,172,2,14,0,0);
			Putstr(35,172,"度",0,0);
			
			Putstr(23,196,"输入",0,0);
			Putstr(33,196,"输入",0,0);

			Putstr(23,220,"标定",0,0);
			Putstr(33,220,"退出",0,0);

			P4 = 0x00; //防止对DA0的干扰

		   	
			MaxSubMenuCode = 10;								//子菜单数目
			LeftSubMenuCode = 5;							//左边子菜单数目

			ReSetAheadFlag();
//			SetFireAngle();

			ParaFlag = 36;
			fAheadAngleParaMul = 4/fPara[ParaFlag];
			fAheadAngleParaAdd = 0.0f;
			fSpeedParaMul = 1.0f;
			fSpeedParaAdd = 0.0f;
			SetWrithe();
			
			REF0CN = 0x03;//内部电压基准开
			DAC0CN = 0x80;//DAC0打开

			Timer4Counter = 0;
			TIMER4DRVCLOCK = SYSCLOCK;///12;
			Timer4Overflow = 0;
//			CKCON &= 0xb8; //Timer4使用系统时钟/12
			CKCON |= 0x40; //Timer4使用系统时钟	  
			T4CON = 0x0d;//允许并工作在捕捉方式,系统时钟/12
			EIE2 |= 0x04;//允许中断			
			break;
		case 5:
			fCurrent = 0;
			Putstr(15,4,"起动系检定",0,0);    
			
			Putstr(11,36,"电压值:",0,0);
			Putf(18,36,"42",fVoltage,0);
			Putstr(25,36,"伏特",0,0);

			Putstr(11,68,"电流值:",0,0);
			Putf(18,68,"52",fCurrent,0);
			Putstr(25,68,"安培",0,0);
			Linexy(ScreenLeft,100,ScreenRight,100,1);
			
			Putstr(1,102,"电流100A",0,0);
			Putstr(11,102,"电压12V",0,0);
			Putstr(21,102,"电流选择",0,0);
			Putstr(31,102,"电压选择",0,0);
			Linexy(ScreenLeft,120,ScreenRight,120,1);
			Linexy(160,100,160,239,1);
			Linexy(80,100,80,120,1);
			Linexy(240,100,240,239,1);
			
			P4 = 0x00; //防止对DA0的干扰

		    PromptX1 = 5;
			PromptY1 = 124;
			PromptX2 = 1;
			PromptY2 = 148;
			PromptX3 = 1;
			PromptY3 = 172;
			PromptX4 = 1;
			PromptY4 = 196;
			Putstr(PromptX1,PromptY1,"*操作提示*",0,0);
			Put_uint(23,122,3,100,0,1);
			Putstr(26,122,"A",0,1);
			Put_uint(33,122,2,12,0,0);
			Putstr(35,122,"V",0,0);
			

			Putstr(PromptX2,PromptY2,"空贱腚键移动光标空",0,0);
			Put_uint(23,142,3,150,0,0);
			Putstr(26,142,"A",0,0);
			Put_uint(33,142,2,24,0,0);
			Putstr(35,142,"V",0,0);

			Putstr(PromptX3,PromptY3,"确认键开始输出电流",0,0);
			Put_uint(23,162,3,200,0,0);
			Putstr(26,162,"A",0,0);
			Putstr(33,162,"标定",0,0);
			
//			Putstr(1,172,"确认键进行选定操作",0,0);
			Put_uint(23,182,3,300,0,0);
			Putstr(26,182,"A",0,0);

//			Putstr(1,172,"确认键进行选定操作",0,0);
			Put_uint(23,202,3,500,0,0);
			Putstr(26,202,"A",0,0);

			Putstr(23,222,"标定",0,0);

//			Linexy(240,204,319,204,1);
			Putstr(33,182,"退出",0,0);
		   	
			MaxSubMenuCode = 10;								//子菜单数目
			LeftSubMenuCode = 6;							//左边子菜单数目
			CurrentFlag = 0;
			StepCounter[0] = 0x092;
			StepCounter[1] = 0x0ae;
			StepCounter[2] = 0x0e8;
			StepCounter[3] = 0x15c;
			StepCounter[4] = 0x244;
			//-----------开启AD0,DA0-------------
			REF0CN = 0x03;//内部电压基准开,
			DAC1CN = 0x80;//开启DA1输出
			DAC0CN = 0x80;//开启DA0输出
			VOLTAGEDATA = 0x63;
			VoltageFlag = 8;
			fVoltagePara = fPara[VoltageFlag];
			VOLTAGEDATAADJUSTED = VOLTAGEDATA/fVoltagePara;
			VOLTAGEDATAADJUSTEDUP = VOLTAGEDATAADJUSTED+1;						//电压设定值
			VOLTAGEDATAADJUSTEDDOWN = VOLTAGEDATAADJUSTED-1;
			 
		
			//ADC0LTH:ADC0LTL=0x0100,
			//ADC0GTH:ADC0GTL=0x0200.//(CURRENT/500*2.35)
			//窗口跟踪器界限设置,大于上限或小于下限引发中断
			StartFlag = 0;
			bVoltageAdjusting = 1;
			bVoltageOk = 0;
			VoltageCounter = 0;
			VoltageOkCounter = 0;
			
//			K4 = 0;
//			DelayM(100);
			K5 = 0;
			DelayM(300);
			K6 = 0;
			DelayM(300);
			K4 = 1;//线圈短路,无电流
			
	

			ValueOut_DA0 = 0xfff;//DA0输出初始值
			DAC0L = ValueOut_DA0;	  
			DAC0H = ValueOut_DA0>>8;
	
			ADC0CN = 0x80;//使能AD0,除转换期间一直跟踪,向AD0BUSY写1启动ADC0转换,寄存器数据右对齐
			ADC0CF = 0x22;//时钟源为SYSCLOCK/5,增益为2
			AMX0CF = 0x00;//全部单端输入
			AMX0SL = 0x00;//选择通道0

			bCurrentWaitForAdj = 0;
			outCounter = 0;
			ADC0_SUM = 0;
			AD0ProcessEnd=0;

			ADC1CN = 0x80;//使能AD1,除转换期间一直跟踪,向AD0BUSY写1启动ADC0转换,寄存器数据右对齐
			ADC1CF = 0x21;//时钟源为SYSCLOCK/5,增益为1
			AMX1SL = 0x07;//选择通道7

			AD1ProcessEnd=0;
			COUNTER_ADC1 = 0;
			ADC1_SUM = 0;

			EIE2 |= 0x08; //允许ADC1转换结束中断
			ADC1CN |= 0x10;//Start AD1

			break;
		case 6:
			fCurrent = 0;
			Putstr(15,4,"充电系检定",0,0);    
			
			Putstr(11,36,"电压值:",0,0);
			Putf(18,36,"42",fVoltage,0);
			Putstr(25,36,"伏特",0,0);

			Putstr(11,68,"电流值:",0,0);
			Putf(18,68,"52",fCurrent,0);
			Putstr(25,68,"安培",0,0);
			Linexy(ScreenLeft,100,ScreenRight,100,1);
			
			Putstr(1,102,"电流010A",0,0);
			Putstr(11,102,"电压13V",0,0);
			Putstr(21,102,"电流选择",0,0);
			Putstr(31,102,"电压选择",0,0);
			Linexy(ScreenLeft,120,ScreenRight,120,1);
			Linexy(160,100,160,239,1);
			Linexy(80,100,80,120,1);
			Linexy(240,100,240,239,1);

			P4 = 0x00; //防止对DA0的干扰

		    PromptX1 = 5;
			PromptY1 = 124;
			PromptX2 = 1;
			PromptY2 = 148;
			PromptX3 = 1;
			PromptY3 = 172;
			PromptX4 = 1;
			PromptY4 = 196;
			Putstr(PromptX1,PromptY1,"*操作提示*",0,0);
			Put_uint(23,127,3,10,0,1);
			Putstr(26,127,"A",0,1);
			Put_uint(33,127,2,13,0,0);
			Putstr(35,127,"V",0,0);
			

			Putstr(PromptX2,PromptY2,"空贱腚键移动光标空",0,0);
			Put_uint(23,157,3,20,0,0);
			Putstr(26,157,"A",0,0);
			Put_uint(33,157,2,28,0,0);
			Putstr(35,157,"V",0,0);

			Putstr(PromptX3,PromptY3,"确认键开始输出电流",0,0);
			Put_uint(23,187,3,30,0,0);
			Putstr(26,187,"A",0,0);
			Putstr(33,187,"标定",0,0);
			
			Putstr(23,217,"标定",0,0);

//			Linexy(240,204,319,204,1);
			Putstr(33,217,"退出",0,0);
		   	
			MaxSubMenuCode = 8;								//子菜单数目
			LeftSubMenuCode = 4;							//左边子菜单数目
				
			//-----------开启AD0,DA0-------------
			REF0CN = 0x03;//内部电压基准开,
			DAC1CN = 0x80;//开启DA1输出
			DAC0CN = 0x80;//开启DA0输出
			VOLTAGEDATA = 0x6c;
			CurrentFlag = 8;
			VoltageFlag = 10;
			fVoltagePara = fPara[VoltageFlag];
			VOLTAGEDATAADJUSTED = VOLTAGEDATA/fVoltagePara;
			VOLTAGEDATAADJUSTEDUP = VOLTAGEDATAADJUSTED+1;						//电压设定值
			VOLTAGEDATAADJUSTEDDOWN = VOLTAGEDATAADJUSTED-1;
		
			//ADC0LTH:ADC0LTL=0x0100,
			//ADC0GTH:ADC0GTL=0x0200.//(CURRENT/500*2.35)
			//窗口跟踪器界限设置,大于上限或小于下限引发中断
			StartFlag = 0;
			bVoltageAdjusting = 1;
			bVoltageOk = 0;
			VoltageCounter = 0;
			VoltageOkCounter = 0;
			StepCounter[5] = 0x200;
			StepCounter[6] = 0x400;
			StepCounter[7] = 0x600;

			K5 = 0;
			DelayM(300);
			K6 = 0;
			DelayM(300);
			K4 = 1;//线圈短路,无电流
	

			ValueOut_DA0 = 0xfff;//DA0输出初始值
			DAC0L = ValueOut_DA0;	  
			DAC0H = ValueOut_DA0>>8;
	
			ADC0CN = 0x80;//使能AD0,除转换期间一直跟踪,向AD0BUSY写1启动ADC0转换,寄存器数据右对齐
			ADC0CF = 0x22;//时钟源为SYSCLOCK/5,增益为2
			AMX0CF = 0x00;//全部单端输入
			AMX0SL = 0x00;//选择通道0

			bCurrentWaitForAdj = 0;
			outCounter = 0;
			ADC0_SUM = 0;
			AD0ProcessEnd=0;

			ADC1CN = 0x80;//使能AD1,除转换期间一直跟踪,向AD0BUSY写1启动ADC0转换,寄存器数据右对齐
			ADC1CF = 0x21;//时钟源为SYSCLOCK/5,增益为1
			AMX1SL = 0x07;//选择通道7

			AD1ProcessEnd=0;
			COUNTER_ADC1 = 0;
			ADC1_SUM = 0;
			
			SetFreq(40.0);

			EIE2 |= 0x08; //允许ADC1转换结束中断
			ADC1CN |= 0x10;//Start AD1
			break;
		case 7:
			
			CYLINDERNUMBER = 4;
			WRITHE = 600;
			fSpeed = 0;
			fFireAngle = 0;
			FIREANGLE = 180/CYLINDERNUMBER;	//半周期角度
			Putstr(13,4,"闪光提前角检定",0,0);    
			
			Putstr(10,36,"转速值:",0,0);
			Putf(17,36,"62",fSpeed,0);
			Putstr(25,36,"转/分",0,0);

⌨️ 快捷键说明

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