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

📄 function.c

📁 采用MPS430控制的项目
💻 C
📖 第 1 页 / 共 3 页
字号:
* 
* 调用模块:write_word;  
*
* 作    者: wyjok
* 创建时间: 2006年05月25日
*******************************************************************************************************/
void ON_EnterTongXunTime(void)
{
	Uint8 k,x1=10,y1=3;
	clear();
	for(k=0;k<4;k++)
   		write_word(x1+k*16,y1,TongXunSheZhi2[k],16,16);
   	write_number(x1+4*16,y1,11);  //写冒号:
   	x1+=30;//行->向右移动
   	y1+=20;//列->向下移动
	for(k=0; k<5; k++)
		write_number(x1+k*8,27,15);	
	if(Time_interval>=10000)    write_number(x1+0*8,y1,Time_interval/10000);
	if(Time_interval>=1000) 	write_number(x1+1*8,y1,Time_interval/1000%10);
	if(Time_interval>=100) 		write_number(x1+2*8,y1,Time_interval/100%10);
	if(Time_interval>=10) 		write_number(x1+3*8,y1,Time_interval/10%10);
	write_number(x1+4*8,y1,Time_interval%10);
    write_word(x1+5*8+2,y1,Time[5],16,16);
    Set_temp = 0;
	Menu_ID=17;	
}
/*********************************************************************************************************
* 函数名称:ON_EnterUpDownZero
*
* 功能描述:显示 上、下限输入值 传感器零点值
*
* 说明:
* 
********************************************************************************************************/
void ON_EnterUpDownZero(void)
{
Uint8 x1=2,y1=2;
Uint16 k;
clear();
	for(k=0;k<2;k++)
   		write_word(x1+k*16,y1,MoniShuru[k],16,16);		//模拟
	for(k=0;k<3;k++)
   		write_word(x1+2*16+k*16,y1,TongDaohao[k],16,16);//通道号    
	write_number(x1+5*16,y1,11);						//:     	
	y1=y1+20;
	for(k=0;k<5;k++)
   		write_word(x1+k*16,y1,JianceDaima[k],16,16);	//监测代码值
	write_number(x1+5*16,y1,11);						//:    
    	y1+=20;
	if(key_data==6)	 k = 4;
	else if(key_data==7)	k=8;
	else if(key_data==8)    k=14;
	write_word(x1,y1,TongXunSheZhi2[k],16,16);
	write_word(x1+16,y1,TongXunSheZhi2[k+1],16,16);
	write_word(x1+32,y1,JianceDaima[4],16,16);			//值
	write_number(x1+48,y1,11);							//: 
	for(k=0;k<7;k++)
	    write_number(56+k*8,y1+2,15);					//_   
	Set_array_count=0;    
	Set_temp=0;       
	Menu_ID = 12+key_data;
	if(key_data==8)	k=ADSam_Value[0];else k=ADAlarm_para[key_data-6][0];
	Disp_updownzero(k,1);
}
/*********************************************************************************************************
* 函数名称:Disp_Time
*
* 功能描述:显示时间
*
* 说明:
* 
********************************************************************************************************/
void Disp_Time(void)
{
Uint8 k,x1=8,y1=0;
	for(k=0;k<3;k++)
   	{   
   		write_number(x1+k*24,y1,Time_now[k]/10);//年月日
       	write_number(x1+k*24+8,y1,Time_now[k]%10);
       	//if(k<2)write_number(x1+k*24+16,y1,10);// -
	}
	for(k=0;k<2;k++)
    {   
    	write_number(x1+3*24+k*24,y1,Time_now[k+3]/10);//时分
       	write_number(x1+3*24+k*24+8,y1,Time_now[k+3]%10);//
    } 
}
/*********************************************************************************************************
* 函数名称:Disp_GaoJing
*
* 功能描述:显示告警消息
*
* 说明:
* 
********************************************************************************************************/
void Disp_GaoJing(Uint8 Index)
{
	Uint8 Alarm[I2C_GaoJingByte];
	Uint16 Data,k,i;
	
	write_number(28,0,Index/10);//01
   	write_number(36,0,Index%10);
   	Index -= 1;
	for(k=0; k<I2C_GaoJingByte; k++)
	{
		Alarm[k] = II3RD(AT24C256,I2C_GaoJing+k+(Index*I2C_GaoJingByte));
	}
	for(k=0; k<3; k++)
   	{   
   		write_number(k*24,16,Alarm[k]/10);  //年月日
       	write_number(k*24+8,16,Alarm[k]%10);
	}
	
	for(k=0;k<2;k++)
    {   
    	write_number(72+k*24,16,Alarm[k+3]/10);//时分
       	write_number(72+k*24+8,16,Alarm[k+3]%10);//
    } 
    //模拟告警 开关告警 门禁告警
    k = 4*Alarm[5];
    write_word(0,32,MoniShuru[0+k],16,16);
    write_word(16,32,MoniShuru[1+k],16,16);
    
    
    write_number(32,32,(Alarm[6]+1)/10);//通道号  或者地址
    write_number(40,32,(Alarm[6]+1)%10);
    
    Alarm[8] -= 1;
    if(Alarm[5]<=1)
    {
    	k = 0;
    	write_word(6*15,32,Gaojing[3],16,16);		//告警
    	write_word(7*15,32,Gaojing[4],16,16);
    	write_word(0*16,48,JianceDaima[2],16,16);	//代码
		write_word(1*16,48,JianceDaima[3],16,16);
		write_number(32,48,Alarm[7]/10);			//监测代码值
    	write_number(40,48,Alarm[7]%10);
    	Data = Alarm[11]*256 + Alarm[12];
		Disp_Caiji_Data(Data,Alarm[5],Alarm[6]);
    }
    else
    {
    	k = 11;
    	write_word(6*15,32,AlarmNeirong[Alarm[8]*2+2+k],16,16);
    	write_word(7*15,32,AlarmNeirong[Alarm[8]*2+3+k],16,16);
		for(i=0; i<4; i++)
		{
			write_number(32+i*25,48,Alarm[9]/100);
			write_number(32+i*25+8,48,Alarm[9]/10%10);
			write_number(32+i*25+16,48,Alarm[9]%10);
		}    	
    }
	write_word(60,32,AlarmNeirong[Alarm[8]*2+k],16,16);
    write_word(76,32,AlarmNeirong[Alarm[8]*2+1+k],16,16);
}
/*********************************************************************************************************
* 函数名称:Disp_Caiji_Data
*
* 功能描述:显示采集到的数据,模拟量,开关量
*
* 说明:
* 
********************************************************************************************************/
void Disp_Caiji_Data(Uint16 Data,Uint16 mode,Uint16 k)
{
	Uint16 i;
	if(mode==0)	i = ADSam_Code[k];
	else 		i = DISam_Code[k];
	if(i >= 32)
	{
		if(mode==0)	//显示模拟量
		{
			i = MoniCode[ADSam_Code[k]-32];
			if(i==2)//显示温度
			{
				if(Data<400)	{write_number(60,48,25);Data = 400-Data;}else{write_number(60,48,30);Data = Data-400;}
			}
			else{
				if(Data>=10000) write_number(60,48,Data/10000);  else write_number(60,48,30);
				
			}
			if(Data>=1000)  write_number(68,48,Data/1000%10);else write_number(68,48,30);
			if(Data>=100)   write_number(76,48,Data/100%10); else write_number(76,48,30);
			write_number(84,48,Data/10%10);
			write_number(92,48,12);
			write_number(95,48,Data%10);
		}
		else			//显示开关量
		{	
			write_word(81,48,MoniShuru[5-Data%10],16,16);
			i = 10;
		}
	}
	else    
	{	write_number(60,48,30);
		write_number(68,48,30);
		write_number(76,48,30);
		write_number(92,48,30);
		write_number(95,48,30);
		write_number(84,48,30);
		i = 10;				//未启用
	}
	write_word(104,48,DanWei[i],16,16);	
}
/*********************************************************************************************************
* 函数名称:Disp_updownzero
*
* 功能描述:
*
* 说明:
* 
********************************************************************************************************/
void Disp_updownzero(Uint16 data,Uint16 k)
{
Uint16 i,code;
	write_number(90,0,k/10); 	
   	write_number(98,0,k%10);
   	code = ADSam_Code[k-1];
   	write_number(90,20,code/10);
    write_number(98,20,code%10);
	if(code>=32)
	{
		code = code - 32;
		i = MoniCode[code];
		if(i==2)	//温度
		{
			if(data<400){Set_array[0]=25;data=400-data;}else{Set_array[0]=26;data=data-400;}
		}
		else
		{
			Set_array[0]=data/10000;
		}
		Set_array[1]=data/1000%10;
		Set_array[2]=data/100%10;
		Set_array[3]=data/10%10;
		Set_array[4]=12;
		Set_array[5]=data%10;
		
	}
	else			//没有启用
	{	
		for(i=0;i<6;i++)	Set_array[i]=30;
		i = 10;
	}
	write_word(101,40,DanWei[i],16,16);	
	for(i=0;i<6;i++)	
		write_number(weizhi[i],40,Set_array[i]);
	write_number_black(weizhi[Set_temp],40,Set_array[Set_temp]);
}
/*********************************************************************************************************
* 函数名称:Disp_KaHao
*
* 功能描述:
*
* 说明:
* 
********************************************************************************************************/
void Disp_KaHao(void)
{
Uint8 x1=2,y1=2;
clear();
Set_array_count=0;
	write_word(x1+0*16,y1,KaHaoManage[0],16,16);
	write_word(x1+1*16,y1,KaHaoManage[1],16,16);
	write_number(x1+2*16,y1,11);	
	  
	Disp_CardNo(CardNo[Set_array_count],Set_array_count,0);		
	
	x1 = 8;
	y1 = 45;
	
	write_number_black(x1,y1,1);
	write_number_black(x1+8,y1,25);
	write_word_black(x1+16,y1,KaHaoManage[2],16,16);
	write_word_black(x1+32,y1,KaHaoManage[3],16,16);//1-添加
	
	write_number_black(x1+64,y1,2);
	write_number_black(x1+72,y1,25);
	write_word_black(x1+80,y1,KaHaoManage[4],16,16);
	write_word_black(x1+96,y1,KaHaoManage[5],16,16);//2-删除	
	
	Set_temp=0;       
	Menu_ID = 22;
}
/*********************************************************************************************************
* 函数名称:Disp_CardNo
*
* 功能描述:
*
* 说明:
* 
********************************************************************************************************/
void Disp_CardNo(Uint8 *p,Uint16 No,Uint16 mode)
{
Uint8 x1=12,y1;
Uint16 i;
	write_number(40,1,(No+1)/10);
	write_number(48,1,(No+1)%10);
	y1 = 20;
	if(*p==1||mode==1)//该编号的卡号已启用
	{
		for(i=0; i<4; i++)
		{
			if(mode==0)
			{
				write_number(x1+i*27,y1,*(p+1+i)/100);
				write_number(x1+i*27+8,y1,*(p+1+i)/10%10);
				write_number(x1+i*27+16,y1,*(p+1+i)%10);
			}
			else
			{
				write_number_black(x1+i*27,y1,*(p+i)/100);
				write_number_black(x1+i*27+8,y1,*(p+i)/10%10);
				write_number_black(x1+i*27+16,y1,*(p+i)%10);
			}
		}
	}
	else//显示空白
	{
		for(i=0; i<14; i++)
			write_number(x1+i*8,y1,30);
	}	
}
/*********************************************************************************************************
* 函数名称:Disp_QiTa
*
* 功能描述:
*
* 说明:
* 
********************************************************************************************************/
void Disp_QiTa(void)
{
	clear();
	Menu_ID = 23;
}

void SaveAlarm(Uint8 att, Uint8 tongdao, Uint8 code,Uint8 state)
{
Uint8 str[4];
Uint16 k,i;
	i = I2C_GaoJing+Alarm_Now*I2C_GaoJingByte;
	if(Alarm_Now >= I2C_MaxGaoJing) Alarm_Now = 0;
	
	for(k=0; k<5; k++)															//保存时间
		II3WR(AT24C256,i+k,Time_now[k+1]);
	II3WR(AT24C256,i+5,att);				//属性0:模拟 1:开关 2:门禁
	II3WR(AT24C256,i+6,tongdao);			//通道
	II3WR(AT24C256,i+7,code);				//代码
	II3WR(AT24C256,i+8,state);				//报警状态
	str[0] = 0;
	str[1] = 0;
	if(att==2)
		for(k=0; k<4; k++)	str[k] = CardNo[tongdao][k+1];
	else if(att==1)
	{
		str[2] = 0;				str[3] = DISam_Value[tongdao];
	}
	else if(att==0)
	{
		str[2]=ADSam_Value[tongdao]/256;	str[3]=ADSam_Value[tongdao]%256;
	}
	for(k=0; k<4; k++)
		II3WR(AT24C256,i+k+9,str[k]);				
	Alarm_Now += 1;
	Alarm_Sum += 1;
	if(Alarm_Sum >= I2C_MaxGaoJing)	Alarm_Sum = I2C_MaxGaoJing;	
	
	II3WR(AT24C256,I2C_Alarm_Sum,Alarm_Sum);
	II3WR(AT24C256,I2C_Alarm_Sum+1,Alarm_Now);
}

void ReadOldAlarm(Uint8 *p,Uint16 index)
{
Uint16 k,i;
	i = I2C_GaoJing+index*I2C_GaoJingByte;
	for(k=0; k<I2C_GaoJingByte; k++)
		*(p+k) = II3RD(AT24C256,i+k);
}

void ReadOldData(Uint8 *p,Uint16 index)
{
Uint16 k,i;
	i = I2C_OldData + index * I2C_OldDataByte;
	for(k=0; k<I2C_OldDataByte; k++)
		*(p+k) = II3RD(AT24C256,i+k);
}

void SaveData(void)
{
Uint16 k,i;
	if(OldData_Now >= I2C_MaxOldData)	OldData_Now = 0;
	i = I2C_OldData+OldData_Now*I2C_OldDataByte;
	for(k=0; k<5; k++)
		II3WR(AT24C256,i+k,Time_now[k]);
	i += 5;
	II3WR(AT24C256,i,16);//模拟通道数
	for(k=0; k<16; k++)
	{
		ADAver[k] = (ADMax[k] + ADMin[k])/2;
		II3WR(AT24C256,i+k*10+1,k); //通道号
		II3WR(AT24C256,i+k*10+2,ADSam_Code[k]);//检测代码
		II3WR(AT24C256,i+k*10+3,ADSam_Value[k]/256);
		II3WR(AT24C256,i+k*10+4,ADSam_Value[k]%256);
		II3WR(AT24C256,i+k*10+5,ADMax[k]/256);
		II3WR(AT24C256,i+k*10+6,ADMax[k]%256);
		II3WR(AT24C256,i+k*10+7,ADMin[k]/256);
		II3WR(AT24C256,i+k*10+8,ADMin[k]%256);	
		II3WR(AT24C256,i+k*10+9,ADAver[k]/256);
		II3WR(AT24C256,i+k*10+10,ADAver[k]%256);
	}
	
	i = i+15*10+11;
	II3WR(AT24C256,i,16);
	for(k=0; k<16; k++)
	{
		II3WR(AT24C256,i+k*3+1,k);
		II3WR(AT24C256,i+k*3+2,DISam_Code[k]);
		II3WR(AT24C256,i+k*3+3,DISam_Value[k]);
	}
	
	OldData_Now += 1;
	OldData_Sum += 1;
	if(OldData_Sum>=I2C_MaxOldData)	OldData_Sum = I2C_MaxOldData;
	Task &=~ Save_Data;
}



⌨️ 快捷键说明

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