请问51单片机LCD1602的数列问题

51单片机
一个按键按一下LCD1602上出现01,之后按第二下变成01 02,第三下01 02 03,之后以此类推。
另一个按键按一下队伍的第一个数就会消失
且要队伍事实显示在LCD1602上。

首先你要解决LCD1602的显示问题,例如做成函数Display1602(row,col,data),实现在第row行,第col列显示数据data,没问题后再考虑键盘处理的事情,建立一个队列,key1按一下,队列长度加一,新增数据数据就是队列长度,然后根据长度,一个for循环把队列数据显示就可以了,另一个按键按下时,清除队列,显示自动就空了。

///LCD1602液晶显示配置

/写命令/

void cmd_w(uchar cmd)

{

RW=0;

RS=0;

E=1;

P1=cmd;

delay(1);

E=0;

}

/写数据/

void dat_w(uchar dat)

{

RW=0;

RS=1;

E=1;

P1=dat;

delay(1);

E=0;

}

/清屏/ /

void lcd_clear(void)

{

cmd_w(0x01); //清屏

cmd_w(0x02); //清屏回到左上角

} */

/*初始化/

void Lcd1602_init(void)

{

cmd_w(0x38);

cmd_w(0x0c);

cmd_w(0x06);

cmd_w(0x01);

cmd_w(0x80);

}

/光标定位*/

void gotoxy(uchar x,uchar y) //x是行数,y是列数

{

if(x==1)

{cmd_w(0x80+y);}

else

{cmd_w(0xc0+y);}

}

void dsp_ch(uchar _ch)

{

dat_w(_ch);

}

///LCD1602液晶显示
void inputbyte(unsigned char dat)

{

unsigned char i;

for ( i=8; i>0; i-- )

{

SCLK_1302 = 0;

NOP;

NOP;

if(dat&0x01)

{

DIO_1302 = 1;

}

else

{

DIO_1302 = 0;

}

NOP;

NOP;

dat >>= 1;

SCLK_1302 = 1;

NOP;

NOP;

NOP;

NOP;

}

}

unsigned char outputbyte(void)

{

unsigned char i;

unsigned char dat=0;

for ( i=8; i>0; i-- )

{

dat >>= 1;

NOP;

NOP;

SCLK_1302 = 0;

NOP;

NOP;

if(DIO_1302)

{

dat|=0X80;

}

NOP;

NOP;

SCLK_1302 = 1;

NOP;NOP;NOP;NOP;

}

return(dat);

}

void write1302 ( unsigned char addr,dat )

{

CE_1302 = 0;

NOP;

NOP;

SCLK_1302 = 0;

NOP;

NOP;

CE_1302 = 1;

NOP;NOP;NOP;NOP;

inputbyte(addr);    

inputbyte(dat);

CE_1302 = 0;

}

unsigned char read1302 (unsigned char addr)

{

unsigned char  dat,data_buff;

CE_1302 = 0;

NOP;

NOP;

SCLK_1302 = 0;

NOP;

NOP;

CE_1302 = 1;

NOP;NOP;NOP;NOP;

inputbyte(addr);  

dat=outputbyte();

SCLK_1302 = 1;

NOP;

NOP;

CE_1302 = 0;

data_buff=dat;

data_buff/=16;

dat=dat%16;

dat=data_buff*10+dat;

return (dat);

}
按键部分较为简单,没有按下按键,对应IO口是高电平,按键按下,对应IO口接地,是低电平。单片机检测各个按键IO口电平,判断按键状态。
最后在main.c里面while1配合按键调用上面的写lcd1602函数就可以实现显示任意内容。
有问题可私信我,望采纳。

按键按下后判断按下的次数,第1次在坐标比如0 ,0 的地方显示1 第2次在坐标 1,0的位置显示02 第3次在坐标 2, 0 的位置显示03。另一个按键按下的时候根据次数把0 ,0的显示清除 就是一个坐标的计算

这种题目还要问么,自己想,想不出来还是建议换了吧,嘿嘿