定时器与时钟

关于定时器的相关知识在我看来主要是定时器的参数设置,然后在定时器中断函数中完成相关的功能6290ad095194408cb2aa3af0d28cbba2.png

上图是关于定时器初始化函数和中断函数,中断函数可以设置函数调用的间隔。以下是我设计的定时器时钟代码

 Timer0.c

#include <REGX52.H>

/**
  *@brief ¶¨Ê±Æ÷0³õʼ»¯£¬1ºÁÃë
  *@param ÎÞ
  *@retval ÎÞ
  */
void Timer0_Init()        
{
    TMOD &= 0xF0;    
    TMOD |= 0x01;    
    TL0 = 0x18;        
    TH0 = 0xFC;        
    TF0 = 0;        
    TR0 = 1;    
    ET0=1;
    EA=1;
    PT0=0;
    
}
/*¶¨Ê±Æ÷ÖжÏÄ£°åº¯Êý
void Time0_Routine() interrupt 1
{
    static unsigned int T0Count;
    TL0 = 0x18;        
    TH0 = 0xFC;    
    T0Count++;
    if(T0Count>=1000)
    {
        T0Count=0;
    }
}
*/

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"
#include "LCD1602.h"

unsigned char Sec=59,Min=59,Hour=23;
void main()
{
    LCD_Init();
    LCD_ShowString(1,1,"Clock:");
    LCD_ShowString(2,3,":");
    LCD_ShowString(2,6,":");
    Timer0_Init();
    while(1)
    {
        LCD_ShowNum(2,1,Hour,2);
        
        LCD_ShowNum(2,4,Min,2);
        
        LCD_ShowNum(2,7,Sec,2);
    }

}

void Time0_Routine() interrupt 1
{
    static unsigned int T0Count;
    TL0 = 0x18;        
    TH0 = 0xFC;    
    T0Count++;
    if(T0Count>=1000)
    {
        T0Count=0;
        Sec++;
        if(Sec>=60)
        {
            Sec=0;
            Min++;
            if(Min>=60)
            {
                Min=0;
                Hour++;
                if(Hour>=24)
                {
                    Hour=0;
                    
                }
            }
        }
        
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值