📄 key.c
字号:
#include "AT89X52.H"
#define uchar unsigned char
#define uint unsigned int
void delay(uint delay) //延时
{
uint i;
for(;delay>0;delay--)
{
for(i=0;i<124;i++)
{;}
}
}
uchar key1 () //读数
{
uchar fhz,j=0;
do
{
P3=0X7F;
if (P3!=0x7f) break;
P3=0XbF;
if (P3!=0xbf) break;
P3=0XEF;
if (P3!=0xEf) break;P3=0XdF;
if (P3!=0xdf) break;
}
while (0);
switch(P3)
{
case 0x77:fhz=7;break;
case 0x7b:fhz=8;break;
case 0x7d:fhz=9;break;
case 0x7e:fhz='j';break; //减
case 0xb7:fhz=4;break;
case 0xbb:fhz=5;break;
case 0xbd:fhz=6;break;
case 0xbe:fhz='c';break; //乘
case 0xd7:fhz=1;break;
case 0xdb:fhz=2;break;
case 0xdd:fhz=3;break;
case 0xde:fhz='s';break; //减
case 0xe7:fhz='o';break; //on
case 0xeb:fhz=0;break;
case 0xed:fhz='d';break; //等于
case 0xee:fhz='a';break; //add
default : fhz=0xff;break; //没键按下时
}
return (fhz);
}
//*******检查按键,消抖***************//
uchar key2()
{
uchar key;
do //按下前先检查是否放开前面的按键
{
key=key1();
delay(30);
}
while((key!=key1())||(key!=0xff)) ;
do //预读,看按键是否按下或是否有错,
{ //消抖
key=key1();
delay(30);
}
while((key!=key1())||(key==0xff));
}
/**************************************************
放开键盘后再读数**************************************/
uchar key()
{
uchar i,j;
i=j=key1();
while(i!=0xff)
i=key1();
return(j);
}
/**********************
三个键的密码*************
*********************************/
uint sanjian()
//void main()
{
uchar i,j=1;
do
{
i=key();
if(i==7)
{ //第一级
do
{
P1=3;
i=key();
}
while(i==0xff);
if(i==8)
{ //第二级
do
{
P1=4;
i=key();
}
while(i==0xff);
if(i==9)
{
j=1;
break;
//return(789);
}
else {j=0;break;}
} //第二级
else {j=0;break;}
} //第一级
else {j=0;break;}
}
while(1);
if (j==0) return (0);
if (j==1) return (789);
}
uint sanjian1()
//void main()
{
uchar i,j=1;
do
{
i=key();
if(i==4)
{ //第一级
do
{
P1=0x45;
i=key();
}
while(i==0xff);
if(i==5)
{ //第二级
do
{
P1=0x67;
i=key();
}
while(i==0xff);
if(i==6)
{
P1=0X11;
j=1;
break;
//return(789);
}
else {j=0;break;}
} //第二级
else {j=0;break;}
} //第一级
else {j=0;break;}
}
while(1);
if (j==0) return (0);
if (j==1) return (456);
}
void main()
{
int i,j,k,q;
q=key();
// if(q!=0xff)
//{
do
{
j=key();
i=sanjian();
k=sanjian1();
if(i==789)
while(j==0xff)
{
j=key();
P1=1;
}
else
P1=0xee;
if(k==456)
while(j==0xff)
{
j=key();
P1=1;
}
// else
// P1=0x89;
}
while(1);
//}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -