📄 code.c
字号:
#include <AT89X52.H>
#include <intrins.h>
#include <head.H>
#include <subprogram.H>
void main(void)
{
BEEP=0;
SDA = 1;
SCL = 1;
//fill_byte(0x08);
MCU_Init();
while(1)
{
if(Keyenableflag==1)
{
P1=0xff;
P1_4=0;
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
KeyDelay(); //延时去抖
if (temp!=0x0f)
{
temp=P1;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e: key=1; break;
case 0x0d: key=2; break;
case 0x0b: key=3; break;
case 0x07: key=10; break;
}
efficiencyKey(); // 按键有效提示
if((key>=0) && (key<10)) DealNum(); //数字键的处理
else if(key==11) Rest(); //复位键的处理
else if(key==12) DealDel(); //删除键的处理
else if(key==14) Dealpschange(); //修改密码键输入的处理
else if(key==15) DealENl(); //确定键的处理
else if(key==13) Doorbell(); //门铃按键的处理
ReleaseKey(); //等待键释放
}
}
P1=0xff; //扫描下一行
P1_5=0;
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
KeyDelay(); //延时去抖
if (temp!=0x0f)
{
temp=P1;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e: key=4; break;
case 0x0d: key=5; break;
case 0x0b: key=6; break;
case 0x07: key=11; break;
}
efficiencyKey(); // 按键有效提示
if((key>=0) && (key<10)) DealNum(); //数字键的处理
else if(key==11) Rest(); //复位键的处理
else if(key==12) DealDel(); //删除键的处理
else if(key==14) Dealpschange(); //修改密码键输入的处理
else if(key==15) DealENl(); //确定键的处理
else if(key==13) Doorbell(); //门铃按键的处理
ReleaseKey(); //等待键释放
}
}
P1=0xff;
P1_6=0;
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
KeyDelay(); //延时去抖
if (temp!=0x0f)
{
temp=P1;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e: key=7; break;
case 0x0d: key=8; break;
case 0x0b: key=9; break;
case 0x07: key=12;break;
}
efficiencyKey(); // 按键有效提示
if((key>=0) && (key<10)) DealNum(); //数字键的处理
else if(key==11) Rest(); //复位键的处理
else if(key==12) DealDel(); //删除键的处理
else if(key==14) Dealpschange(); //修改密码键输入的处理
else if(key==15) DealENl(); //确定键的处理
else if(key==13) Doorbell(); //门铃按键的处理
ReleaseKey(); //等待键释放
}
}
P1=0xff;
P1_7=0;
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
KeyDelay(); //延时去抖
if (temp!=0x0f)
{
temp=P1;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e: key=13; break;
case 0x0d: key=0; break;
case 0x0b: key=14; break;
case 0x07: key=15; break;
}
efficiencyKey(); // 按键有效提示
if((key>=0) && (key<10)) DealNum(); //数字键的处理
else if(key==11) Rest(); //复位键的处理
else if(key==12) DealDel(); //删除键的处理
else if(key==14) Dealpschange(); //修改密码键输入的处理
else if(key==15) DealENl(); //确定键的处理
else if(key==13) Doorbell(); //门铃按键的处理
ReleaseKey(); //等待键释放
}
} // end if (temp!=0x0f) 有按键按下
} //end if(Keyenableflag==1)
} // end while(1)
} //end main(void)
void t0(void) interrupt 1 using 0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
flashcount++;
if(flashcount==8)
{
flashcount=0;
clr_wdt(); // 8191个机器周期内必须至少调用此程序一次
// 否则看门狗会溢出
//P0=dispcode[getps[dispcount]];
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8) dispcount=0;
}
if((errorflag==1) && (rightflag==0))
{
Keyenableflag=0; //按键输入无效
bb++;
if(bb==800)
{ bb=0; alarmflag=~alarmflag; }
if(alarmflag==1) BEEP=~BEEP; //sound alarm signal
aa++;
if(aa==800)//light alarm signal
{ aa=0; P3_4=~P3_4; }
second3++;
if(second3==3200)
{
second3=0;
errorflag=0;
rightflag=0;
alarmflag=0;
Keyenableflag=1; //报警结束按键输入有效
bb=0;
aa=0;
}
}
else if((errorflag==0) && (rightflag==1))
{
Keyenableflag=0; //按键输入无效
cc++;
if(cc==800)
{ cc=0; alarmflag=~alarmflag; }
if(alarmflag==1) BEEP=~BEEP; //sound alarm signal
dd++;
if(dd==800)//light alarm signal
{ dd=0; P3_3=~P3_3; }
second3++;
if(second3==12800)
{
second3=0;
errorflag=0;
rightflag=0;
alarmflag=0;
Keyenableflag=1; //报警结束按键输入有效
cc=0;
dd=0;
}
Rest();
}
}
void time1(void) interrupt 3 using 1 //产生10MS精确定时
{ TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
n--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -