单片机1602与按键问题 大神进啊!

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code tab2[]={' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
sbit rs = P2^4;
sbit rw = P2^5;
sbit en = P2^6;
uchar temp,num;
uchar number;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xie_zl(uchar zl)
{
rs=0;
rw=0;
P0=zl;
delay(5);
en=1;
delay(5);
en=0;
}
void xie_sj(uchar sj)
{
rs=1;
rw=0;
P0=sj;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
en=0;
xie_zl(0x38); //显示模式设置
xie_zl(0x0d); //光标设置 闪烁或者不闪烁
xie_zl(0x06); //指针+1
xie_zl(0x01); //清屏
xie_zl(0x80); //起始位置
}
uchar key()
{
P3=0xff;
temp=P3;
temp=temp&0xf0;
while(temp!=0xff)
{
delay(5);
temp=P3;
temp=temp&0xff;
while(temp!=0xff)
{
temp=P3;
switch(temp)
{
case 0xfe:number=1;break;
break;
case 0xfd:number=2;break;
break;
case 0xfb:number=3;break;
break;
case 0xf7:number=4;break;
break;
}
while(temp!=0xff)
{
temp=P3;
temp=temp&0xff;
}
}
}
return number;
}
void main()
{
init(); //初始化
while(1)
{

xie_zl(0x80); //起始位置
xie_sj(tab2[key()]);//按键返回值
xie_zl(0x06); //指针加1
delay(20);

}
}

-------------------------------------------分割线------------------------------------------------------
我这个程序是4个按键控制1602的显示的,当按下第一个按键时候,1062第一行第一个显示当前按下的字码,当按下第二个按键,继续显示当前按下的值
比如 第一次 按下 1 显示 1
第二次按下 2 显示12
第三次按下 2 显示122
我的程序实现不了,求高手改编!
我的程序第二次按下的时候显示出来的还在第一次那里 ,代替了第一次按下的, 指针没有自动加1
你是做课程设计吗?
我这里核好有一些资料,需要可以来找我,在线回搭闹复,如果不在,可以给我留言,看到后改枝铅马上回复。、
已发送.........