要求:按键1功能是开始 停止 ;按键2功能是暂停,为的是能让计数员计数,暂停时间为5秒,5秒之后计时又开始,但时间得加上前面暂停的5秒,
按键3功能清零!我只写出了下面这一段。哪位高手帮改下!!!时间从00.00到99.99.
#include <reg51.h>
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x7f}; //共阳接法数码管0~9对应代码
unsigned char second;
unsigned char tcount ,t;
sbit d1=P0^7;
void delay(unsigned int c);
void main()
{
TMOD=0x01; //定时器0工作在工作方式1下
TH0=0Xd8; //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
TL0=0Xf0; // TL0=(65536-50000)/256
EA=1; //CPU开总中断
ET0=1; //T0开中断
TR0=1; //启动T0
tcount=0;
second=0;
t=0;
while(1) //本段程序功能为显示
{
P0=dispcode[second/10]; //段选,显示十位数字
P2=0X40;
//位选
delay(5); //动态扫描
P0=0xff;
P0=dispcode[second%10]; //段选,显示个位数字
P2=0x80; //位选
delay(5); //动态扫描
P0=0xff;
P0=dispcode[t/10]; //段选,显示十位数字
P2=0X10;
//位选
delay(5); //动态扫描
P0=0xff;
P0=dispcode[t%10]; //段选,显示个位数字
P2=0x20; //位选
d1=0;
delay(5); //动态扫描
P0=0xff;
}
}
void t0() interrupt 1 using 0
{
TH0=0Xd8; //重装50ms初值,TH0=(65536-50000)/256
TL0=0Xf0; // TL0=(65536-50000)/256
tcount++;
if(tcount==1) //是否1S到了的判断。1S=50ms*20
{
tcount=0;
second++; //数码管显示的内容加1
if(second==100) //是否显示到20的判断
{
second=0; //当数码管显示到20后,返回显示0
t++;
if(t==100)
{
second=99;
t=99;
}
}
}
}
void delay(unsigned int c)
{
unsigned int x,y;
for(x=c;x>0;x--)
for(y=110;y>0;y--);
}
|