📄 text1.c
字号:
#include <AT89X52.H>
unsigned char ppa; // ppa,ppb,ppc是1,2,3数码管显示的内容
unsigned char ppb;
unsigned char ppc;
unsigned char code ps[]={1,1,2};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char funcount; //function key累加数
unsigned char errorflag; //正确标志
unsigned char righitflag; //错误标志
int aa; //一般时扫描
int bb; //报警时的定时
int cc; //开锁时扫描
unsigned char digitcount; //data key累加数
void main(void)
{
unsigned char i,j;
funcount=0;
digitcount=0;
errorflag=0;
righitflag=0;
ppa=0;
ppb=0;
ppc=0;
aa=0;
bb=0;
cc=0;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
ET0=1;
EA=1;
P2_0=0;
P3_0=0;
while(1)
{ if(funcount==0)
{ ppa=digitcount; //data key累加数给ppa
}
if(funcount==1)
{ ppb=digitcount; //data key累加数给ppb
// digitcount=0;
}
if(funcount==2)
{ ppc=digitcount; //data key累加数给ppc
//digitcount=0;
}
if(P3_7==0) //data key
{
for(i=18;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==0)
{for(i=88;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==1)
if(digitcount==9)
{
digitcount=0;
}
else digitcount++; // data key累加
}
}
if(P3_6==0) //function key
{
for(i=18;i>0;i--)
for(j=248;j>0;j--);
if(P3_6==0)
{for(i=88;i>0;i--)
for(j=248;j>0;j--);
if(P3_6==1)
funcount++;
if(funcount==1) //第一次按下
digitcount=0; //data key累加数清0
if(funcount==2) //第二次按下
digitcount=0; //data key累加数清0
if(funcount==3) //第三次按下
{
digitcount=0;
if(ps[0]==ppa&&ps[1]==ppb&&ps[2]==ppc) //对3个数值进行比较
{righitflag=1; //数值正确
errorflag=0; //错误标志清0
}
else
{ righitflag=0 ; //数值错误
errorflag++; //错误标志+1
}
}
}
}
}
}
void t0(void) interrupt 1 using 0
{TH0=(65536-1000)/256; //定时器付初值
TL0=(65536-1000)%256;
if(funcount==0)
{ ppa=digitcount; //data key累加数给ppa
}
if(funcount==1)
{ ppb=digitcount; //data key累加数给ppb
// digitcount=0;
}
if(funcount==2)
{ ppc=digitcount; //data key累加数给ppc
//digitcount=0;
}
if(funcount==3)
{funcount=0;
}
b: if(bb==0) //判断在不在报警
{ P3_0=0; //不再报警 报警器为低电平
if(righitflag==1) //数值正确
{ //显示 OPEN
if(cc==0)
{
P2=0xfe;
P0=dispcode[0];
}
if(cc==1)
{
P2=0xfd;
P0=0x73;
}
if(cc==2)
{
P2=0xfb;
P0=0x79;
}
if(cc==3)
{
P2=0xf7;
P0=0x37;
}
cc++;
if(cc==4)
cc=0;
}
if(errorflag==3) //连续错误输入3次
{errorflag=0; //错误标志清0
P2=0xff; //数码管不显示
P3_0=1; //报警器报警
bb=3000; //延时3秒
goto b;
}
if( righitflag!=1&&errorflag!=3) //除去特殊情况
{if(aa==0)
{
P2=0xfe; //第一个数码管亮其他息灭
P0=dispcode[ppa]; // 显示ppa
}
if(aa==1)
{
P2=0xfd; //第二个数码管亮其他息灭
P0=dispcode[ppb]; // 显示ppb
}
if(aa==2)
{
P2=0xfb; //第三个数码管亮其他息灭
P0=dispcode[ppc]; // 显示ppc
}
aa++;
if(aa==3)
aa=0;
}
}
else
{bb--;
ppa=0;
ppb=0;
ppc=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -