📄 input_op.c
字号:
key = get_key();
if(!key) continue;
//beep(50);
if(error&&key!=CLEAR&&key!=VOID) continue;//出错后,须即时更正或取消操作
switch(key)
{
case VOID://取消操作
clear_lcd(1,2);
Last_line=0xff;
dismode=0;
return CANCEL;
break;
case CLEAR://取消操作
if(error)//报错时
{
clear_lcd(3,1);//清除错误显示
error=0; //清除错误标志
}
break;
case PAPER1://若按下[走纸]键,则走纸1行
if(mode==1||mode==2)
{
error=KEY_ERROR;
break;
}
#ifdef C6_VER
error=Fast_feed_paper_hang(120);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(1);
#endif
break;
#ifdef HYS620
case BACK_PAPER://若按下[走纸]键,则走纸1行
if(mode==1||mode==2)
{
error=KEY_ERROR;
break;
}
back_on_dot(120);
break;
#endif
case ENTER://最后确定
if(mode==2)
{
error=KEY_ERROR;
break;
}
Last_line=0xff;
dismode=0;
return OK;
break;
default:
error=KEY_ERROR;
break;
}
}
}
/*****************************************************************************************
函数功能: 每输入一个数字键,判断已经输入的数字字符串是否合法.若合法,则转换到数字缓冲区中.
说明:
入口参数: numkey--输入一个数字键;
ponit--是否允许输入小数点
max_key_num--输入时允许的最大数字键长度(不包括小数点)
*numkey_str--以'\0'为结束符的数字字符串指针(包括小数点)
特别说明:numkey_str缓冲区大小必须大于max_key_num,小于40
出口参数: *numkey_str--以'\0'为结束符的数字字符串指针(包括小数点)
返回值 : 有效返回0,否则返回1
作者:
日期:2003-06-23
*************************************************************************************/
uchar get_valid_digit(uchar numkey,uchar point,uchar max_key_num,uchar *numkey_str)
{
uchar i;
uchar haspoint;
uchar len;//输入的数字字符串长度
#define MAX_DIGIT_LEN 40
uchar key_buf[MAX_DIGIT_LEN+1];
set_value0(key_buf,MAX_DIGIT_LEN+1);
if(max_key_num>MAX_DIGIT_LEN) max_key_num=MAX_DIGIT_LEN;
if((numkey<'0'||numkey>'9')&&(numkey!=POINT)&&(numkey!=KEY00)&&(numkey!='-'))
return 1;//非有效数字键
if(!point&&numkey==POINT)
return 1;//如果不允许输入小数点却又输入了,则非法
len=strlen((const char *)numkey_str);//之前已经输入的数字字符串长度即键数
//if(len==0)
//len=1;
if(len)
memcpy(key_buf,numkey_str,len);
key_buf[len]='\0';
if(numkey==KEY00) //输入双0键后
{
key_buf[len]='0';
key_buf[len+1]='0';
key_buf[len+2]=0;//结束符
len+=2;//目前为止输入的键数
}
else //输入非双0键
{
key_buf[len]=numkey;
//strcat(key_buf,numkey);//将当前输入的键值添加到数字键缓冲区
//if(numkey!=POINT)//输入非小数点
len++;//目前为止输入的键数
}
if(point)
{
if(len>max_key_num+1) return 1;//如果目前为止输入的键数超过输入时允许的最大数字键长度,则非法
}
else
if(len>max_key_num) return 1;//如果目前为止输入的键数超过输入时允许的最大数字键长度,则非法
if(point)//允许输入小数点时
{
if(key_buf[0]==KEY00||key_buf[0]==POINT) return 1;//第1位输入的为00或小数点则非法
if(key_buf[0]=='0' && (key_buf[1]!=0 && key_buf[1]!=POINT)&&(point==1))//排除条形码输入
return(1);//若第1位为0,但第2位输入的不是小数点,则非法
haspoint=0;
for(i=0;i<len;i++)
{
if(key_buf[i]==POINT)
{
if(haspoint) return(1);//输入的小数点超过1个,非法
haspoint=1;
}
if(haspoint)
{//小数点后输入超过2位,非法
//2005.11.25
if(len>ALLOW_INPOINT && i<(len-ALLOW_INPOINT-1))//if(len>=3 && i<len-3)
return 1;
}
}
}
memcpy(numkey_str,key_buf,len);//当前数字字符串
numkey_str[len]='\0';
return 0;
}
//==========================================================================================
uchar look_up_pointlong(uchar *numkey_str)
{
uchar i,len;
uchar pointlong;
uchar haspoint;
pointlong=0;
haspoint=0;
len=strlen((const char *)numkey_str);
for(i=0;i<len;i++)
{
if(numkey_str[i]==POINT)haspoint=1;
else if(haspoint)pointlong++;
}
return pointlong;
}
//=======================================================================================
uchar look_up_fushu(uchar *numkey_str)
{
uchar i,len;
len=strlen((const char *)numkey_str);
for(i=0;i<len;i++)
{
if(numkey_str[i]=='-')return 1;
}
return 0;
}
/*****************************************************************************************
函数功能: 将数字字符串转换为无符号长整形数.
(如"1234567.09" 则可以表示为123456709,扩大了10^pointlong倍)
说明: 小数点后没有输入数时,作为整数处理
入口参数: *numkey_str--以'\0'为结束符的数字字符串指针(包括小数点)
ponit--是否允许输入小数点,0表示不允许,否则表示允许
出口参数:
返回值 : num--转换后的无符号长整形数(允许小数点则扩大了100倍,否则
不扩大)
作者:
日期:2005-11-26
*************************************************************************************/
ulong numstr_to_long(uchar *num_str,uchar allow_point,uchar pointlong )
{
uchar i,k,j;
uchar len,point;
ulong num;
uchar times; //次数
len=strlen((const char *)num_str);//数字字符串的长度
if((pointlong==0)&&(allow_point))allow_point=0;
for(i=0;i<len;i++)//找小数点的位置
{
if(num_str[i]==POINT)
if(allow_point) //允许小数点
break;
else
return(0); //不允许小数点
}
point=i;//得到小数点的位置
if(point==0) return(0);//没有可转换的数字
if((point==len-2)&&(pointlong==2)) //若小数点后只有1位数
{
num_str[len]='0';//在其后添加数字'0';
len+=1;//数字长度加1
num_str[len+1]=0;//结束符
}
num=0;
for(j=0;j<len;j++)//转换除了小数点本身之外的数字
{
k=num_str[j];
if(j<point)//整数部分
{
if(allow_point)
times=point-j+pointlong-1;//允许小数点,扩大10^pointlong倍
else
times=point-j-1 ; //不允许小数点,则不扩大
if(num+(k-0x30)*mypow(10,times)>0xffffffffL)
return(0xffffffffL);
num=num+(ulong)((k-0x30)*mypow(10,times));
}
else if(j>point) //小数部分
{
if(num+(k-0x30)*mypow(10,pointlong-j+point)>0xffffffffL)
return(0xffffffffL);
num+=(k-0x30)*mypow(10,pointlong-j+point); //扩大了10^pointlong倍
}
}
return(num);
}
/*****************************************************************************************
函数功能: 将数字字符串转换为无符号长整形数.
(如"1234567.09" 则可以表示为123456709,扩大了100倍)
说明: 小数点后没有输入数时,作为整数处理
入口参数: *numkey_str--以'\0'为结束符的数字字符串指针(包括小数点)
ponit--是否允许输入小数点,0表示不允许,否则表示允许
出口参数:
返回值 : num--转换后的无符号长整形数(允许小数点则扩大了100倍,否则
不扩大)
作者:
日期:2003-06-23
*************************************************************************************/
/*
ulong numstr_to_long(uchar *num_str,uchar allow_point)
{
uchar i,k,j;
uchar len,point;
ulong num;
uchar times; //次数
len=strlen((const char *)num_str);//数字字符串的长度
for(i=0;i<len;i++)//找小数点的位置
{
if(num_str[i]==POINT)
if(allow_point) //允许小数点
break;
else
return(0); //不允许小数点
}
point=i;//得到小数点的位置
if(point==0) //没有可转换的数字
return(0);
if(point==len-2) //若小数点后只有1位数
{
//2005.11.25
for(i=len;i<(len+2*allow_point-1);i++)
{
num_str[i]='0';
len+=1;//数字长度加1
}
//num_str[len]='0';//在其后添加数字'0';
//len+=1;//数字长度加1
num_str[len+1]=0;//结束符
}
num=0;
for(j=0;j<len;j++)//转换除了小数点本身之外的数字
{
k=num_str[j];
//2005.11.25
/* if(j<point)//整数部分
{
if(allow_point)
times=point-j+2*allow_point-1;//允许小数点,扩大100倍
else
times=point-j-1 ; //不允许小数点,则不扩大
if(num+(k-0x30)*mypow(10,times)>0xffffffffL)
return(0xffffffffL);
num=num+(ulong)((k-0x30)*mypow(10,times));
}
else if(j>point) //小数部分
{
if(num+(k-0x30)*mypow(10,2*allow_point-j+point)>0xffffffffL)
return(0xffffffffL);
num+=(k-0x30)*mypow(10,2*allow_point-j+point); //扩大了100倍
}
*/
/* if(j<point)//整数部分
{
if(allow_point)
times=point-j+1;//允许小数点,扩大100倍
else
times=point-j-1 ; //不允许小数点,则不扩大
if(num+(k-0x30)*mypow(10,times)>0xffffffffL)
return(0xffffffffL);
num=num+(ulong)((k-0x30)*mypow(10,times));
}
else if(j>point) //小数部分
{
if(num+(k-0x30)*mypow(10,2-j+point)>0xffffffffL)
return(0xffffffffL);
num+=(k-0x30)*mypow(10,2-j+point); //扩大了100倍
}
}
return(num);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -