📄 linshi.c
字号:
bit keycmp(void)
{
bit flag;
unsigned char i;
for (i=0;i<4;i++)
{
if (keyword[i]==keyinterim[i])
flag = 1;
else
{
flag = 0;
i = 4;
}
}
return(flag);
}
void Resetkey(void)
{/*r1*/
unsigned char j,key;
int wait1,wait;
int xunhuan0=1; // 定义循环0的控制字符
int xunhuan1=1; // 定义循环1的控制字符
while(xunhuan0)
{/*W11*/
key = keyscan(); // 调用键盘扫描函数
switch(key)
{/*S11*/
case 0x11: // 1行1列,数字7
if (recount<4)
{
font[recount] = 7;
keyinterim[recount] = 7;
recount++;
}
break;
case 0x21: // 1行2列,数字8
if (recount<4)
{
font[recount] = 8;
keyinterim[recount] = 8;
recount++;
}
break;
case 0x41: // 1行3列,数字9
if (recount<4)
{
font[recount] = 9;
keyinterim[recount] = 9;
recount++;
}
break;
case 0x12: // 2行1列,数字4
if (recount<4)
{
font[recount] = 4;
keyinterim[recount] = 4;
recount++;
}
break;
case 0x22: // 2行2列,数字5
if (recount<4)
{
font[recount] = 5;
keyinterim[recount] = 5;
recount++;
}
break;
case 0x42: // 2行3列,数字6
if (recount<4)
{
font[recount] = 6;
keyinterim[recount] = 6;
recount++;
}
break;
case 0x14: // 3行1列,数字1
if (recount<4)
{
font[recount] = 1;
keyinterim[recount] = 1;
recount++;
}
break;
case 0x24: // 3行2列,数字2
if (recount<4)
{
font[recount] = 2;
keyinterim[recount] = 2;
recount++;
}
break;
case 0x44: // 3行3列,数字3
if (recount<4)
{
font[recount]=3;
keyinterim[recount]=3;
recount++;
}
break;
case 0x18: // 4行1列,取消
recount = 0; // 密码计数清零
for (j=0;j<4;j++)
{
font[j] = 15; // 数码管显示----
keyinterim[j] = 15;
}
break;
case 0x28: // 4行2列,数字0
if (recount<4)
{
font[recount]=0;
keyinterim[recount]=0;
recount++;
}
break;
case 0x88: // 4行4列,确认键按下
enter= 1; // 确认键按下
if (recount==4) // 只有输入4个密码后按确认键才作密码比较
keyflag = keycmp();
else
keyflag = 0; // 否则直接pmflag赋0
break;
default:break;
}/*s12*/
Delay(10);
if (enter==1) // 如果按下确认键
{/*F11*/
xunhuan0=0; // 下次不做循环0
enter= 0; // 确认键标志位置回0
recount = 0; // 修改密码位计数器清零
for (j=0;j<4;j++)
{
keyinterim[j] = 0x0f; // 用----清除已经输入的密码
font[j] = 10; // 显示bbbb
}
if (keyflag==1) // 如果密码正确
{/*F21*/
open=0; // 门开
while(xunhuan1)
{/*W21*/
key = keyscan(); // 调用键盘扫描函数
switch(key)
{/*S21*/
case 0x11: // 1行1列,数字7
if (recount<4)
{
font[recount] = 7;
setkey[recount] = 7;
recount++;
}
break;
case 0x21: // 1行2列,数字8
if (recount<4)
{
font[recount] = 8;
setkey[recount] = 8;
recount++;
}
break;
case 0x41: // 1行3列,数字9
if (recount<4)
{
font[recount] = 9;
setkey[recount] = 9;
recount++;
}
break;
case 0x12: // 2行1列,数字4
if (recount<4)
{
font[recount] = 4;
setkey[recount] = 4;
recount++;
}
break;
case 0x22: // 2行2列,数字5
if (recount<4)
{
font[recount] = 5;
setkey[recount] = 5;
recount++;
}
break;
case 0x42: // 2行3列,数字6
if (recount<4)
{
font[recount] = 6;
setkey[recount] = 6;
recount++;
}
break;
case 0x14: // 3行1列,数字1
if (recount<4)
{
font[recount] = 1;
setkey[recount] = 1;
recount++;
}
break;
case 0x24: // 3行2列,数字2
if (recount<4)
{
font[recount] = 2;
setkey[recount] = 2;
recount++;
}
break;
case 0x44: // 3行3列,数字3
if (recount<4)
{
font[recount]=3;
setkey[recount]=3;
recount++;
}
break;
case 0x18: // 4行1列,取消
recount = 0; // 密码计数清零
for (j=0;j<4;j++)
{
font[j] = 15; // 数码管显示----
setkey[j] = 15;
}
break;
case 0x28: // 4行2列,数字0
if (recount<4)
{
font[recount]=0;
setkey[recount]=0;
recount++;
}
break;
case 0x88: // 4行4列
alter=0;
if (recount==4) // 只有输入4个密码后按确认键才作密码比较
{
alter=1;
xunhuan1=0;
}
break;
default:break;
}/*S22*/
Delay(10); // 延时防止重复读取键盘
if(alter==1)
{
alter=0;
Write_I2C(0x00,setkey[0]);
Write_I2C(0x01,setkey[1]);
Write_I2C(0x02,setkey[2]);
Write_I2C(0x03,setkey[3]);
keyword[0]=Read_I2C(0x00);
keyword[1]=Read_I2C(0x01);
keyword[2]=Read_I2C(0x02);
keyword[3]=Read_I2C(0x03);
}
}/*W22*/
}/*F22*/
else
{
buzzer= 1; // 报警器响
for (wait1=1;wait1<9;wait1++)
{for (wait=1;wait<9999;wait++);
}
buzzer=0;
}
}/*F12*/
}/*W12*/
}/*r2*/
void Delay(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--);
}
}
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void NoAck()
{
SDA=1;
SCL=1;
SCL=0;
}
bit TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
void Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
void Write_I2C(unsigned char address,unsigned char ch)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
Delay(10);
}
unsigned char Read8Bit(void)
{
unsigned char rbyte=0,temp;
bit s1;
for(temp=0;temp<8;temp++)
{
SDA=1;
SCL=1;
s1=SDA;
SCL=0;
if(s1==1)
{
rbyte=rbyte<<1;
rbyte=rbyte|0x01;
}
else
rbyte=rbyte<<1;
}
return(rbyte);
}
unsigned char Read_I2C(unsigned char address)
{
unsigned char ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return(ch);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -