當前位置:編程學習大全網 - 編程語言 - 51單片機數碼管倒計時程序,從999999開始倒計時,用定時器T1的中斷完成

51單片機數碼管倒計時程序,從999999開始倒計時,用定時器T1的中斷完成

#include<reg51.h>

#define uchar unsigned char

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

uchar sec=0,min=0,hour;

uchar time;

uchar disdat[6];

void delay(unsigned int x)

{

unsigned int i,j;

for(i=0;i<x;i++)

for(j=0;j<120;j++);

}

void dischg()

{

disdat[0]=sec%10;

disdat[1]=sec/10;

disdat[2]=min%10;

disdat[3]=min/10;

disdat[4]=hour%10;

disdat[5]=hour/10;

}

void t0isr() interrupt 1 //秒計時

{

TH0=0x3c;

TL0=0xb0;

time++;

if(time==20)

{

time=0;

if(sec>0)sec--;

else if(min>0){sec=99;min--;}

else if(hour>0){sec=99;min=99;hour--;}

}

dischg();

}

void t1isr() interrupt 3 //顯示

{

TH1=0xec;

TL1=0x78;

switch(scanled)

{

case 0:

P2=0x20;

P0=~ledtab[disdat[5]];

break;

case 1:

P2=0x10;

P0=~ledtab[disdat[4]];

break;

case 2:

P2=0x08;

P0=~ledtab[disdat[3]];

break;

case 3:

P2=0x04;

P0=~ledtab[disdat[2]];

break;

case 4:

P2=0x02;

P0=~ledtab[disdat[1]];

break;

case 5:

P2=0x01;

P0=~ledtab[disdat[0]];

break;

default:break;

}

scanled++;

scanled%=6;

}

main()

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=0xec;

TL1=0x78;

TR1=1;

TR0=0;

ET0=1;

ET1=1;

EA=1;

fmq=0;

scanled=0;

time=0;

mode=1;

dischg();

while(1)

{

if(keyhu==0)

{

while(keyhu==0);

TR0=0;

hour++;

hour%=24;

}

if(keyhd==0)

{

while(keyhd==0);

TR0=0;

if(hour>0)hour--;

if(hour==0)hour=23;

}

if(keymu==0)

{

while(keymu==0);

TR0=0;

min++;

min%=60;

}

if(keymd==0)

{

while(keymd==0);

TR0=0;

if(min>0)min--;

if(min==0)min=59;

}

if(keysu==0)

{

while(keysu==0);

TR0=0;

sec++;

sec%=60;

}

if(keysd==0)

{

while(keysd==0);

TR0=0;

if(sec>0)sec--;

if(sec==0)sec=59;

}

if(keyst==0)

{

while(keyst==0);

TR0=~TR0;

}

dischg();

}

}

  • 上一篇:j2me編程高手看看
  • 下一篇:DIY積木世界,創意設計師傾心的影馳DDR5內存
  • copyright 2024編程學習大全網