📄 key.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 + -