我用网上的程序修改了一个倒计时程序,但是我的单位是秒倒计时的,假如倒计时5分钟时间,我的程序是从300秒开始慢慢倒计时下来的,我现在想把程序修改为“时”“分”“秒”,就像秒表那种,请懂的人给个思路,指点一二,谢谢!
void Timer0(void) //定时器定时50毫秒
{
if(TF0==1)
{
t++;
TH0=0x3C;
TL0=0xB0;
TF0=0;
}
}
void data_tim(void)
{
Timer0();
if (t==20) // 计数20次为1秒
{
a--;
t=0;
if(a==0)
{
a=300;
}
}
}
void data_in(void) // 分离各位数据
{
HG=a/10;
data_G =a%10;
HS=HG/10;
data_S =HG%10;
HB=HS/10;
data_B =HS%10;
HQ=HB/10;
data_Q =HB%10;
void display(void) // 显示
{
P2=0x20;
P0=tab[data_G];
delay(1);
P2=0x10;
P0=tab[data_S];
delay(1);
P2=0x08;
P0=tab[data_B];
delay(1);
P2=0x04;
P0=tab[data_Q];
void main(void)
{
while(1)
{
T0_init();
data_tim();
data_in();
display();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这位大哥帮忙看看,还是不行,我想把“时”“分”“秒”分开,秒表那种,现在还是一秒一秒倒计时的
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long int uint32;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
uint8 tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint32 key,HG,HS,HB,HQ,HW,HSW,HC,counter,hour,min,sec,
hour_H,hour_L,min_H,min_L,sec_H,sec_L,b,c,t;
void delay(uint8 k)
{
uint8 m,n;
for(m=0;m<k;m++)
{
for(n=0;n<120;n++);
}
}
void display_init(void)
{
P2=0xFF;
P0=tab[0];
delay(1);
}
void display(void)
{
P2=0x10;
P0=tab[sec_H];
delay(1);
P2=0x20;
P0=tab[sec_L];
delay(1);
P2=0x04;
P0=tab[min_H];
delay(1);
P2=0x08;
P0=tab[min_L];
delay(1);
P2=0x01;
P0=tab[hour_H];
delay(1);
P2=0x02;
P0=tab[hour_L];
delay(1);
}
void Timer0(void)
{
if(TF0==1)
{
t++;
TH0=0x3C;
TL0=0xB0;
TF0=0;
}
}
void data_init(void)
{
hour=counter/10000;
HC = counter%10000;
min=HC/100;
sec=HC%100;
hour_H=hour/10;
hour_L=hour%10;
min_H = min/10;
min_L = min%10;
sec_H = sec/10;
sec_L = sec%10;
}
void data_tim(void)
{
Timer0();
if (t==20)
{
counter--;
t=0;
if(counter==0)
{
counter=b;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
void data_in(void) //有问题部分,好像没起作用
{
sec--;
if(sec==0)
{
sec=59;
min--;
if(min==0)
{
min=59;
hour--;
if(hour==0)
{
hour=26;////先随便写了个数字
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
void T0_init(void)
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
ET0=0;
TR0=1;
EA=0;
}
void main(void)
{
F0:
counter=b=0;
display_init();
if(key1 == 0)
{
delay(20) ;
if(key1 == 0)
{
key = 1 ;
}
else
{
key = 0;
}
while(key1 == 0) ;
}
if(key2 == 0)
{
delay(20) ;
if(key2 == 0)
{
key = 2;
}
else
{
key = 0;
}
while(key2 == 0) ;
}
if(key3 == 0)
{
delay(20) ;
if(key3 == 0)
{
key = 3;
}
else
{
key = 0;
}
while(key3 == 0) ;
}
switch (key)
{
case 1:counter=b=16;break;
case 2:counter=b=120;break;
case 3:counter=b=654321;break;
default:goto F0;
}
T0_init();
while(1)
{
data_init();
data_tim();
data_in();
display();
}
}
//////////////////END////////////////////
一周热门 更多>