单片机之时钟

这篇博客展示了如何使用单片机控制数码管显示时钟。通过设置定时器和中断,程序实现了实时更新小时、分钟和秒的功能,具体代码包括定时器初始化和中断服务子程序。
摘要由CSDN通过智能技术生成

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

代码展示:

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值