后來修改成這個樣子,但還是兩個同時計時,而且按下按鍵1不可以從0開始,而是從1開始,而且為什么從一到二需要的時間比二到三時間更多
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //段碼
uchar code seg_scan[]={10,10,10,10};//位選碼
uchar seg_buf[2]={0x01,0x02};//數碼管顯示緩沖區
void t0();//t0初始化
void ex();//外部中斷初始化
void display(uchar date,uchar get);//數碼管顯示函數
void delayme(uint xms);//延時函數
uchar a=0,count=0;
uchar flags=0;//定時標志
void main()
{ t0();
ex();
while(1)
{if(flags==0)
{
flags=1;
a++;
if(a>=60)
{
a=0;
}
seg_buf[0]=seg[a%10]; //低位
seg_buf[1]=seg[a/10]; //高位
}
}
}
void display(uchar date,uchar get)
{ P2 = (P2&0x1f)|0xc0;
P0=0X01<<get;
P2 = (P2&0x1f)|0xf9;
P0=date;
}
void t0()
{ TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1; //打開t0中斷開關
PT0=0;
EA=1; //打開中斷總開關
}
void ex()
{ IT0=1;
EX0=1;
PX0=1;
IT1=1;
EX1=1;
PX1=1;
EA=1;
}
void t0_int() interrupt 1
{ uchar i=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count>=20)
{count=0;
flags=0;
}
P0=0XFF;
switch(i)
{ case 0:i++;display(seg_buf[0],1);break;
case 1:i++;display(seg_buf[1],0);break;
default:break;
}
}
void key1()interrupt 0
{
TR0=1;//啟動t0
a=0x00;
IE0=0;//清int0中斷標志位
}
void key2()interrupt 2
{
TR0=0;//啟動t0
IE1=0;//清int1中斷標志位
}
|