本人想做一个能改分的定时钟,程序如下,问题是秒减正常,但分钟不减,请大师帮我看看问题在哪里,非常感谢。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管 0-9
uchar buffer[]={90,59};
uchar a,b,c;
sbit P2_7=P2^7;
sbit P2_6=P2^6;
sbit P2_5=P2^5;
sbit P2_4=P2^4;
sbit P3_7=P3^7;
sbit P1_3=P1^3;
sbit P2_1=P2^1;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P1_0=P1^0;
void delay(uint x);
void display();
void fuwei();
void init()
{
TH0=0x4c;
TL0=0x00;
TMOD=0X01;
IE=0X82;
TR0=1;
a=20;
b=166;
P2_1=1;
P1_5=1;
P1_4=1;
P1_6=1;
P1_7=1;
P1_0=1;
}
void main()
{
init();
while(1)
{
fuwei();
display();
}
}
timer0() interrupt 1 using 1
{
TH0=0x4c;
TL0=0x00;
b--; //开机延时通电
if(b==0)
{
b=166;
P2_1=0;
}
a--;
if(a==10)
{
P3_7=0;
P1_3=0;
}
if (a==0)
{
a=20;
P3_7=1;
P1_3=1;
buffer[1]--;
if(buffer[1]==0)
{
buffer[1]=59;
buffer[0]--;
if(buffer[0]==0)
{
buffer[0]=90;
TR0=0;
P2_1=1;
}
}
}
}
void display()
{
P0=tab[buffer[0]/10];
P2_4=0;
delay(50);
P2_4=1;
P0=tab[buffer[0]%10];
P2_5=0;
delay(50);
P2_5=1;
P0=tab[buffer[1]/10];
P2_6=0;
delay(50);
P2_6=1;
P0=tab[buffer[1]%10];
P2_7=0;
delay(50);
P2_7=1;
}
void delay(uint x)
{
uint j ,k;
for(x=j;j>0;j--)
for(k=100;k>0;k--);
}
void fuwei()
{
if(P1_5==0)
c++;
{
if(c==5)
c=0;
{
if(c==1)
{buffer[0]=10;TR0=1;P2_1=0;}
else if(c==2)
{buffer[0]=20;TR0=1;P2_1=0;}
else if(c==3)
{buffer[0]=30;TR0=1;P2_1=0;}
else if(c==4)
{buffer[0]=40;TR0=1;P2_1=0;}
}
}
}
此帖出自
小平头技术问答
一周热门 更多>