51单片机如下程序怎样把矩形键盘输入的值存放到数组里面去?比如说我按键按下的是“1”,存放到数组的元素里面去。有实例参考一下吗?
#include<reg51.h>
sbit lcd_RS=P2^0;
sbit lcd_RW=P2^1;
sbit lcd_E=P2^2;
char key[]={0,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30}; //键值
char key2[]="OK";
char table[]="password";
char table1[]="input:";
delay(unsigned int x)
{
unsigned int i;
for(x=0;x<100;x++)
for(i=0;i<x;i++);
}
write_com(unsigned char com )
{
while(lcd_busy());
lcd_RS=0;
lcd_RW=0;
delay(200);
P0=com;
delay(200);
lcd_E=1;
delay(200);
lcd_E=0;
}
write_dat(unsigned char dat )
{
while(lcd_busy());
lcd_RS=1;
lcd_RW=0;
P0=dat;
delay(200);
lcd_E=1;
delay(200);
lcd_E=0;
}
lcd_busy()
{
unsigned char temp;
lcd_RS=0;
lcd_RW=1;
delay(20);
P0=0xff;
delay(20);
lcd_E=1;
delay(20);
temp=P0;
delay(20);
lcd_E=0;
return(temp&0x80);
}
init()
{
write_com(0x01);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
}
juxingjianpan()
{
unsigned char KeyNumber,x,y;
P1=0x0f;
x=P1;
P1=0xf0;
y=P1;
switch(x+y)
{
case 0xee: KeyNumber=1;break;
case 0xde: KeyNumber=2;break;
case 0xbe: KeyNumber=3;break;
case 0x7e: KeyNumber=4;break;
case 0xed: KeyNumber=5;break;
case 0xdd: KeyNumber=6;break;
case 0xbd: KeyNumber=7;break;
case 0x7d: KeyNumber=8;break;
case 0xeb: KeyNumber=9;break;
case 0xdb: KeyNumber=10;break;
case 0xbb: KeyNumber=11;break;
}
return KeyNumber;
}
void main() {
unsigned int i,KeyNum,password="1234";
init();
write_com(0x80);
for(i=0;i<8;i++)
{
write_dat(table[i]);
}
write_com(0xc0);
for(i=0;i<6;i++)
{
write_dat(table1[i]);
}
while(1)
{
static unsigned char i = 0,x,y;
write_com(0xc6 + i);
KeyNum=juxingjianpan();
z=juxingjianpan();
if(KeyNum)
{
if(KeyNum<=10)
{ if(x<=3)
{write_dat(key[KeyNum]);
delay(5);
i++;
}
x++;
}
if(KeyNum==11) //确认键
{
if(KeyNum==password)
{ write_com(0x01);
delay(20);
write_com(0x8a);
for(y=0;y<2;y++)
{write_dat(key2[y]);
delay(5);
}
}
}
}
}
}