单片机 C语言秒表程序 求修改!倒计时结束后又开始计时了怎么停下来?
#define uchar unsigned char
#define uint unsigned int
uchar seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0-9段码
uchar count,time;
sbit start=P3^4;
sbit stop=P3^5;
sbit reset=P3^6;
/*****延时函数*****/
void delay(uchar k)
{
uchar i,j;
for(i=0;i<k;i++)
for(j=0;j<200;j++);
}
void main()
{
TMOD=0x01; //设置为定时器模式1
TH0=0x3c; //晶振6MHz,定时时间100ms
TL0=0xb0;
IE=0x82; //开全局中断和定时中断
time=24;
count=0;
while(1)
{
if(start==0) TR0=1; //启动开关
if(stop==0) TR0=0; //停止开关
if(reset==0) time=24;//复位开关
P2=0xfe; //显示个位
P0=seg[time%10]; //取计时值个位送P0口
delay(2);
P2=0xfd; //显示十位
P0=seg[time/10]; //取计时值十位送P0口
delay(2);
}
}
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==10) //中断10次即1s=10×100ms
{
count=0; //计数次数清0
time--; //计时值减1
if(time==0) time=24; //计时值减到0则回初值
}
} 展开
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0-9段码
uchar count,time;
sbit start=P3^4;
sbit stop=P3^5;
sbit reset=P3^6;
/*****延时函数*****/
void delay(uchar k)
{
uchar i,j;
for(i=0;i<k;i++)
for(j=0;j<200;j++);
}
void main()
{
TMOD=0x01; //设置为定时器模式1
TH0=0x3c; //晶振6MHz,定时时间100ms
TL0=0xb0;
IE=0x82; //开全局中断和定时中断
time=24;
count=0;
while(1)
{
if(start==0) TR0=1; //启动开关
if(stop==0) TR0=0; //停止开关
if(reset==0) time=24;//复位开关
P2=0xfe; //显示个位
P0=seg[time%10]; //取计时值个位送P0口
delay(2);
P2=0xfd; //显示十位
P0=seg[time/10]; //取计时值十位送P0口
delay(2);
}
}
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
count++;
if(count==10) //中断10次即1s=10×100ms
{
count=0; //计数次数清0
time--; //计时值减1
if(time==0)
{
time=24; //计时值减到0则回初值
TR0=0;
}
}
}