嗯嗯,我这个实际是这个样子的,就是把光标设置一个位置,然后打开光标,再然后在这个位置输入数字,这个数字的位数不定。现在的问题是在我打开光标时,还没有输入数字呢,这个光标就跑到位置列表的最后一个位置了。这个设置光标位置和打开光标我是通过一个按键执行的。而输入数字的方式有两种,一种是通过数字键盘输入,一种是实时读取传感器的数据,这两种方式我在数字按键的动作函数里加了判断,来进行选择是用哪种方式进行输入。
程序里涉及到光标位置的有光标右移、光标位置设置、输入数字,删除数字这几个函数。- /*设置光标位置,打开光标*/
- void RefreshCursorShow()
- {
- switch(setIndex)
- {
- case 1:LcdSetCursor(4,0);LcdWriteCmd(0x0F);break;
- case 2:LcdSetCursor(10,0);break;
- case 3:LcdSetCursor(2,1);break;
- case 4:LcdSetCursor(10,1);break;
- case 5:LcdWriteCmd(0x0C);setIndex = 0;break;
- default:break;
- }
- }
- /*光标移动操作函数,配合按键0x1B动作*/
- void RightShiftSet()
- {
- if(setIndex <= 4)
- {
- setIndex++;
- RefreshCursorShow(); //设置光标位置,并打开光标
- }
- }
- /*按键动作函数,执行相应的动作*/
- void KeyAction(unsigned char keycode)
- {
- if((keycode >= '0') && (keycode <= '9')) //输入数字
- {
- NumKeyAction(keycode - '0');
- }
- else if(keycode == 0x26) //各特征值的切换
- {
- FunKeyAction();
- }
- else if(keycode == 0x1B) //光标的循环移动
- {
- RightShiftSet();
- }
- else if(keycode == 0x27) //删除当前数据
- {
- Deldata();
- }
- else if(keycode == 0x23) //去皮清零
- {
- ClearZeroKeyAction();
- }
- else if(keycode == 0x40) //将当前A\B\C数据写入
- {
- WriteInDATA();
- LcdAreaClear(10,0,6);
- LcdAreaClear(2,1,6);
- LcdAreaClear(10,1,6);
- }
- else if(keycode == 0x25) //读出当前特征值的A\B\C数据
- {
- ReadOutDATA();
- }
- else if(keycode == 0x28) //校正计算
- {
- EA = 0;
- transition();
- EA = 1;
- }
- else if(keycode == 0x0D) //切换显示(实时和功能的切换)
- {
- SwDisplayKeyAction();
- }
- else if(keycode == 0x2B) //校准值加
- {
- if(T2 < 50)
- {
- T2++;
- }
- }
- else if(keycode == 0x2C) //校准值减
- {
- if(T2 > 0)
- {
- T2--;
- }
- }
- }
- /*数字键动作函数,n-按键输入的数值*/
- void NumKeyAction(unsigned int n)
- {
- long xdata xe = 50;
-
- switch(setIndex)
- {
- case 1:
- num0 = num0 * 10 + n;
- GuigeToString(number,num0);
- LcdShowStr(4,0,number);
- num1 = 0;
- break;
- case 2:
- if(Getval < xe)
- {
- num1 = num1 * 10 + n;
- }
- else
- {
- num1 = Getval;
- }
- ValueToString(str,num1);
- LcdShowStr(10,0,str);
- num2 = 0;
- break;
- case 3:
- if(Getval < xe)
- {
- num2 = num2 * 10 + n;
- }
- else
- {
- num2 = Getval;
- num2 += num1;
- }
- ValueToString(str,num2);
- LcdShowStr(2,1,str);
- num3 = 0;
- break;
- case 4:
- if(Getval < xe)
- {
- num3 = num3 * 10 + n;
- }
- else
- {
- num3 = Getval;
- num3 += num2;
- }
- ValueToString(str,num3);
- LcdShowStr(10,1,str);
- num0 = 0;
- break;
- default:
- break;
- }
- }
- /*删除当前数据*/
- void Deldata()
- {
- switch(setIndex)
- {
- case 1:
- LcdAreaClear(4,0,4);
- num0 = 0;
- RefreshCursorShow();
- break;
- case 2:
- LcdAreaClear(10,0,6);
- num1 = 0;
- RefreshCursorShow();
- break;
- case 3:
- LcdAreaClear(2,1,6);
- num2 = 0;
- RefreshCursorShow();
- break;
- case 4:
- LcdAreaClear(10,1,6);
- num3 = 0;
- RefreshCursorShow();
- break;
- default:
- break;
- }
- }
复制代码 |