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

📄 key.c

📁 采用MPS430控制的项目
💻 C
📖 第 1 页 / 共 2 页
字号:
#define   _key_
#include  "..\Inc\includes.h"
uchar    const  SUPERMIMA[6]={1,2,3,4,5,6};
/*********************************************************************************************************
* 函数名称:Key_Deal
*
* 功能描述:按键查询...连续查2次,键值相同才处理,否则视为干扰。
*
* 说明:
* 
********************************************************************************************************/
void Key_Deal(void)
{
uchar key_now;
	key_data = KeyScan();	
	key_now  = KeyScan();
	if(key_data==key_now && key_data<=key_sure)
	{
		KEY_RESPONSE(); 
	}
	Task &=~ Read_Key;
}
/*********************************************************************************************************
* 函数名称:KEY_RESPONSE 
*
* 功能描述: 键盘响应
*
* 入口参数: 无
*
* 出口参数: 无
*
* 全局变量: Menu_ID,key_data,Alarm_Sum,Set_array,SUPERMIMA,MIMA,Set_array_count等等
* 
* 调用模块: ON_EnterPsw();ON_Enter_Samping();ON_NOAlarming();ON_Enter_Alarming(); ON_SET_FACE();write_number();ON_SET_TongDao();
*            ON_SET_BDTX(); ON_EnterTime(); ON_EnterNewPsw(); ON_EnterYuanIP(); ON_EnterYuanDK();ON_EnterIP();ON_EnterDK();  
            ON_Alarming(0);等等   
*
* 作    者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void      KEY_RESPONSE(void)
{
unsigned int temp;
unsigned char y1,x1,Set_max,Mid_data;
Uint32 IP_data;
Uint8 *pSetData;
static unsigned char chan_change=0;//通道是否改变如果改变则需要将通道定义表自动上传上去
	ALARM0
	switch(Menu_ID)
  	{
  	case 0: //1系统设置 2实时显示 3当前告警
    	if(key_data == key_1)			ON_EnterPsw();		//输入密码 Menu_ID=1
        else if(key_data == key_2)		ON_Enter_Samping(); //实时显示 Meunu_ID=14
        else if(key_data == key_3)
        {
        	if(Alarm_Sum==0)			ON_NOAlarming();	//无报警信息   Menu_ID=15
          	else 						ON_Enter_Alarming();//显示报警信息 Menu_ID=15
		}break;
	case 1://请输入密码:——————
	    if(key_data==key_sure)
        {
         	y1=0;
            for(x1=0;x1<6;x1++)
            {
            	if(Set_array[x1]!=SUPERMIMA[x1]) {y1=1;break;}
            }
            if(y1==1)
            {
            	for(x1=0;x1<6;x1++)
                if(Set_array[x1]!=MIMA[x1]){ON_EnterPsw();return;}
            }
            ON_SET_FACE();//设置界面 	Menu_ID=2
		}
        else if(key_data==key_cancel)	ON_1_face();   //Menu_ID = 0
        else if(key_data<=key_9)
        {
        	y1=30;x1=28;
            Set_array_count++;
            if(Set_array_count<=6)
            {
            	Set_array[Set_array_count-1] = key_data;
                write_number(x1+Set_array_count*8,y1,16);
            }
		}break;
	case 2://1通道设置 2本地通信 3时间设置 4密码修改
        if(key_data==key_1) 			ON_SET_TongDao();	//进入通道设置选项界面 	  Menu_ID=4
        else if(key_data==key_2)		ON_SET_BDTX();		//进入本地通信设置选项界面Meun_ID=3       
        else if(key_data==key_3)		ON_EnterTime();		//进入时间设置			  Menu_ID=13
        else if(key_data==key_4)		ON_EnterNewPsw();	//进入密码修改			  Menu_ID=12
        else if(key_data==key_down)		ON_SET_FACE2();     //   
        else if(key_data==key_cancel)	ON_1_face(); 		//返回到主界面			  Menu_ID=0
        break;
	case 3://本地通信设置:1远端IP 2远端端口 3本地IP 4本地端口
        if(key_data==key_cancel)		ON_SET_FACE(); 		//返回到设置界面		  Menu_ID=2
        else if(key_data==key_1)		ON_EnterYuanIP();	//远端IP				  Menu_ID=5
        else if(key_data==key_2)		ON_EnterYuanDK();   //远端端口				  Menu_ID=6
        else if(key_data==key_3)		ON_EnterIP();		//本地IP			      Menu_ID=7
        else if(key_data==key_4)		ON_EnterDK();		//本地端口				  Menu_ID=8
        break;
	case 4://通道设置:1模拟通道 2开关输入 3开关输出
        if(key_data==key_cancel)
        {
            if(chan_change==1)
            {
            	chan_change=0;
            	//SendChanDefinition();
            }
            ON_SET_FACE(); 
        }//返回到主界面
        else if(key_data==key_1)	ON_EnterTD_AI();//模拟输入界面定义	Menu_ID=9
        else if(key_data==key_2)	ON_EnterTD_DI();//开关输入定义		Menu_ID=10
        else if(key_data==key_3)	ON_EnterTD_DO();//开关输出定义		Menu_ID=11
        break;        
	case 5://case 5 case 7   设置 远端IP 和 本地IP
	case 7://ok
		Set_max = Set_array_count;//记录上一次的位置
		if(key_data<=key_9)
		{
			Set_array[Set_array_count] = key_data;
			if(Set_array_count<11)	Set_array_count+=1;else Set_array_count=0;
		}
		else if(key_data==key_cancel)	{ON_SET_BDTX();return;}
        else if(key_data==key_down)	
        {
        	if(Set_array_count<11)		Set_array_count+=1;else Set_array_count=0;
        }
        else if(key_data==key_up)
        {
        	if(Set_array_count>0 )	Set_array_count-=1;else Set_array_count=11;
        }
        else if(key_data==key_sure)
        {	
        	temp = Set_array[0]*100+Set_array[1]*10+Set_array[2];		
        	if(temp>255)	{	Set_array_count = 0;	goto Out;}
        	else{
        		IP_data=temp*0x1000000;
        		II3WR(AT24C256,I2C_IP+(Menu_ID-5)*4,temp);
        	}
        	temp = Set_array[3]*100+Set_array[4]*10+Set_array[5];		
        	if(temp>255)	{	Set_array_count = 3;	goto Out;}
        	else{
        		IP_data+=temp*0x10000;
        		II3WR(AT24C256,I2C_IP+1+(Menu_ID-5)*4,temp);
        	}
        	temp = Set_array[6]*100+Set_array[7]*10+Set_array[8];
        	if(temp>255)	{	Set_array_count = 6;	goto Out;}		
        	else{
        		IP_data+=temp*0x100;
        		II3WR(AT24C256,I2C_IP+2+(Menu_ID-5)*4,temp);
        	}
        	temp = Set_array[9]*100+Set_array[10]*10+Set_array[11];	    
        	if(temp>255)	{	Set_array_count = 9;	goto Out;}
        	else{
        		IP_data+=temp;
        		II3WR(AT24C256,I2C_IP+3+(Menu_ID-5)*4,temp);
        	}
        	if(Menu_ID==5)	Yuan_IP = IP_data;
        	else if(Menu_ID==7)		Bendi_IP = IP_data;
        	ON_SET_BDTX();
        	return;
        }
Out:    x1 = 2 + Set_max*8 + 7*(Set_max/3);
        y1 = Set_array[Set_max];
        write_number(x1,32,Set_array[Set_max]);

        x1 = 2 + Set_array_count*8 + 7*(Set_array_count/3);
        y1 = Set_array[Set_array_count];
        write_number_black(x1,32,Set_array[Set_array_count]);
        break;
	case 6://设置 远端端口 和 本地端口
  	case 8://ok
  		if(key_data<=key_9)	
  		{
  			if(Set_temp <=6553)
  			{
  				if(Set_temp==6553&&key_data>5)	return;	
				Set_temp = Set_temp*10 + key_data;
		    	if(Set_temp>=10000)	write_number(40+0*8,32,Set_temp/10000);   else	write_number(40+0*8,32,30);
		    	if(Set_temp>=1000)	write_number(40+1*8,32,Set_temp/1000%10); else	write_number(40+1*8,32,30);
		    	if(Set_temp>=100)	write_number(40+2*8,32,Set_temp/100%10);  else	write_number(40+2*8,32,30);
		    	if(Set_temp>=10)	write_number(40+3*8,32,Set_temp/10%10);   else	write_number(40+3*8,32,30);
		   		write_number(40+4*8,32,Set_temp%10);
		   	}
  		}	
  		else if(key_data==key_cancel)	ON_SET_BDTX();
  		else if(key_data==key_sure)
  		{
  			II3WR(AT24C256,I2C_IP+4+(Menu_ID-6)*4,Set_temp/0x100);
  			II3WR(AT24C256,I2C_IP+5+(Menu_ID-6)*4,Set_temp%0x100);
  			if(Menu_ID==6)		Yuan_dk = Set_temp;
  			else if(Menu_ID==8) Bendi_dk = Set_temp;
  			ON_SET_BDTX();
  		}
  		break;
	case 9:	//模拟通道设置
  	case 10://开关量输入设置
  	case 11://开关量输出设置 
  		if(Menu_ID==9)			{pSetData = ADSam_Code;Set_max=15;}
  		else if(Menu_ID==10)	{pSetData = DISam_Code;Set_max=15;}
  		else if(Menu_ID==11)	{pSetData = DOSam_Code;Set_max=7;}
  		if(key_data==key_cancel)	{ON_SET_TongDao();return;}
		if(key_data<=key_9)
		{
			if(Set_temp<=9)
			{
				Set_temp = Set_temp*10 + key_data;
  				Mid_data = Set_temp;
  			}
  			else return;
  		}
  		else if(key_data==key_sure||key_data==key_down)
  		{
  			if(key_data==key_sure)//数据保存
  			{
  				pSetData[Set_array_count] = Set_temp;
  				II3WR(AT24C256,(Menu_ID-9)*16+Set_array_count,Set_temp);
  			}
  			if(Set_array_count>=Set_max) Set_array_count=0;else Set_array_count+=1;
  			Mid_data = pSetData[Set_array_count];
  			Set_temp = 0;
  		}
  		else if(key_data==key_up)
  		{
			if(Set_array_count<=0)	Set_array_count=Set_max;else Set_array_count-=1;
			Mid_data = pSetData[Set_array_count];
  			Set_temp = 0;
		}
    	write_number(90,10,(Set_array_count+1)/10);
    	write_number(98,10,(Set_array_count+1)%10);
    	if(Mid_data>=10)	write_number(90,36,Mid_data/10);
    		else 			write_number(90,36,30);
    	write_number(98,36,Mid_data%10);    		
  		break;
  	case 12: //密码修改
     	if(key_data==key_cancel) 		ON_SET_FACE();  
     	else if(key_data==key_sure&&Set_array_count>=12)
     	{
     		for(x1=0;x1<6;x1++)
        	{
        		if(Set_array[x1]!=Set_array[x1+6]){ON_EnterNewPsw();return;}	
     		}
     		for(x1=0;x1<6;x1++)
     		{	MIMA[x1]=Set_array[x1];
     			II3WR(AT24C256,I2C_MIMA+x1,MIMA[x1]);
     		}
     		ON_SET_FACE();
     	}
     	else if(key_data<=key_9)
     	{
     		y1=21;x1=46;
        	if(Set_array_count<12)
        	{
        		Set_array_count++;
            	Set_array[Set_array_count-1]=key_data;
            	if(Set_array_count<=6)	write_number(x1+Set_array_count*8-8,y1,16);
            	else 					write_number(x1+Set_array_count*8-56,y1+22,16);
       		}
		}break;  
	case 13://时间设置
		if(key_data<=key_9)
		{
			Set_array[Set_array_count] = key_data;
			if(Set_array_count<9)	Set_array_count+=1;else Set_array_count=0;
		}

⌨️ 快捷键说明

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