當前位置:編程學習大全網 - 源碼下載 - 51單片機 4位數碼管可調的定時器C程序編寫,請幫忙給個編程思路或相關程序

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();

}

}

}

  • 上一篇:單元測試的測試工具
  • 下一篇:2020年區塊鏈有哪些好項目?
  • copyright 2024編程學習大全網