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

📄 key.c

📁 ad7705在打包机仪表中的应用
💻 C
字号:
/*
                  2402数据存储结构 所有数据按位存放
30-31:去皮时A/D转换值
32-33:校称时A/D转换值
34-39:校称值
40-43:打包数量
44-45:打包值
46-47:大螺旋设定值
48-49:小螺旋设定值
4a:小数点位
50-55:落差
F1;去皮设定(只有确定、返回起作用)
F2:校称值确定(6位)
F3:打包值设定
F4:大螺旋设定数值(2位)
F5:小数点位数(2位)
F6:落差
F7:打包数量
F8:
*/
#include "ad7705.h"
#include "ZLG7289.h"
#include "ZLG7289T.h"
#include "2402.h"
#include "intrins.h"
#include "KEY.H"
#include "main.h"
#include "ad7730.h"
#include <w77c32.h>
volatile unsigned char Key;
unsigned char xdata dis_6[6];
/*
函数:key_set(volatile unsigned char Key)
功能:判断哪个功能键按下
参数:Key:返回的键值
*/
void key_main (volatile unsigned char Key)
{
 EX0 = 0;
 EA = 0;//关断中断
 switch (Key)
 {
 	case key_set:
	     pkey_set();
         key_press=0;
		 break;
	case key_sw0:
		 pkey_sw0();
         key_press=0;
		 break;
	case key_sw1:
	     pkey_sw1();
         key_press=0;
		 break;
	//case key_auto:
	     //w_auto=1;
		 //w_hand=0;
		 //break;
	//case key_hand:
	     //w_auto=0;
		 //w_hand=1;
		// break;
	case key_aim:
	     pkey_aim();
         key_press=0;
		 break;
	default:
		break;
 }
 EX0 = 1;
 EA = 1;//开启中断
}
/*
函数:void dis_f(unsigned char f_num)
功能:设置打包值
参数:f_num:菜单号
*/
void ZLG7289Tdis_f(unsigned char f_num)
{
 ZLG7289T_Hide(0xff);
 ZLG7289T_Download(0, 0, 0, 0x0a);
 ZLG7289T_Download(0, 1, 0, 0x0a);
 ZLG7289T_Download(0, 2, 0, f_num);
 ZLG7289T_Download(1, 3, 0, 0x0f);
 ZLG7289T_Download(0, 4, 0, 0x0a);
 ZLG7289T_Download(0, 5, 0, 0x0a);
}
/*
函数:void dis_f(unsigned char f_num)
功能:设置打包值
参数:f_num:菜单号
*/
void ZLG7289dis_f(unsigned char f_num)
{
 ZLG7289_Hide(0xff);
 ZLG7289_Download(0, 0, 0, 0x0a);
 ZLG7289_Download(0, 1, 0, 0x0a);
 ZLG7289_Download(0, 2, 0, f_num);
 ZLG7289_Download(1, 3, 0, 0x0f);
 ZLG7289_Download(0, 4, 0, 0x0a);
 ZLG7289_Download(0, 5, 0, 0x0a);
}
/*
函数:array_l(unsigned char num,unsigned char start_num,unsigned char dat,unsigned char *p)
功能:数组左移最高位溢出
参数:num:要移动的数组的数据个数
      start_num:要移动数组的起始位
	  *p:要移动数组
	  array_l(6,2,3,p):将数组p[6]从p[2]-p[5]左移p[5]溢出p[2]=3
*/
array_l(unsigned char num,unsigned char start_num,unsigned char dat)
{
 unsigned char data i;
 for(i=num;i>0;i--)
 {
   dis_6[start_num+i-1]=dis_6[start_num+i-2];
 }
 dis_6[start_num]=dat;
}
/*
函数:pkey_l()
功能:显示数组左移,按数字键后依次左移
参数:num:要移动的数组的数据个数
      start_num:要移动数组的起始位
      aim_over =0x01;按下确定
      aim_over =0x02;按下返回
	  aim_over =0x03;按下数字
	  aim_over =0x03;按下确定
	  aim_over =0x00;其他情况
*/
unsigned char pkey_l(unsigned char num,unsigned char start_num)
{
 unsigned char data aim_over;
 switch (Key)
  {
 	case key0:
	    array_l(num,start_num,0);
		aim_over=0x03;
		break;
	case key1:
	    array_l(num,start_num,1);
		aim_over=0x03;
		break;
	case key2:
	    array_l(num,start_num,2);
		aim_over=0x03;
		break;
	case key3:
	    array_l(num,start_num,3);
		aim_over=0x03;
		break;
	case key4:
	    array_l(num,start_num,4);
		aim_over=0x03;
		break;
	case key5:
	    array_l(num,start_num,5);
		aim_over=0x03;
		break;
	case key6:
	    array_l(num,start_num,6);
		aim_over=0x03;
		break;
	case key7:
	    array_l(num,start_num,7);
		aim_over=0x03;
		break;
	case key8:
	    array_l(num,start_num,8);
		aim_over=0x03;
		break;
	case key9:
	    array_l(num,start_num,9);
		aim_over=0x03;
		break;
	case key_ok:
	    aim_over=0x01;
		break;
	case key_back:
	    aim_over=0x02;
		break;
	case key_set:
	    aim_over=0x04;
		break;
	default:
	    aim_over=0x00;
		break;
   }
 return aim_over;
}

/*
函数:pkey_aim()
功能:设置打包值
参数:
*/
void pkey_aim()
{
 unsigned char data keysgn_aim=0;
 bit ok_back=1;
 Read_N_Bytes(dis_6,ZLG7289T_N,pack_2402);
 ZLG7289T_dissapear( ZLG7289T_N,l_num,dis_6,1);
 ZLG7289dis_f(l_aim);
 while(!keysgn_aim|ok_back)//按下确定返回后返回
 {
   Key = ZLG7289_Key();
   Delay(20);
   keysgn_aim=pkey_l(l_num,0);
   switch (keysgn_aim)
   {
 	 case 1:
	     ok_back=0;
		 Write_A_Page(dis_6,ZLG7289T_N,pack_2402);
		 break;
	 case 2:
	     ok_back=0;
		 break;
	 case 3:
	     ZLG7289T_dissapear(  ZLG7289_N,l_num,dis_6,1);
		 ok_back=1;
		 break;
	 default:
		 break;
    }
  }
}
/*
函数:pkey_sw0()
功能:设置去皮值
参数:
*/
void pkey_sw0()
{

 unsigned char data i;
 bit sw0_over=1;
 for(i=0;i<6;i++)
 {
   dis_6[i]=0;
 }//显示数组清零
 ZLG7289_dissapear( ZLG7289_N,dis_6);
 ZLG7289Tdis_f(l_sw0);
 while(sw0_over)
 {
   Key = ZLG7289_Key();
   Delay(20);
   switch (Key)
   {
    unsigned char data ad7730_dat8[2];
    unsigned int data ad7730_dat;
	case key_ok:
	/*********添加读A/D值并储存程序***********/
	ad7730_dat=ReadData7705();
        ad7730_dat8[0]=ad7730_dat;
        ad7730_dat8[1]=ad7730_dat>>8;
	Write_A_Page(ad7730_dat8,2,sw0Ah_2402);
	/*********添加读A/D值并储存程序***********/
        sw0_over=0;
		break;
	case key_back:
	    sw0_over=0;
		break;
	default:
	    sw0_over=1;
		break;
    }
  }
}
/*
函数:pkey_sw1()
功能:设置校称值
参数:
*/
void pkey_sw1()
{
 unsigned char data loop ,keysgn_sw1=0;
 bit ok_back=1;
 for(loop=0;loop<6;loop++)
 {
  dis_6[loop]=0;
 }//显示数组清零
 ZLG7289_dissapear( ZLG7289_N,dis_6);
 ZLG7289Tdis_f(l_sw1);
 while(!keysgn_sw1|ok_back)//按下确定返回后返回
 {
   Key = ZLG7289_Key();
   Delay(20);
   keysgn_sw1=pkey_l(ZLG7289_N,0);
   switch (keysgn_sw1)
   {
 	 unsigned char data ad7730_dat8[2];
         unsigned int ad7730_dat;
	 case 1:
	     ok_back=0;
	/*********添加读A/D值并储存程序***********/
	ad7730_dat=ReadData7705();
        ad7730_dat8[0]=ad7730_dat;
        ad7730_dat8[1]=ad7730_dat>>8;
	Write_A_Page(ad7730_dat8,2,sw1Ah_2402);
	/*********添加读A/D值并储存程序***********/
		 Write_A_Page(dis_6,ZLG7289T_N,sw1h_2402);
		 break;
	 case 2:
	     ok_back=0;
		 break;
	 case 3:
	     ZLG7289_dissapear(  ZLG7289_N,dis_6);
		 ok_back=1;
		 break;
	 default:
		 break;
   }
 }
}
/*
函数:pkey_setdis(unsigned char file_n)
功能:设置程序
参数:
*/
void pkey_setdis(unsigned char file_n)
{
   unsigned char idata loop;
   for(loop=0;loop<6;loop++){dis_6[loop]=0;}//显示数组清零
   if(file_n==4)//大螺旋
   {
	    Read_N_Bytes(dis_6,2,big_2402);
		ZLG7289_dissapear( ZLG7289_N,dis_6);
		ZLG7289Tdis_f(file_n);
	}
	if(file_n==5)//小数点
	{
	    dis_6[0]=Read_One_Byte(point_2402);
		ZLG7289_dissapear( ZLG7289_N,dis_6);
		ZLG7289Tdis_f(file_n);
	}
	if(file_n==6)//落差
	{
        //unsigned char idata point;
		Read_N_Bytes(dis_6,luocha_num,luo_2402);		  //设置落差显示程序
        point=Read_One_Byte(point_2402);
        dis_6[point]|=0x80;
        ZLG7289Tdis_f(file_n);
        ZLG7289_dissapear( luocha_num,dis_6);
		ZLG7289Tdis_f(file_n);
	}
	if(file_n==7)//打包数量
	{
        Read_N_Bytes(dis_6,ZLG7289T_N,pack_2402);
        ZLG7289T_dissapear( ZLG7289T_N,l_num,dis_6,2); //设置打包数程序
		ZLG7289dis_f(file_n);
	}
}
/*
函数:pkey_set()
功能:设置程序
参数:
*/
void pkey_set()
{
 unsigned char idata file_n=0x03,keysgn_set=0;
 bit ok_back=1;
 //ZLG7289Tdis_f(file_n);
 //ZLG7289_dissapear( ZLG7289_N,dis_6);
 //Delay(20);
 while(!keysgn_set|ok_back)//按下确定返回后返回
 {
   unsigned char idata led_num,led_start,addr2402;
   bit one_two;
   Key = ZLG7289_Key();
   Delay(20);
   switch (file_n)//不同情况下参数设定
   {
    case 4://大螺旋
	    led_num=0x02;
		led_start=0x00;
		addr2402=big_2402;
		one_two=0;
		break;
	/*
	case 5:
	    led_num=0x02;
		led_start=0x00;
	    addr2402=small_2402;
		one_two=0;
		break;
   */
	case 5://小数点
	    led_num=0x01;
		led_start=0x00;
	    addr2402=point_2402;
		one_two=0;
		break;
	case 6://落差
	    point=Read_One_Byte(point_2402);
	    if(point)
		 led_num=0x02;
		else 
		 led_num=0x01;
		led_start=0x00;
	    addr2402=luo_2402;
		one_two=0;
		break;
	case 7://打包数量
	    led_num=0x06;
		led_start=0x02;
	    addr2402=pack_2402;
		one_two=1;
		break;
	default: break;
	}
   keysgn_set=pkey_l(led_num,led_start);
   switch (keysgn_set)
   {
 	 case 1:
	     ok_back=0;
		 if(file_n==6)//落差设置
		 {
		   //unsigned char idata point_m;
		   point=Read_One_Byte(point_2402);
		   dis_6[point]&=0x7f;
		  }
		 Write_A_Page(dis_6,led_num,addr2402);
		 break;
	 case 2:
	     ok_back=0;
		 break;
	 case 3:
		 if(file_n==5)//小数点
		 {
		 if(dis_6[0]>point_max)dis_6[0]=0;
		 }
		 if(file_n==6)//落差
		 {
		  unsigned char idata point_n;
		  point_n=Read_One_Byte(point_2402);
		  dis_6[point_n+1]&=0x7f;
		  dis_6[point_n]|=0x80;
		 }
		 if(one_two)ZLG7289T_dissapear(ZLG7289_N,2,dis_6,2);
		 else ZLG7289_dissapear(  ZLG7289_N,dis_6);
		 ok_back=1;
		 break;
	 case 4:
		 file_n++;
		 if(file_n>7)file_n=4;
		 ok_back=1;
		 pkey_setdis(file_n);
		 break;
	 default:
		 break;
   }
 }
}

⌨️ 快捷键说明

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