两个键,button控制开始暂停,button2将 计时归零。程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段位码
sbit P3_0=P3^0;
sbit P3_1=P3^1;
bit button=0;//开始暂停按键标志
bit button2=0;//计时归零按键标志
bit sacnkey=0;//键盘扫描标志位
uint nsec=0;//计数秒的单位时间
uchar sec=0;//秒位
uchar tsec=0;//十位秒
uchar nscan=0;//计数扫描键盘的单位时间
void delay()
{
uchar i,j;
for(i=0;i<100;i++)for(j=0;j<100;j++);
}
void scan()
{
P3=0xff;
if(P3_0==0)
{
delay();
if(P3_0==0)
button=!button;//改变按键标志位
}
if(P3_1==0)
{
delay();
if(P3_1==0)
button2=1;//改变按键标志位
}
}
void display()
{
P0=table[sec];//P0显示秒
// delay();//延时
P1=table[tsec];//P1显示十秒位
// delay();
}
void time1()interrupt 3
{
TL1=0XB0;
TH1=0X3C;//定时50ms
nsec++;
if(nsec==20)
{
nsec=0;
sec++;
if(sec==10)
{
sec=0;
tsec++;
if(tsec==6)
tsec=0;
}
}
}
void time()interrupt 1
{
TL0=0X18;
TH0=0XFC;
nscan++;
if(nscan==10)
{
scan();
}
}
void main()
{
TMOD=0x11;//,T1工作方式1,T0工作方式1
TL0=0X18;
TH0=0XFC;//T0工作方式1设置初值
TL1=0XB0;
TH1=0X3C;//定时50ms
EA=1;
ET0=1;
ET1=1;
TR0=1;//开中断
while(1)
{
if(button==1)
TR1=1;
else
TR1=0;
if(button2==1)
{
TR1=0;
sec=0;
tsec=0;
}
display();
}
}
|