static unsigned char i = 0;
这个静态变量只能初始化一次记录位置在我的仿真里面是c6+i来改变1602显示的位置,但是清除不掉标志位应该要怎么写好?
#include<reg51.h>
#include<string.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,0xbb,0x7b}; //键值
char key2[]="OK";
char key3[]="error";
char table[]="password";
char table1[]="input:";
char passwordInput[4];
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;
case 0x7b: KeyNumber=12;break;
}
return KeyNumber;
}
void main() {
unsigned int i, KeyNum, passwordLen = 0;
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 = 0, y;
write_com(0xc6 + i);
KeyNum = juxingjianpan();
if(KeyNum)
{
if(KeyNum <= 10)
{
if(x <= 3)
{
write_dat(key[KeyNum]);
delay(5);
passwordInput[passwordLen++] = key[KeyNum];
i++;
}
x++;
}
else if(KeyNum == 11) // 确认键
{
if (strcmp(passwordInput, "1234") == 0)
{
write_com(0x01);
delay(20);
write_com(0x8a);
for(y = 0; y < 2; y++)
{
write_dat(key2[y]);
delay(5);
}
}
else
{
write_com(0x01);
delay(20);
write_com(0x8a);
for(y = 0; y < 5; y++)
{
write_dat(key3[y]);
delay(5);
}
}
memset(passwordInput, 0, sizeof(passwordInput));
passwordLen = 0;
x = 0;
i=0;
}
else if (KeyNum == 12)
{
memset(passwordInput, 0, sizeof(passwordInput));
passwordLen = 0;
x = 0;
i=0;
write_com(0x01);
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]);
}
}
}
}
}