【51单片机】定时器的简单应用——计时器

一、定时器

stc89c52 具有三个定时器 (T0 T1 T2)

(1)T0、T1均有四种模式

        

         最常用模式1

 (2)定时器模式1工作框图

SYSclk(系统时钟) 这里指开发板上的晶振评率

定时器和计数器部分不再赘述,可以靠工具生成。

(3)中断程序

 详细参考开发手册

二、计时器程序展示

【主函数】

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

unsigned int hour=0,min=0,sec=0;		//对时分秒进行定义和赋值
unsigned int Timer0Count=0;					//定时器设定为没10毫秒打断一次,当目的是每1秒钟让秒数加一,就让定时器打断100次,总时长为1秒,而这个变量就是用来计定时器打断的次数。
void main()
{
	Timer0Init();											//定时器初始化
	LCD_Init();												//显示器初始化
	LCD_ShowString(1,1,"Clock");			//显示器显示常亮内容
	LCD_ShowString(2,1,"  :  :");			//同上
	while(1)													//在显示器上不停地刷新时分秒的数值
	{	
		LCD_ShowNum(2,1,hour,2);
		LCD_ShowNum(2,4,min,2);
		LCD_ShowNum(2,7,sec,2);
	}
}

void Timer0Routine() interrupt 1		//中断
{
	TL0 = 0x00;												//设置定时初值,让定时器重新开始计时			
	TH0 = 0xDC;												//设置定时初值【注意:这里的定时初值要与函数Timer0Init内的初值一样】
	Timer0Count++;										//每10ms打断一次,计数器加1
	if(Timer0Count>=100)							//当计数器到100,即经过1秒后让秒加一,然后时分做出响应变化
	{
		Timer0Count=0;
		sec++;
		if(sec>=60)
			{
				min++;
				sec=0;
				if(min>=60)
				{
					hour++;
					min=0;
					if(hour>=24)
					{
						hour=0;
					}
				}
			}
		}
	}

【定时器初始化函数】

#include <REGX52.H>
void Timer0Init(void)		//10毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0xDC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;        //中断初始化【程序生成的函数内没有这个】
	EA=1;					//中断初始化
	PT0=0;				//中断初始化
}


//主函数中断示例
//void Timer0Routine() interrupt 1		//中断
//{
//	TL0 = 0x00;												//设置定时初值,让定时器重新开始计时			
//	TH0 = 0xDC;												//设置定时初值【注意:这里的定时初值要与函数Timer0Init内的初值一样】
//	Timer0Count++;										//每10ms打断一次,计数器加1
//	if(Timer0Count>=100)							//当计数器到100,即经过1秒后让秒加一,然后时分做出响应变化
//	{
//				
//	
//	}

【LCD1602驱动函数】

 详见前一篇文章

(三)最终成品

  • 4
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Collin Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值