51单片机 4位数码管可调的定时器C程序编写,请帮忙给个编程思路或相关程序

工能:四位数码管显示,高两位显示时,低两位显示分钟,中间小数点显示秒的闪动,然后三个按键控制:第一个是定时启动开关;第二个是调时间位设置(当按一下就调第一个数,按第二下就调第二个数````)同时当按到此按键对应的位数数码管就闪动显示,说明是要被调的数;第三个按键是加数按键

#include<reg51.h>

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9

unsigned char sec=0,min=0,hour=12,scanled;

unsigned char key,flashbit,dot,time,times=0;tflash; 

unsigned char disdat[4];


sbit keyqt=P3^0;

sbit keyxz=P3^1;

sbit keytz=P3^2;


void dischg()

{

disdat[0]=min%10;

disdat[1]=min/10;

disdat[2]=hour%10;

disdat[3]=hour/10;

}

void t0isr() interrupt 1 //秒计时

{

TR0=0;

TH0=0x3c;

TL0=0xb0;

TR0=1;

time++;

if(time<10)dot=0;

else dot=1;

if(time==20)

{

time=0;

sec++;

if(sec>59)

{

sec=0;

min++;

if(min>59)

{

hour++;

if(hour>23)hour=0;

}

}

}

dischg();

}

void t1isr() interrupt 3 //显示

{

TR1=0;

TH1=0xec;

TL1=0x78;

TR1=1;

times++;

if(times>=50){times=0;tflash=~tflash;}

switch(scanled)

{

case 0:

P2=0x01;

P0=~ledtab[disdat[3]];

if((tflash==0)&&(flashbit==1))P0=~ledtab[0x10];

break;

case 1:

P2=0x02;

if(dot)P0=~(ledtab[disdat[2]]|0x80);

else P0=~ledtab[disdat[2]];

if((tflash==0)&&(flashbit==1))P0=~ledtab[0x10];

break;

case 2:

P2=0x04;

P0=~ledtab[disdat[1]];

if((tflash==0)&&(flashbit==2))P0=~ledtab[0x10];

break;

case 3:

P2=0x08;

P0=~ledtab[disdat[0]];

if((tflash==0)&&(flashbit==2))P0=~ledtab[0x10];

break;

default:break;

}

scanled++;

scanled%=4;

}

main()

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=0xec;

TL1=0x78;

EA=1;

TR1=1;

ET0=1;

ET1=1;

sec=0;

min=0;

hour=0;

flashbit=0;

scanled=0;

time=0;

tflash=0;

dot=1;

dischg();

while(1)

{

// flash();//闪烁

if(keyqt==0) //p3.0启停

{

while(keyqt==0);

TR0=~TR0;

flashbit=0;

}

if(keyxz==0) //p3.1选择调时、分

{

while(keyxz==0);

TR0=0;

flashbit++;

if(flashbit>2){flashbit=0;TR0=1;}

}

if(keytz==0) //调数

{

while(keytz==0);

if(flashbit==1)

{

hour++;

if(hour>23)hour=0;

}

if(flashbit==2)

{

min++;

if(min>59)min=0;

}

dischg();

}

}

}

追问

程序可麻烦帮我多加些注析,我照图运行了一下程序没反应

追答

你按最上面一个键启动

中间一个选择调时间的时或者分

下面一个键调整数值。


温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-16
闪动 也是用定时器 来设定, 亮一会又灭一小会, 再亮,再灭,……追问

不懂吖

第2个回答  2014-06-16
用定时器中断刷数码管就可以了啊追问

小数点闪动和当进入调时的时候,要闪动对应的数码管,这我不知道怎么写

追答

...