单片机之时钟

袁亦
2023-12-01

用单片机控制数码管实现时钟功能

代码展示:

#include <reg52.h>

#define SEGPORT P0

sbit dula=P1^1;

sbit wela=P1^0;


unsigned char code wei_table[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char  tempdata[8];

unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char shi = 12,fen = 0,miao = 0;

 

void display_seg()

{

static unsigned char i = 0;

  

SEGPORT=0xff;

wela = 1;

wela = 0;

    

SEGPORT =0x0;

dula = 1;

dula = 0;

 

       SEGPORT=wei_table[i];

wela = 1;

wela = 0;


SEGPORT = tempdata[i];  

dula = 1;

dula = 0;

i++;

if(8 == i)

{

i = 0;

}

}

 

void timer0_init()

{

EA = 1;

TMOD = 0x01;

TH0 = (65536 - 2000)/256;

TL0 = (65536 - 2000)%256;

ET0 = 1;

TR0 = 1;     

}

void timer1_init()

{

EA = 1;

TMOD = TMOD + 0x10;

TH1 = (65536 - 20000)/256;

TL1 = (65536 - 20000)%256;

ET1 = 1;

TR1 = 1;   

}    

void  timer0_isr() interrupt 1

{

TH0 = (65536 - 2000)/256;

TL0 = (65536 - 2000)%256;

display_seg();

}

void  timer1_isr() interrupt 3

{

 

static unsigned char t = 0;

TH1 = (65536 - 20000)/256;

TL1 = (65536 - 20000)%256;

t++;

if(50 == t)

{

t = 0;

miao++;

if(60 == miao)

{

miao = 0;

fen++;

if(60 == fen)

{

fen = 0;

shi++;

if(24 == shi)

{

shi = 0;

}

}

}

}

tempdata[0] = table[shi/10];

tempdata[1] = table[shi%10];

tempdata[2] = 0x40;

tempdata[3] = table[fen/10];

tempdata[4] = table[fen%10];

tempdata[5] = 0x40;

tempdata[6] = table[miao/10];

tempdata[7] = table[miao%10];

}

 

void main()

{

   timer0_init();

   timer1_init();

   while(1);

}


 类似资料: