1、/***************************
利用外部中断0 和 定时器0 来计算一分钟 脉冲数
交流 QQ: 357076835
***************************/
#include
#include
int N=0,m=0,p;
unsigned char code dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned int led[3];
sbit LS1
2、38A = P2^2; //定义138译码器的输入A脚由P2.2控制
sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制
sbit LS138C = P2^4; //定义138译码器的输入脚C由
/****************************/
void coun() //初始化设置
{
TMOD=0x01;
TH0=0x4c;TL0=0x00;//定义50ms
TR0=1;
IT0=1;
EX0=1;
ET0=1;
3、 EA=1;
}
void delay(int z) //延时函数
{
unsigned char x,y;
for(x=0;x<50;x++)
for(y=z;y>0;y--) ;
}
void display() //显示函数 138译码器显示
{ char i;
p=N;
led[0]=dat[p/100];
led[1]=dat[p%100/10];
led[2]=dat[p%10];
for( i=0; i<3; i++) //实现
4、8位动态扫描循环
{
P0 = led[i]; //将字模送到P0口显示
switch(i) //使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
5、 case 2:LS138A=0; LS138B=1; LS138C=0; break;
}
delay(10);
}
}
/*************主函数***************/
void main()
{
// delay(50);
coun();
while(1)
{
if(m>=1200) 达到一分钟之后 关闭外部中断0
EX0=0;
display();
}
}
/*************中断函数***************/
void int0() interrupt 0 using 1
{
EX0=0;
N++;
EX0=1;
}
void int1() interrupt 1 using 2
{
TH0=0x4c;TL0=0x00;
m++;
}