?? 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 + -