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

📄 rudongbeng.c

📁 这个是我们刚刚批量生产的工业蠕动泵的控制程序。单片机采用AVR系列单片机。该蠕动泵采用直流电机控制。主要根据用户设定的控制时间以及通断时间控制蠕动泵的出水量。程序内包含的自动模式和手动模式
💻 C
📖 第 1 页 / 共 2 页
字号:
				LED3_OFF();							}			//无法有效触发			else 			{				keyResetCounter=0;				keyResetStatus=KEY_WAITING;			}		}	}}/*********************************************************//按键处理程序//假定时间单位是100ms//假定运行时间以及间隔时间单位都是100ms*********************************************************/void keyProcess(void){	//按键TINY ADD松开了	if(keyTinyAddStatus==KEY_OPEN)	{		//微调运行时间,增量为100ms		if(timeSetMode==TIME_SET_WORK)		{			if(outputWorkTimeSetting<65530)outputWorkTimeSetting+=1;			unionData.intData=outputWorkTimeSetting;			dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];					}		else //if(timeSetMode==TIME_SET_STOP)		{			if(outputStopTimeSetting<65530)outputStopTimeSetting+=1;			unionData.intData=outputStopTimeSetting;			dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		}		writeEEPROM(dataSaveBuffer,1);		timeSwitchTimeCounter=200;		unitTimeCounter=600;		keyTinyAddStatus=KEY_WAITING;	}	//按键TINY SUB松开了	if(keyTinySubStatus==KEY_OPEN)	{		//微调运行时间,减量为100ms		if(timeSetMode==TIME_SET_WORK)		{			if(outputWorkTimeSetting>0)outputWorkTimeSetting-=1;			unionData.intData=outputWorkTimeSetting;			dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];		}		else //if(timeSetMode==TIME_SET_STOP)		{			if(outputStopTimeSetting>0)outputStopTimeSetting-=1;			unionData.intData=outputStopTimeSetting;			dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		}		writeEEPROM(dataSaveBuffer,1);		timeSwitchTimeCounter=200;		unitTimeCounter=600;		keyTinySubStatus=KEY_WAITING;	}	//按键LARGE ADD松开了	if(keyLargeAddStatus==KEY_OPEN)	{		//粗调运行时间,增量为100x100ms		if(timeSetMode==TIME_SET_WORK)		{			if(outputWorkTimeSetting<65430)outputWorkTimeSetting+=100;			unionData.intData=outputWorkTimeSetting;			dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];		}		else //if(timeSetMode==TIME_SET_STOP)		{			if(outputStopTimeSetting<65430)outputStopTimeSetting+=100;			unionData.intData=outputStopTimeSetting;			dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		}		writeEEPROM(dataSaveBuffer,1);		timeSwitchTimeCounter=200;		unitTimeCounter=600;		keyLargeAddStatus=KEY_WAITING;	}	//按键LARGE SUB松开了	if(keyLargeSubStatus==KEY_OPEN)	{		//粗调运行时间,减量为100x100ms		if(timeSetMode==TIME_SET_WORK)		{			if(outputWorkTimeSetting>100)outputWorkTimeSetting-=100;			unionData.intData=outputWorkTimeSetting;			dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];		}		else //if(timeSetMode==TIME_SET_STOP)		{			if(outputStopTimeSetting>100)outputStopTimeSetting-=100;			unionData.intData=outputStopTimeSetting;			dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];			dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		}		writeEEPROM(dataSaveBuffer,1);		timeSwitchTimeCounter=200;		unitTimeCounter=600;		keyLargeSubStatus=KEY_WAITING;	}	//按键HandControl松开了	if(keyHandControlStatus==KEY_OPEN)	{		outPutEnable=1;		outputWorkTimeCounter=0;		outputStopTimeCounter=0;		keyHandControlStatus=KEY_WAITING;		timeSwitchTimeCounter=200;		unitTimeCounter=600;	}	//按键HandAuto松开了	if(keyHandAutoStatus==KEY_OPEN)	{		//假如是自动状态,切换到手动状态		if(outPutMode==OUTPUT_AUTO)		{			outPutMode=OUTPUT_HAND;			outPutEnable=1;			//outputWorkTimeCounter=0;		    //outputStopTimeCounter=0;		}		//假如是手动状态,切换到自动状态				else //if((outPutMode==OUTPUT_HAND))		{			outPutMode=OUTPUT_AUTO;			outPutEnable=1;			//outputWorkTimeCounter=0;		    //outputStopTimeCounter=0;		}		timeSwitchTimeCounter=0;		unitTimeCounter=0;		keyHandAutoStatus=KEY_WAITING;	}	//按键TimeSwitch松开了	if(keyTimeSwitchStatus==KEY_OPEN)	{		//假如是运作时间设置状态,切换到间隔时间设置状态		if(timeSetMode==TIME_SET_WORK)		{			timeSetMode=TIME_SET_STOP;			//outputWorkTimeCounter=0;		    //outputStopTimeCounter=0;		}		//假如是手动状态,切换到自动状态				else //if((timeSetMode==TIME_SET_STOP))		{			timeSetMode=TIME_SET_WORK;			//outputWorkTimeCounter=0;		   // outputStopTimeCounter=0;		}		timeSwitchTimeCounter=200;		unitTimeCounter=600;		keyTimeSwitchStatus=KEY_WAITING;	}	//按键RESET松开了	//是短按的动作	if(keyResetStatus==KEY_TIME_SHORT)	{		timeSetMode=TIME_SET_STOP;		outPutMode=OUTPUT_HAND;		//outPutEnable=0;		outputWorkTimeCounter=0;		outputStopTimeCounter=0;		outputWorkTimeSetting=90;		outputStopTimeSetting=30;		unionData.intData=outputWorkTimeSetting;		dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];		dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];		unionData.intData=outputStopTimeSetting;		dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];		dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		writeEEPROM(dataSaveBuffer,1);		keyResetStatus=KEY_WAITING;	}	//是长按的动作	else if(keyResetStatus==KEY_TIME_LONG)	{		timeSetMode=TIME_SET_STOP;		outPutMode=OUTPUT_AUTO;		outPutEnable=1;		outputWorkTimeCounter=0;		outputStopTimeCounter=0;		outputWorkTimeSetting=65530;		outputStopTimeSetting=10;		unionData.intData=outputWorkTimeSetting;		dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];		dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];				unionData.intData=outputStopTimeSetting;		dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];		dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];		writeEEPROM(dataSaveBuffer,1);		keyResetStatus=KEY_WAITING;		//LED3_ON();	}		}/*********************************************************//继电器输出控制//假设时间单位是100ms*********************************************************/void outputControl(void){	//在输出状态	if(outPutEnable==1)	{		if(outputStep==OUTPUT_STEP_WORK)		{			outputWorkTimeCounter++;			OUTPUT1_ON();			OUTPUT2_ON();			//LED3_ON();			if(outputWorkTimeCounter>outputWorkTimeSetting)			{				outputWorkTimeCounter=0;				outputStep=OUTPUT_STEP_STOP;			}					}		else //if(outputStep==OUTPUT_STEP_STOP)		{			outputStopTimeCounter++;			OUTPUT1_OFF();			OUTPUT2_OFF();			if(outPutMode==OUTPUT_HAND)			{				outPutEnable=0;				outputStep=OUTPUT_STEP_WORK;			}			//LED3_OFF();			if(outputStopTimeCounter>outputStopTimeSetting)			{				outputStopTimeCounter=0;				outputStep=OUTPUT_STEP_WORK;				//完成一个周期,判断一下运作的模式,				//假如是手动状态,设置该程序暂停,				//假如是自动状态,继续运行。			}					}	}}/*********************************************************//LED输出控制//假设时间单位是100ms*********************************************************/void ledStatusShow(void){	//恢复状态灯指示	//设置状态	if(unitTimeCounter>0)	{		//闪烁处理		if(timeSwitchTimeCounter>0)		{			//点亮一次			if(timeSwitchTimeCounter>150)			{				//运作时间的设置状态				if(timeSetMode==TIME_SET_WORK)				{					LED1_ON();					LED2_OFF();				}				//间隔时间的设置状态				else //if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_ON();				}			}			//关闭			else if(timeSwitchTimeCounter>100)			{							//运作时间的设置状态				if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_OFF();				}				//间隔时间的设置状态				else //if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_OFF();				}			}						//点亮一次			else if(timeSwitchTimeCounter>50)			{				//运作时间的设置状态				if(timeSetMode==TIME_SET_WORK)				{					LED1_ON();					LED2_OFF();				}				//间隔时间的设置状态				else //if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_ON();				}			}			//关闭			else //if(timeSwitchTimeCounter>100)			{							//运作时间的设置状态				if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_OFF();				}				//间隔时间的设置状态				else //if(timeSetMode==TIME_SET_WORK)				{					LED1_OFF();					LED2_OFF();				}			}		}		//恢复原来的状态		else		{			//运作时间的设置状态			if(timeSetMode==TIME_SET_WORK)			{				LED1_ON();				LED2_OFF();			}			//间隔时间的设置状态			else //if(timeSetMode==TIME_SET_WORK)			{				LED1_OFF();				LED2_ON();			}		}	}	//正常运行指示状态	else //if(unitTimeCounter==0)	{		if(outPutMode==OUTPUT_AUTO)		{			LED1_ON();			LED2_ON();		}		else //if(outPutMode==OUTPUT_HAND)		{			LED1_OFF();			LED2_OFF();		}	}	}//=====================================================//10ms中断定时器//=====================================================SIGNAL(SIG_OVERFLOW0){	//CLI();	TCNT0 = 0x8b; 			//reload counter value	keyScanProgram();	outputCounter++;	if(outputCounter>10)	{		outputCounter=0;		outputControl();	}	//键盘执行程序	keyProcessCounter++;	if(unitTimeCounter>0)unitTimeCounter--;	if(timeSwitchTimeCounter>0)timeSwitchTimeCounter--;}//===========================================================////===========================================================//int main(void){	init_devices();	for(delay1=0;delay1<2000;delay1++)	{		if(delay2<3000)		{			delay2++;		}		else 		{			delay2=0;		}	}	set_interrupt(); //re-enable interrupts	outPutEnable=0;	outputWorkTimeSetting=90;	outputStopTimeSetting=30;			readEEPROM(dataSaveBuffer,1);	//读出工作时间设置	//taSaveTemp=0;	unionData.charData[0]=dataSaveBuffer[WORK_TIME_HIGH];	unionData.charData[1]=dataSaveBuffer[WORK_TIME_LOW];	outputWorkTimeSetting=unionData.intData;		//读出间隔时间设置	unionData.charData[0]=dataSaveBuffer[STOP_TIME_HIGH];	unionData.charData[1]=dataSaveBuffer[STOP_TIME_LOW];	outputStopTimeSetting=unionData.intData;			while(1)	{		//处理键盘程序,		//周期是100ms		if(keyProcessCounter>10)		{			keyProcessCounter=0;			keyProcess();		}		ledStatusShow();			}return 0;}

⌨️ 快捷键说明

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