📄 test_int0.c
字号:
#include<reg52.h>
#include <absacc.h>
#define DPTR XBYTE[0X6000]
unsigned char DISPBUF1,DISPBUF2,DISPBUF3,DISPBUF4,TIME1S_count,countn0,TIME0_5S_count;
unsigned char bufth0,buftl0,bufn0,n0,BUFTH1,BUFTL1,BUFn1,n1;
unsigned char keynum;
bit flag_KHz,flag1s,flag_countT0,flag_over0,flag_over1,flag0_5s,flag_open0;
void mDelay(unsigned int Delay);
void display(void);
unsigned char keyscan(void);
void readkey(unsigned char date);
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_7=P3^7;
////////////////////////////
void int00() interrupt 0 using 0
{
// P3_7=~P3_7;
TR1=1;
bufth0=TH0;buftl0=TL0;bufn0=n0;
TH0=0;TL0=0;n0=0;
flag_over0=1;
}
void int11() interrupt 2 using 2
{ TR1=0;
BUFTH1=TH1;BUFTL1=TL1;BUFn1=n1;
TH1=0;TL1=0;n1=0;
flag_over1=1;
}
void time0() interrupt 1 using 1
{n0++;countn0++;}
void time1() interrupt 3 using 3
{n1++;}
void time2() interrupt 5 using 3
{
TF2=0;
if(flag_countT0)
{ TIME1S_count++;
if(TIME1S_count==170)
{TR0=0;TIME1S_count=0;flag1s=1;}
display();
}
else
{ TIME0_5S_count++;
if(TIME0_5S_count==80)
{TIME0_5S_count=0;flag0_5s=1;}
}
}
main()
{ unsigned long TMPA,P0,P1=0;
float f,p;
TMOD=0X19;//T0设置为门控定时方式1,T1为定时方式1
ET0=1;
EX0=1;
IT0=1;//外部中断为边沿触发
TR0=1;//开始定时
TH0=0;
TL0=0;
RCAP2H=0xe8;
RCAP2L=0xef;//T2的定时初值,用于数码管扫描与1s时间的产生
ET2=1;
TR2=1;
ET1=1;
EX1=1;
IT1=1;//外部中断为边沿触发
TH1=0;
TL1=0;
EA=1;
flag_KHz=0;
P3_3=1;
P3_2=1;
keynum=1;
while(1)
{
while((keynum==1)&&flag_KHz)
{ readkey(keyscan());
flag_countT0=1;
if(flag1s==1)
{
flag1s=0;
f=TH0*256+TL0+65536*countn0;
if(f>=100000)
{f=f/1000;flag_KHz=1;}
else if(f>=10000)
{f=f/100;flag_KHz=1;}
else if(f>=1000)
{f=f/10;flag_KHz=1;}
else {flag_KHz=0;}
TMPA=(unsigned long)(f*10);
DISPBUF1=TMPA/1000;
DISPBUF2=TMPA%1000/100;
DISPBUF3=TMPA%100/10;
DISPBUF4=TMPA%10;
TIME1S_count=0;
countn0=0;
TH0=0;
TL0=0;
TR0=1;
display();
}
if(!flag_KHz|(keynum>1))
{EX0=1;TMOD=0X09;}
}
while(!flag_KHz)
{ readkey(keyscan());
flag_countT0=0;
if(flag0_5s==1)
{
/*if(!flag_open0)
{EX0=1;flag_over0=0;EX1=1;flag_over1=0;flag_open0=1;}
if(flag_over1)
{EX0=0;EX1=0;flag_open0=0;} */
/* if(flag_open0&flag_over1)
{EX0=0;EX1=0;flag_open0=0;}
else
{EX0=1;EX1=1;flag_open0=1;} */
if(flag_over0)
{ P0=bufth0*256+buftl0+65536*bufn0+5;
if(keynum==1)
{ display();
f=5000000./P0;
if(f<10000)
{flag_KHz=0;}
else if(f<15000)
{f=f/10;flag_KHz=0;}
else if(f<100000)
{f=f/10;flag_KHz=1;}
else if(f<1000000)
{f=f/100;flag_KHz=1;}
else
{f=f/1000;flag_KHz=1;}
TMPA=(unsigned long)f;
DISPBUF1=TMPA/1000;
DISPBUF2=TMPA%1000/100;
DISPBUF3=TMPA%100/10;
DISPBUF4=TMPA%10;
}
flag_over0=0;
}
else
{TH0=0;TL0=0;n0=0;TR0=1;EX0=1;}
if(keynum>1)
if(flag_over1)
{
flag_over1=0;
P1=BUFTH1*256+BUFTL1+BUFn1*65536;
p=P1*1800/P0;
TMPA=(unsigned long)p;
DISPBUF1=TMPA/1000;
DISPBUF2=TMPA%1000/100;
DISPBUF3=TMPA%100/10;
DISPBUF4=TMPA%10;
}
TIME0_5S_count=0;
flag0_5s=0;
}
display();
if(keynum==1)
if(flag_KHz)
{flag1s=0;EX0=0;TMOD=0X15;}
}
}
}
//////////////////////////////////////
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
/////////////////////////////////////
void display(void)
{
DPTR=(DISPBUF1|0X70);
mDelay(1);
DPTR=(DISPBUF2|0Xb0);
mDelay(1);
DPTR=(DISPBUF3|0Xd0);
mDelay(1);
DPTR=(DISPBUF4|0Xe0);
mDelay(1);
DPTR=0Xf0;
mDelay(1);
}
unsigned char keyscan(void)
{ unsigned char test,tmp;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{ mDelay(1);
if((P1&0xf0)!=0xf0)
{ test=0xfe;
while((test&0x10)!=0)
{ P1=test;
if((P1&0xf0)!=0xf0)
{ tmp=(P1&0xf0)|0x0f;
return(~(test)+~(tmp));
}
else test=(test<<1)|0x01;
}
}
}
return(0);
}
void readkey(unsigned char date)
{ switch(date)
{ case 0X11: keynum=1;break;
case 0X21: keynum=2;break;
case 0X41: keynum=3;break;
case 0X81: keynum=4;break;
case 0X12: keynum=5;break;
case 0X22: keynum=6;break;
case 0X42: keynum=7;break;
case 0x82: keynum=8;break;
case 0x14: keynum=9;break;
case 0x24: keynum=10;break;
case 0x44: keynum=11;break;
case 0x84: keynum=12;break;
case 0x18: keynum=13;break;
case 0x28: keynum=14;break;
case 0x48: keynum=15;break;
case 0x88: keynum=16;break;
// case 0x00: keynum=0;break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -