用定时器实现简单时钟功能

#include <reg52.h>


#define PORTLEN P0


sbit bit_select = P2^0;
sbit seg_select = P2^1;


unsigned char src[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char qrc[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char second1[8];
unsigned char shi = 0;
unsigned char fen = 0;
unsigned char miao = 0;


void timer0_init(void)
{
 EA = 1;
 TMOD |= 0x01;
 TH0 = (65536 - 1000) / 256;
 TL0 = (65536 - 1000) % 256;  //设置定时器T0初值,1ms产生一次中断
 ET0 = 1;   //打开定时器T0中断
 TR0 = 1;   //打开定时器T0,开始每隔1ms加1



void timer1_init(void)
{
 EA = 1;
 TMOD |= 0x10;
 TH1 = (65536 - 1000) / 256;
 TL1 = (65536 - 1000) % 256;//设置定时器T1初值,1ms产生一次中断
 ET1 = 1; //打开定时器T1中断
 TR1 = 1;//打开定时器T1,开始每隔1ms加1
}


void main()
{
        timer0_init();
 imer1_init();
 while(1);
}


void display()//动态显示时钟
{
         static unsigned char i = 0;
 PORTLEN = 0x0;   //消重影
 seg_select = 1;
 seg_select = 0;

 PORTLEN = 0xff;
 bit_select = 1;
 bit_select = 0;

 PORTLEN = second1[i];
 seg_select = 1;
 seg_select = 0;

 PORTLEN = qrc[i];
 bit_select = 1;
 bit_select = 0;
 
 i++;
 if(8 == i)
{
 i = 0;
}

}



void timer0_isr() interrupt 1
{
 static unsigned char i = 0;
          TH0 = (65536 - 20000) / 256;
 TL0 = (65536 - 20000) % 256;   //设置定时器初值,每隔20ms产生一次中断

 i++;
 if(50 == i) //计满1s
  {
 i = 0;
                          miao++;
 if(60 == miao)
  {   
  miao = 0;
           fen++;
   if(60 == fen)
    {
    fen = 0;
    shi++;
    if(24 == shi)
     {
    shi = 0;
      }
   }
}
         }
second1[0] = src[shi / 10];//给数码管各位赋值
second1[1] = src[shi % 10];
second1[2] = 0x40;
second1[3] = src[fen / 10];
second1[4] = src[fen % 10];
second1[5] = 0x40;
second1[6] = src[miao / 10];
second1[7] = src[miao % 10];
}


void timer1_isr() interrupt 3
{
          TH1 = (65536 - 1000) / 256;重新赋初值
 TL1 = (65536 - 1000) % 256;
 display();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值