|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit S1=P2^0;
sbit S2=P2^1;
sbit S3=P2^2;
sbit S4=P2^3; //位定义P2.3口
sbit S5=P2^4; // 位定义P2.4口
sbit S6=P2^5; //位P2.5口
sbit Key1=P3^7; //定义P3.7口为按键口
uchar code duan_N[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管故低高电平导通,显示断码,不带小数点
uchar Key1Times=0; //定义按键被按下次数
uint M=0; //定义计时次数
void delay(uint); //定义延时函数
void display(uint miao); //定义显示函数
void main()
{ //设置INT1s
IT1=1; //跳沿触发方式,负跳变
EX1=0; //关闭INT1中断容许,EX为外部中断1允许位 ,1—允许外部中断1中断,0-禁止外部中断1中断ss
EA=1; //打开总中断, S
while(1)
{
if(Key1==0) //当有按键被按下时
{
delay(10); //去抖
while(Key1==0); //再次检查按键是否被按下
Key1Times++; //记录按键次数+1
}
if(Key1Times==1){EX1=1;} //按键第一次按下,允许中断。
if(Key1Times==2){EX1=0;} //按键第二次按下,禁止中断
if(Key1Times==3){Key1Times=0;M=0;} //第三次按下,均清零
display(M); //调用自定义display函数,使数码管显示数字
}
}
void delay(uint xms) //延时函数
{
int i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--); //这里用了for语句的嵌套,用来增加延时时间
}
void display(uint miao) //定义一个显示函数
{
uchar baimiao,shimiao,yimiao;
baimiao=miao/100; //定义数码管百位
shimiao=miao/10%10; //十位
yimiao=miao%10; //个位
S1=0;
P0=0x66;
delay(1);
S1=1;
S2=0;
P0=0x4F;
delay(1);
S2=1;
S3=0;
P0=0x5B;
delay(1);
S3=1;
S4=0; //选择第四位数码管
P0=duan_N[baimiao]; //调用数组选择百位的数
delay(1); //延时
S4=1; //释放第四位数码管
S5=0; //选择第五位数码管
P0=duan_N[shimiao]; //调用数组选择十位的数
delay(1); //延时
S5=1; //释放第五位数码管
S6=0; //选择第六位数码管
P0=duan_N[yimiao]; //调用数组选择个位的数
delay(1); //延时
S6=1; //释放第六位数码管
}
void Int1()interrupt 2 //定义中断函数,中断源为外部中断1 ,将中断函数定义为void,以明确说明其没有返回值
{
M++;
if(M==1000)
{
M=999;
}
} //结束返回主函数 while(1)循环
|
评分
-
查看全部评分
|