linux下模拟控制台经典函数

#define COMM_KEY1 '1'
#define COMM_KEY2 '2'
#define COMM_KEY3 '3'
#define COMM_KEY4 '4'

#define comm_printf printf


//for comm display



int comm_getkey(void)
{
unsigned char key= -1;
while( (key=getchar())=='\n');//防止读到'\n'
return key;
}


int comm_kbhit(void)
{
struct timeval tv;
fd_set rdfs;
int ret=0;


tv.tv_sec = 0;
tv.tv_usec = 0;


FD_ZERO(&rdfs);
FD_SET (STDIN_FILENO, &rdfs);


select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
ret = FD_ISSET(STDIN_FILENO, &rdfs);
return ret ? 0 : 1;
}




unsigned char comm_getnewval(unsigned char ucMin, 
unsigned char ucMax, unsigned char ucRst, 
unsigned char ucCur, unsigned char *pucVal)
{

unsigned char ucStep;
unsigned char ucKey =  0;  
unsigned char ucTemp = ucCur; 
unsigned char ucVal = ucCur;


while(1)
{
comm_printf("Range:%02X~%02XH,Rst:%02XH\n", ucMin, ucMax, ucRst);  
comm_printf("Cur: %02X  \n", ucVal);
comm_printf("New: %02X  \n", ucTemp);


comm_printf("STEP: KEY1-1 KEY2-5 \nKEY3-10 KEY4-Quit \n");
ucKey = comm_getkey();
if (ucKey == COMM_KEY1) 
{
ucStep = 1;
}
else if(ucKey == COMM_KEY2)
{
ucStep = 5;
}
else if(ucKey == COMM_KEY3)
{
ucStep = 10;
}
else
{
*pucVal=ucVal;//确保第一次进入立即出去,值设置上
return 0 ;
}

comm_printf("KEY1-INC %d  KEY2-DEC %d \n", ucStep, ucStep);
comm_printf("KEY3-Cancel  KEY4-Confirm \n");
while (2) 
{
if (!(comm_kbhit())) 
{
ucKey = comm_getkey();
if (ucKey ==COMM_KEY3) 
{
comm_printf(" Set Canceled \n");
comm_getkey();
return 1;
}
if (ucKey == COMM_KEY1) 
{
if ((ucTemp + ucStep) > ucMax ) 
{
ucTemp = ucMin;
}
else
ucTemp += ucStep;

comm_printf(" include %d\n",ucStep);
comm_printf("Current NewVal: %02X  \n", ucTemp);
}
if (ucKey == COMM_KEY2) 
{
if (ucTemp < ucStep) 
{
ucTemp = ucMax;
}
else if ((ucTemp - ucStep) < ucMin) 
{
ucTemp = ucMax;
}
else
ucTemp -= ucStep;


comm_printf(" decrease %d \n",ucStep);
comm_printf("Current NewVal: %02X  \n", ucTemp);
}
if (ucKey == COMM_KEY4) 
{
comm_printf("Set OK \n");
comm_getkey();
*pucVal = ucTemp;
ucVal = ucTemp;
     break;
}
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值