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

📄 menu.c

📁 这是一种温度变送器的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	switch(keyval)
	{
		case key_up:			
			mod_value=mod_value+key_mov;
			if(mod_value>9999)mod_value=9999;
			get_pos();//小数点位置
			dis_flag=0;	//高低4位标置 1-高4位 0-低4位
			display_num(mod_value);//数字显示			
			break;
		case key_down:
			mod_value=mod_value-key_mov;
			if(mod_value<-1999)mod_value=-1999;
			get_pos();//小数点位置
			dis_flag=0;//高低4位标置
			display_num(mod_value);//数字显示			
			break;
		case key_set:
			ref_table[ref_df]=mod_value;
			store_ref(ref_df);//保存参数值
			page_point=10;
			renew_page_high(mnu_du0);
			mod_value=ref_table[ref_du0];
			//set_flag=0;
			dis_flag=0;
			display_num(ref_table[ref_du0]);	
			break;
		//case key_ent:
	}
}
/********************************************
函数名: mnu_hdl_du0
功能: 设定显示零点
形式参数:无
返回值:无
********************************************/
void mnu_hdl_du0(void)
{
	switch(keyval)
	{
		case key_up:			
			mod_value=mod_value+key_mov;
			if(mod_value>9999)mod_value=9999;
			get_pos();//小数点位置
			dis_flag=0;	//高低4位标置 1-高4位 0-低4位
			display_num(mod_value);//数字显示			
			break;
		case key_down:
			mod_value=mod_value-key_mov;
			if(mod_value<-1999)mod_value=-1999;
			get_pos();//小数点位置
			dis_flag=0;//高低4位标置
			display_num(mod_value);//数字显示			
			break;
		case key_set:
			ref_table[ref_du0]=mod_value;
			store_ref(ref_du0);//保存参数值
			page_point=11;
			renew_page_high(mnu_duf);
			mod_value=ref_table[ref_duf];
			//set_flag=0;
			dis_flag=0;
			display_num(ref_table[ref_duf]);	
			break;
		//case key_ent:
	}
}
/********************************************
函数名: mnu_hdl_duf
功能: 设定显示满点
形式参数:无
返回值:无
********************************************/
void mnu_hdl_duf(void)
{
	switch(keyval)
	{
		case key_up:			
			mod_value=mod_value+key_mov;
			if(mod_value>9999)mod_value=9999;
			get_pos();//小数点位置
			dis_flag=0;	//高低4位标置 1-高4位 0-低4位
			display_num(mod_value);//数字显示			
			break;
		case key_down:
			mod_value=mod_value-key_mov;
			if(mod_value<-1999)mod_value=-1999;
			get_pos();//小数点位置
			dis_flag=0;//高低4位标置
			display_num(mod_value);//数字显示			
			break;
		case key_set:
			ref_table[ref_duf]=mod_value;
			store_ref(ref_duf);//保存参数值
			mnu_return();//返回主菜单
			break;
		//case key_ent:
	}
}
/********************************************
函数名: mnu_hdl_ot
功能: 给定输出电流
形式参数:无
返回值:无
********************************************/
void mnu_hdl_ot(void)
{
	switch(keyval)
	{
		case key_up:			
			mod_value=mod_value+key_mov;
			if(mod_value>9999)mod_value=9999;
			point_pos=2;//小数点位置
			dis_flag=0;	//高低4位标置 1-高4位 0-低4位
			display_num(mod_value);//数字显示
			//////电流输出			
			break;
		case key_down:
			mod_value=mod_value-key_mov;
			if(mod_value<0)mod_value=0;
			point_pos=2;//小数点位置
			dis_flag=0;//高低4位标置
			display_num(mod_value);//数字显示
			//////电流输出	
			break;
		case key_set:
			mnu_return();//返回主菜单
			break;
		//case key_ent:
	}
}

/********************************************
函数名: mnu_hdl_rtx
功能: 阻标定
形式参数:无
返回值:无
********************************************/
void mnu_hdl_rtx(void)
{
	if(key_set)
		mnu_hdl_rtx_set();		
}

void mnu_hdl_rtx_set(void)//volt_range 
{

	if(set_flag==1)			
	{												
		store_ref(ref_buffer+volt_range1-counter);
				
		switch(page_point)
		{
			case mnu_rt1:
				volt_range1++;
				point_pos_1++;
				//renew_page_high(mnu_rt1);			
				if(volt_range1==5)
					{
						ref_buffer=ref_rt2;
						page_point=mnu_rt2;
						volt_range1=1;
						renew_page_high(mnu_rt2);
						counter=1;
						point_pos_1=1;		
						//init_flag=1;							
					}	
				break;
			case mnu_rt2:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						ref_buffer=ref_rt3;
						page_point=mnu_rt3;
						volt_range1=2;
						renew_page_high(mnu_rt3);
						counter=2;		
						point_pos_1=2;		
						//init_flag=1;							
					}
				break;
			case mnu_rt3:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						ref_buffer=ref_rt4;
						page_point=mnu_rt4;
						volt_range1=3;
						renew_page_high(mnu_rt4);
						counter=3;	
						point_pos_1=3;		
						//init_flag=1;										
					}	
				break;
			case mnu_rt4:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						ref_buffer=ref_rt5;
						page_point=mnu_rt5;
						volt_range1=4;
						renew_page_high(mnu_rt5);
						counter=4;	
						point_pos_1=4;		
						//init_flag=1;								
					}	
				break;
			case mnu_rt5:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						//menu_point++;
						volt_range1=1; 
						set_flag=0;
						dem_flag=0;
						mnu_return();					
					}	
				break;
		}	
		sub_function2();//waitcy  2007-9-11 20:25
	}
}

/********************************************
函数名: mnu_hdl_tc0
功能: 偶标定
形式参数:无
返回值:无
********************************************/
void mnu_hdl_tc0(void)
{
	if(key_set)
		mnu_hdl_tc0_set();		
}

void mnu_hdl_tc0_set(void)//volt_range 
{

	if(set_flag==1)			
	{												
		store_ref(ref_buffer+volt_range1-counter);
				
		switch(page_point)
		{
		
			case mnu_tc0:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						ref_buffer=ref_tcf;
						page_point=mnu_tcf;
						volt_range1=1;
						renew_page_high(mnu_tcf);
						counter=1;	
						point_pos_1=1;		
						//init_flag=1;			
					}
				break;
			case mnu_tcf:
				volt_range1++;
				point_pos_1++;
				if(volt_range1==5)
					{
						//menu_point++;
						volt_range1=1; 
						set_flag=0;
						dem_flag=0;
						mnu_return();		
					}	
				break;
		}	
		sub_function2();//waitcy  2007-9-11 20:25
	}
}

//void mnu_hdl_rtx_ent(void)
//{	
//}

void sub_function2(void)
{
	ADC0MD = 0x80; // 使能ADC0 ADC0=空闲模式
	switch(volt_range1)
	{
	 	case 1:
	 		ADC0CN = 0x16;//3;
	 		break;
	 	case 2:	 		
	 		ADC0CN = 0x15;//2;
	 		break;
	 	case 3:
	 		ADC0CN = 0x14;//1;
	 		break;
	 	case 4:
	 		ADC0CN = 0x14;//0;
	 		break; 	
	}
	ADC0MD |= 0x83;  // 启动连续转换
}

/********************************************
函数名: store_ref
功能: 保存参数值
形式参数:add-数据地址
返回值:无
********************************************/
void store_ref(unsigned char add)
{
	char xdata * data byte;
	byte=ref_table+add;//指针计算
	SMbus_24c02_write(2*add,*byte);
	byte++;
	SMbus_24c02_write(2*add+1,*byte);
}	
/********************************************
函数名: load_ref
功能: 加载参数值
形式参数:无
返回值:无
********************************************/
void load_ref(void)
{
	unsigned char i;
	char xdata * data byte;
	SMbus_24c02_read(0x7f);
	if(Dat_24C02!=0xaa)
	{  //24c02未初始化
		for(i=0;i<16;i++)
		{
			ref_table[i]=default_ref_table[i];
			SMbus_24c02_write(i,ref_table[i]);
		}
		SMbus_24c02_write(0x7f,0xaa);//设置初始化标志	
	}
	else
	{  //24C02已初始化
		byte=ref_table;
		for(i=0;i<82;i++)
		{
			SMbus_24c02_read(i);
			*byte=Dat_24C02;
			byte++;
		}
	}
}
/********************************************
函数名: mnu_return
功能: 返回主菜单
形式参数:无
返回值:无
********************************************/
void mnu_return(void)
{	
	point_pos=0;
	dis_flag=1;
	page_point=mnu_main;			
	mod_value=mod_bak;
	display_num(mod_value);
	renew_page_low(mnu_null);
}
/********************************************
函数名: display_num
功能: 显示数字
形式参数:num-数字值
返回值:无
********************************************/
void display_num(int num)
{	
	bit bdata pos_flag;
	unsigned int num_temp,i,j;
	unsigned char num_display[4];
	if(num<0)
	{
		pos_flag=0;	//正负号标志 1-正号 0-负号
		num_temp=~num;
		num_temp+=1;
	}
	else
	{
		pos_flag=1;
		num_temp=num;
	}
	for(i=0;i<4;i++)
	{
		num_display[i]=num_temp%10;
		num_temp/=10;
	}
	zero_flag=0;
	if(dis_flag)
	{//高4位
		for(j=0;j<3;j++)
		{
			if((num_display[3-j]==0)&&(zero_flag==0))
			{
				if(point_pos<(4-j))
					display[7-j]=0xff;
				else
				{
					zero_flag=1;
					if((point_pos==4)&&(num_display[3]==0)&&(pos_flag==0))
					{
						display[7]=0xff;
						continue;
					}
					else
						display[7-j]=num_code[num_display[3-j]];
				}
			}
			else
			{
				zero_flag=1;
				display[7-j]=num_code[num_display[3-j]];
			}
		}
		if(point_pos!=0)display[3+point_pos]&=chr_dot;	//显示小数点
		display[4]=num_code[num_display[0]];			//最后一位
		if(!pos_flag)display[7]&=chr_sub;				//显示负号
	}
	else
	{//低4位
		for(j=0;j<3;j++)
		{   
			if((num_display[3-j]==0)&&(zero_flag==0))
			{
				if(point_pos<(4-j))
					display[3-j]=0xff;
				else
				{
					zero_flag=1;
					if((point_pos==4)&&(num_display[3]==0)&&(pos_flag==0))
					{
						display[3]=0xff;
						continue;
					}
					else
						display[3-j]=num_code[num_display[3-j]];
				}			
			}			
			else
			{
				zero_flag=1;
				display[3-j]=num_code[num_display[3-j]];
			}
		}
		if(point_pos!=0)display[point_pos-1]&=chr_dot;	//显示小数点	
		display[0]=num_code[num_display[0]];			//最后一位
		if(dem_flag&&point_pos==1)display[0]&=chr_dot;		
		if(!pos_flag)display[3]&=chr_sub;				//显示负号
	}
		
}


/********************************************
函数名: renew_disp_high
功能: 更新高四位显示
形式参数:item-显示字段索引号
返回值:无
********************************************/
void renew_page_high(unsigned char item)
{
	unsigned char i;
	for(i=0;i<4;i++)
	{
		display[7-i]=Tab_Menu_Item[item][i];
	}
}
/********************************************
函数名: renew_disp_low
功能: 更新低四位显示
形式参数:item-显示字段索引号
返回值:无
********************************************/
void renew_page_low(unsigned char item)
{
	unsigned char i;
	for(i=0;i<4;i++)
	{
		display[3-i]=Tab_Menu_Item[item][i];
	}
}
/*************************************************
	函数名			get_pos
	功能			根据目前的分度,判断小数点位置
	参数			void
	影响资源		point_pos
	调用函数		
*************************************************/	
void get_pos(void)
	{
		if(ref_table[ref_sn]<rt_start)
		{
			point_pos=0;    ////////送显十进制数时  小数点的位置1~4 右->左	为函数lcd_show_dec的参数
		}
		else
			point_pos=2;			
	}

⌨️ 快捷键说明

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