完整程序如下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
bit FLAG0=0;
char ptr=0;
char a1=0,b1=100,stand=0,m=0;
sbit PD=P2^6;
bit FLAG1=0; //输入密码已有四位(SET键)允许?
bit FLAG7=0; //四秒定时标志位
uchar F1=0; //系统状态标志位
uchar F2=0; //待机状态选择标志位
uint key4=0; //4秒定时设置
uchar Z=0; /*输入计数变量*/
uchar X=0; /*改密码设置计数标志*/
static const char tab[4]={0x02,0x02,0x02,0x02};
static const char tab1[4]={0x02,0x02,0x02,0x02};
uchar keyscan(void);
uchar keyman0(void);
void main(void)
{
P1=0xff;
while(1)
{
keyscan();
text=ptr;
}
}
uchar keyscan(void) //扫描键盘输出键值子程序
{
uchar a1,i,m,K=0;
if(FLAG0==0)
{
P1=0x70;
if((P1&0x70)!=0x70)
{
FLAG0=1;
}
return(0);
}
if(FLAG0==1)
{
P1=0x70;
if((P1&0x70)!=0x70)
{
a1=0x7e;
for(i=0;i <4;i++)
{
P1=a1;
m=P1;
switch(m&0x70)
{
case 0x60: ptr=i*3;
K=1;
break;
case 0x50: ptr=i*3+1;
K=1;
break;
case 0x30: ptr=i*3+2;
K=1;
break;
default: break;
}
if(K==1)break;
a1=a1 < <1|0x71;
}
FLAG0=0;
return(1);
}
}
}
uchar keyman0(void)
{
if((ptr==0)&&(FLAG7==1))
{
if(key4> 1)
{
key4=key4--;
}
else
FLAG7=0;
return (0);
}
if(ptr!=0)
{
return (0);
}
return(0);
}
发表时间:2004年3月25日14:43:52