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

📄 key.c

📁 At91sam7s64+ucosII+pid温度控制
💻 C
字号:
 #include "includes.h"
#include "key.h"
#include "menu.h"
#include "pcf8563.h"
#include "E2PROM.h"
#include "SAMpioc.h"

//#include "lib_at91sam7s128.h"
//#include "AT91SAM7S128.h"
extern char SysState;
extern char MenuNxt;
extern char MenuSet;
extern char MenuDsp;
extern char CharNxt;
char NumPos = 0;
char gol_num_set = 0;		//有数字键按下标志位
char gol_set_chg = 0;		//设置数据改变有效位
extern SysDat sys_dat;	
extern SetDat set_dsp;

extern SetDat set_dat;
extern int CutTime ;
extern char	disp_buff[12][20];
extern char gol_work_ok ;
extern char gol_motor_cut;
extern char gol_pgmcut_work;	//自动工作时切割与否
extern char gol_alarm_beep;		//报警开


void key_process(char k)
{
int i;
char num;

	switch(k)
	{
		case KEY1:
			num = 0x31;
			gol_num_set = 1;
		break;
		case KEY2:
			num = 0x32;
			gol_num_set = 1;
		
		break;
		case KEY3:
			num = 0x33;
			gol_num_set = 1;
		
		break;
		case KEY4:
			num = 0x34;
			gol_num_set = 1;
		
		break;
		case KEY5:
			num = 0x35;
			gol_num_set = 1;
		
		break;
		case KEY6:
			num = 0x36;
			gol_num_set = 1;
		
		break;
		case KEY7:
			num = 0x37;
			gol_num_set = 1;
		
		break;
		case KEY8:
			num = 0x38;
			gol_num_set = 1;
		
		break;
		case KEY9 :
			num = 0x39;
			gol_num_set = 1;
		
		break;
		case KEY0:
			num = 0x30;
			gol_num_set = 1;
		
		break;
		case KEYMENU:			//设置按键
			if(SysState)
			{
				SysState = 0;
			}
			else
			{
				SysState = 1;
				set_dsp = set_dat;
				disp_set();
			}
		break;
		case KEYFUN:			//手动/自动按键
			if(sys_dat.CutState)
			{
				sys_dat.CutState = 0;
			}
			else
			{
				sys_dat.CutState = 1;
			}
			//if(sys_dat.CutState)
			{
				CutTime = 0;
			}
		break;
		case KEYCUT:			//切割/停止按键
			if(SysState==0)
			{
				if(sys_dat.CutState)
				{
						gol_motor_cut = 1;
				}
				else
				{
					if(gol_pgmcut_work)
					{
						gol_pgmcut_work = 0;
					}
					else
					{
						gol_pgmcut_work = 1;
					}
				}
			}
		break;			
		case KEYDOWN:
			if(SysState==1)			//设置状态
			{
				if(MenuSet < 10)
				{
					MenuSet ++;
					
					if(MenuSet>=4)
					{
						MenuDsp ++;
					}
					else
					{
						MenuDsp = 0;
					}
				}
			}
			CharNxt = 0;
			NumPos=0;
		break;
		case KEYUP:
			if(SysState==1)		//设置状态
			{
			if(MenuSet >0)
			{
					MenuSet --;
					
					if(MenuDsp>0)
					{
						MenuDsp --;
					}

			}
			}
			CharNxt = 0;
			NumPos=0;
		break;
		case KEYOK:				//确定按键
			if(gol_set_chg)
			{
				
				str2hex();
				beepdida();
				lcd_clr();
				
				gol_set_chg = 0;
			}
		break;
		case KEYZF:			//+-按键 
			if(SysState== 1)
			{
				
				if(MenuSet == 3)
				{
					if(disp_buff[3][11] == 0x2b)		//+ :0x2b - :0x2d
					{
						disp_buff[3][11] = 0x2d;
					}
					else
					{
						disp_buff[3][11] = 0x2b;
					}
					gol_set_chg = 1;
				
				}
			}
		break;
		case KEYESC:		//取消按键
			if(SysState== 1)
			{
				gol_set_chg = 0;
				lcd_clr();
				disp_init();
				SysState = 0;
			}
		break;
		case KEYBEEP:		//消音按键
				gol_alarm_beep = 1;
		break;
				
			
		default:
				break;

	}

	if(gol_num_set && SysState)
	{
		gol_set_chg = 1;
		switch(MenuSet)
		{
			case 0:					//样品编号:****
			 	i = 10+NumPos;
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if( i == 13)
				{
					CharNxt = 0;
				}
				disp_buff[0][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 1:					//切割间隔:***S
				i = 10+NumPos;
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if( i == 12)
				{
					CharNxt = 0;
				}
				disp_buff[1][i]=num;
				if(NumPos>= 2)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 2:					//控制温度设置:***.*℃
				i = 10+NumPos;
				
				if(i == 13)			//跳过小数点
				{
					i = 14;
				}
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if(i == 12)
				{
					CharNxt = 2;
				}
				else if(i == 14)
				{
					CharNxt = 0;
				}
				disp_buff[2][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 3:					//校正温度:- **.*℃
				i = 12+NumPos;
				if(i == 14)			//跳过小数点
				{
					i =15;
				}
				if(i == 13)
				{
					CharNxt = 1;
				}
				else if( i == 15)
				{
					CharNxt = 0;
				}

				disp_buff[3][i]=num;
				if(NumPos>= 2)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 4:					//口模:*.***mm 
				i = 10+NumPos;
				if(i >= 11)			//跳过小数点
				{
					i +=1;
				}
				
				if(i == 10)
				{
					CharNxt = 1;
				}
				else if(i == 13)
				{
					CharNxt = 2;
				}
				else if(i== 14)
				{
					CharNxt = 0;
				}
				disp_buff[4][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 5:					//负荷:*.***kg
				i = 10+NumPos;
				if(i >= 11)			//跳过小数点
				{
					i += 1;
				}
				if(i == 10)
				{
					CharNxt = 1;
				}
				else if(i == 13)
				{
					CharNxt = 2;
				}
				else if(i== 14)
				{
					CharNxt = 0;
				}
				
				disp_buff[5][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
				break;
			
			
			
			case 6:					//**年**月**日 
				i=(CharNxt<<2)+NumPos;
				if(i==1)
				{
					CharNxt = 1;
				}
				else if(i== 5)
				{
					CharNxt = 2;
				}
				else if(i == 9)
				{
					CharNxt = 0;
				}
				disp_buff[6][i] = num;
				if(NumPos>= 1)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case  7:				//**:**:**
				i=(CharNxt<<2)+NumPos;
				if(i==1)
				{
					CharNxt = 1;
				}
				else if(i== 5)
				{
					CharNxt = 2;
				}
				else if(i == 9)
				{
					CharNxt = 0;
				}
				disp_buff[7][i] = num;
				if(NumPos>= 1)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 8:      	//参数pKp1: ****
			 	i = 10+NumPos;
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if( i == 13)
				{
					CharNxt = 0;
				}
				disp_buff[8][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;	
			case 9:      	//参数pKd1: ****
			 	i = 10+NumPos;
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if( i == 13)
				{
					CharNxt = 0;
				}
				disp_buff[9][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;
			case 10:      	//参数pext: ****
			 	i = 10+NumPos;
				if(i == 11)
				{
					CharNxt = 1;
				}
				else if( i == 13)
				{
					CharNxt = 0;
				}
				disp_buff[10][i]=num;
				if(NumPos>= 3)
				{
					NumPos = 0;
				}
				else
				{
					NumPos ++;
				}
			break;

			default:
				break;
		}
		gol_num_set = 0;
	}			
				
}
///*********************************************************
//保存设置时间
//*********************************************************/
//
void set_time(char *y,char *h)
{
char time[7];

	sys_dat.Time[0] = ((*(h+8) -0x30) <<4) | (*(h+9)-0x30);			//秒
	sys_dat.Time[1] = ((*(h+4) -0x30) <<4) | (*(h+5)-0x30);			//分
	sys_dat.Time[2] = ((*h -0x30) <<4) | (*(h+1)-0x30);				//时
	sys_dat.Time[3] = ((*(y+8) -0x30) <<4) | (*(y+9)-0x30);			//日
	sys_dat.Time[5] = ((*(y+4) -0x30) <<4) | (*(y+5)-0x30);			//月
	sys_dat.Time[6] = ((*y -0x30) <<4) | (*(y+1)-0x30);				//年
			sys_dat.Time[0] &=0x7f;		//秒
		sys_dat.Time[1] &=0x7f;		//分
		sys_dat.Time[2] &=0x3f;		//时
		sys_dat.Time[3] &=0x3f;		//日
		sys_dat.Time[4] &=0x1f;		//月
	PCFSetTime(sys_dat.Time);
	Delay(DLY4);
	Delay(DLY4);

}
/*********************************************************
保存设置数据
*********************************************************/
void save_dat(SetDat *p)
{
	write_eep(EEP_SLADR,AD_SET,(char *)p,sizeof(SetDat));
	Delay(DLY4);
	Delay(DLY4);
	Delay(DLY4);
	Delay(DLY4);
	Delay(DLY4);
	Delay(DLY4);
}
/*********************************************************
显示缓冲区的数据到16进制结构体
*********************************************************/
void str2hex()
{
int i;	
	for(i =10;i<14;i++)
	{
		if((disp_buff[0][i]<0x30) || (disp_buff[0][i] >0x39))
		{
			disp_buff[0][i] = 0x30;
		}	
	}
	set_dat.Number = (disp_buff[0][10]-0x30)*1000+(disp_buff[0][11]-0x30)*100+(disp_buff[0][12]-0x30)*10+(disp_buff[0][13]-0x30);
	
	for(i =10;i<13;i++)
	{
		if((disp_buff[1][i]<0x30) || (disp_buff[1][i] >0x39))
		{
			disp_buff[1][i] = 0x30;
		}	
	}
	set_dat.CutPeriod = (disp_buff[1][10]-0x30) *100 + (disp_buff[1][11]-0x30) *10 +disp_buff[1][12]-0x30;
	
	for(i =10;i<15;i++)
	{
		if((disp_buff[2][i]<0x30) || (disp_buff[2][i] >0x39))
		{
			disp_buff[2][i] = 0x30;
		}	
	}
	set_dat.SetTemp = (disp_buff[2][10]-0x30) * 1000 + (disp_buff[2][11]-0x30) *100+(disp_buff[2][12]-0x30)*10+disp_buff[2][14]-0x30;
	
	for(i =12;i<16;i++)
	{
		if((disp_buff[3][i]<0x30) || (disp_buff[3][i] >0x39))
		{
			disp_buff[3][i] = 0x30;
		}	
	}
	i = (disp_buff[3][12]-0x30) * 100 + (disp_buff[3][13]-0x30) *10+(disp_buff[3][15]-0x30);
	if(disp_buff[3][11] == 0x2d)
	{
		set_dat.AdTemp = -i;
		
	}
	else
	{
		set_dat.AdTemp = i;
	}
	
	for(i =10;i<15;i++)
	{
		if((disp_buff[4][i]<0x30) || (disp_buff[4][i] >0x39))
		{
			disp_buff[4][i] = 0x30;
		}	
	}
	set_dat.D = (disp_buff[4][10]-0x30) * 1000 + (disp_buff[4][12]-0x30) *100+(disp_buff[4][13]-0x30)*10+disp_buff[4][14]-0x30;
	
	for(i =10;i<15;i++)
	{
		if((disp_buff[5][i]<0x30) || (disp_buff[5][i] >0x39))
		{
			disp_buff[5][i] = 0x30;
		}	
	}
	set_dat.Weight = (disp_buff[5][10]-0x30) * 1000 + (disp_buff[5][12]-0x30) *100+(disp_buff[5][13]-0x30)*10+disp_buff[5][14]-0x30;
	
	for(i =10;i<14;i++)
	{
		if((disp_buff[8][i]<0x30) || (disp_buff[8][i] >0x39))
		{
			disp_buff[8][i] = 0x30;
		}
	}
	set_dat.pidkp = (disp_buff[8][10]-0x30)*1000+(disp_buff[8][11]-0x30)*100+(disp_buff[8][12]-0x30)*10+(disp_buff[8][13]-0x30);
	
	for(i =10;i<14;i++)
	{
		if((disp_buff[9][i]<0x30) || (disp_buff[9][i] >0x39))
		{
			disp_buff[9][i] = 0x30;
		}
	}
	set_dat.pidkd = (disp_buff[9][10]-0x30)*1000+(disp_buff[9][11]-0x30)*100+(disp_buff[9][12]-0x30)*10+(disp_buff[9][13]-0x30);
	
	for(i =10;i<14;i++)
	{
		if((disp_buff[10][i]<0x30) || (disp_buff[10][i] >0x39))
		{
			disp_buff[10][i] = 0x30;
		}
	}
	set_dat.pidext = (disp_buff[10][10]-0x30)*1000+(disp_buff[10][11]-0x30)*100+(disp_buff[10][12]-0x30)*10+(disp_buff[10][13]-0x30);
	
	set_dat.FLAG = 0XAA;
	if(set_dat.Number <0)
	{
		set_dat.Number = 0;
	}
	if(set_dat.CutPeriod<0)
	{
		set_dat.CutPeriod = 0;
	}
	if(set_dat.SetTemp	<0)
	{
		set_dat.SetTemp	=0;
	}
	else if(set_dat.SetTemp >4000)
	{
		set_dat.SetTemp = 4000;
	}
//	if(set_dat.AdTemp <0)
//	{
//		set_dat.AdTemp = 0;
//	}
	if(set_dat.D<0)
	{
		set_dat.D = 0;
	}
	if(set_dat.Weight <0)
	{
		set_dat.Weight = 0;
	}
		if(set_dat.pidkp <0)
	{
		set_dat.pidkp = 300;
	}
	if(set_dat.pidkd <0)
	{
		set_dat.pidkd = 4000;
	}
	if(set_dat.pidext <0)
	{
		set_dat.pidkd = 400;
	}
	set_time(disp_buff[6],disp_buff[7]);
	save_dat(&set_dat);
	disp_set();
	gol_work_ok = 1;
}	
					

⌨️ 快捷键说明

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