当前位置: 首页 > ops >正文

【Proteus仿真】定时器控制系列仿真——秒表计数/数码管显示时间

目录

0案例视频效果展示

0.1例子1:基于AT89C51单片机的定时器计数器

0.2例子1:基于AT89C51单片机的定时器控制数码管显示时间

1基础知识补充

1.1 AT89C52的3个定时器

1.2定时器在单片机里的 4 大作用

1.3 四种工作方式(T0/T1)

1.4使用步骤(以T0方式12 MHz 晶振产生 1 ms 中断为例)

1.4.1 算初值计算

1.4.2 寄存器配置

2例子1:基于AT89C51单片机的定时器计数器

2.1电路原理图

2.1.1电路组成及接线

2.2控制程序

2.2.1控制程序步骤

2.2.3源代码

3例子2:基于AT89C51单片机的定时器控制数码管显示时间

3.1电路原理图

3.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.3源代码

  4 硬件工程师笔试面试相关文章链接(部分链接)


摘要:本文介绍了基于AT89C51单片机的定时器应用实例和基础知识。主要内容包括:1)AT89C52的3个定时器及其4大作用;2)定时器的4种工作方式及使用步骤;3)两个具体案例:案例1实现0-99999.9秒数码管计时显示,案例2实现8位数码管分时显示年月日和时分秒;4)详细电路原理图和控制程序设计。文章还补充了频率单位、机器周期等基础知识,并提供了硬件工程师笔试面试相关资源链接。这些内容为单片机定时器应用开发提供了实用参考。

0案例视频效果展示

0.1例子1:基于AT89C51单片机的定时器计数器

例子34:基于AT89C51单片机的定时器计数器

0.2例子1:基于AT89C51单片机的定时器控制数码管显示时间

例子35:基于AT89C51单片机的定时器控制数码管显示

1基础知识补充

频率单位:赫兹(Hz)

1赫兹(Hz):每秒1                    周期:1s

1千赫兹(Hz):每秒1000               周期:1ms

1兆赫兹(Hz):每秒1000000            周期:1us

1吉兹(Hz):每秒1000000000           周期:1ns

机器周期(Machine Cycle)是 8051 单片机 执行一条指令的基本时间单位。理解它对于计算延时、定时器初值、波特率等都非常关键。

总结:

8051 的机器周期 = 12 × 时钟周期
12MHz 晶振下,1 机器周期 = 1μs

1.1 AT89C52的3个定时器

3个16位可编程定时/计数器:T0、T1、T2

T0、T1:标准 8051 兼容(方式 0~3)

T2:8052 专有,功能更强(可 16 位自动重装、捕获、波特率发生等)

1.2定时器在单片机里的 4 大作用

产生精确定时(1 ms、10 ms、1 s……)

对外部脉冲计数(T0/T1 脚当计数输入)

生成波特率(UART 方式 1、3 时)

做PWM/脉冲测量/电机测速(配合 T2 捕获功能)

1.3 四种工作方式(T0/T1)

方式

位数

特点

典型用途

0

13 位

早期兼容,少用

特殊场合

1

16 位

一次溢出重装

1 ms、50 ms 基时

2

8 位自动重装

低字节自动回装

波特率、高频中断

3

T0 分成两个 8 位

T1 失去中断

特殊应用

1.4使用步骤(以T0方式12 MHz 晶振产生 1 ms 中断为例)

1.4.1 算初值计算

机器周期 = 1 µs(12 MHz/12)

1 ms 需计数 1000 次 → 初值 = 65536 − 1000 = 64536 = 0xFC18

定时器T0设置

TMOD &= 0xF0;      // 清零 T0 位TMOD |= 0x01;      // T0 方式 1

定时周期(1ms)

TH0   = 0xFC;      // 高 8 位TL0   = 0x18;      // 低 8 位

1.4.2 寄存器配置

定时器T0

TMOD &= 0xF0;      // 清零 T0 位TMOD |= 0x01;      // T0 方式 1TH0   = 0xFC;      // 高 8 位TL0   = 0x18;      // 低 8 位TR0   = 1;         // 启动 T0ET0   = 1;         // 允许中断EA    = 1;         // 总中断

定时器T0中断服务函数

void Timer0_ISR(void) interrupt 1{TH0 = 0xFC;     // 重装初值TL0 = 0x18;/* 用户代码:计数、刷新显示、产生 PWM 等 */}

2例子1基于AT89C51单片机的定时器计数器

实现功能:使用定时器在6只数码管上完成0~99 999.9s计数。

本质:使用定时器精确计时,将计数值(0~99 999.9秒)动态扫描显示在6只数码管上。

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>总线收发器/排阻

P3.0-P3.5—>6位数码管

复位电路

晶振电路

排阻

6位数码管

总线收发器

2.2控制程序

2.2.1控制程序步骤

库文件与引脚定义

16进制段码

延时函数

主程序(秒表计数)

T0中断函数

2.2.3源代码

//功能:使用定时器在6只数码管上完成0~99 999.9s计数。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//段码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//6只数码管上显示的数字uchar Digits_of_6DSY[]={0,0,0,0,0,0};uchar Count;sbit Dot=P0^7;//延时void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}//主程序void main(){uchar i,j;P0=0x00;                       P3=0xff;Count=0;TMOD=0x01;                            //计数器T0方式1TH0=(65536-50000)/256;       //50ms定时TL0=(65536-50000)%256;IE=0x82;TR0=1;                                       //启动T0while(1){j=0x7f;//显示Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容//前面高位,后面低位,循环中i!=-1亦可写成i!=0xfffor(i=5;i!=-1;i--){j=_crol_(j,1);P3=j;P0=DSY_CODE[Digits_of_6DSY[i]];if(i==1) Dot=1;         //加小数点DelayMS(2);}}}//T0中断函数void Timer0() interrupt 1{uchar i;TH0=(65536-50000)/256;       //恢复初值TL0=(65536-50000)%256;if(++Count!=2) return;Count=0;Digits_of_6DSY[0]++;      //0.1s位累加for(i=0;i<=5;i++)               //进位处理{if(Digits_of_6DSY[i]==10){Digits_of_6DSY[i]=0;if(i!=5) Digits_of_6DSY[i+1]++;          //如果0~4位则分别向高一位进位}else break;               //若某低位没有进位,怎循环提前结束}}

3例子2:基于AT89C51单片机的定时器控制数码管显示时间

实现功能:8个数码管上分两组动态显示年月日与时分秒,显示延时用定时器实现。

本质:用定时器中断精确时序,驱动8位数码管高速交替扫描年月日与时分秒两组数据,利用人眼暂留实现无缝双显。

3.1电路原理图

3.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>8位数码管

P2.0-P3.7—>三极管驱动电路

复位电路

晶振电路

8位数码管

三极管驱动电路

3.2控制程序

3.2.1控制程序步骤

库文件

16进制段码

主程序(秒表计数)

T0中断函数

3.2.3源代码

//功能:8个数码管上分两组动态显示年月日与时分秒,显示延时用定时器实现。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//段码,最后一位是“-”的段码uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//待显示的数据:09-12-25与23-59-58(分两组显示)uchar code Table_of_Digits[][8]={{0,9,10,1,2,10,2,5},{2,3,10,5,9,10,5,8}};uchar i,j=0;uint t=0;//主程序void main(){P2=0x80;                          //位码初值TMOD=0x00;                            //计数器T0方式0TH0=(8192-4000)/32;     //4ms定时TL0=(8192-4000)%32;IE=0x82;TR0=1;                                       //启动T0while(1);}//T0中断函数控制数码管刷新显示void DSY_Show() interrupt 1{TH0=(8192-4000)/32;             //恢复初值TL0=(8192-4000)%32;P0=0xff;                            //输出位码和段码P0=DSY_CODE[Table_of_Digits[i][j]];P2=_crol_(P2,1);             j=(j+1)%8;                                 //数组第i行的下一字节索引if(++t!=350) return; //保持刷新一段时间t=0;i=(i+1)%2;                                //数组行i=0时显示年月日,i=1时显示时分秒}

  4 硬件工程师笔试面试相关文章链接(部分链接)

更多文章可前往主页观看

1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总——(2025版)_电容或者电感对锁存器的影响-CSDN博客https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客https://blog.csdn.net/XU157303764/article/details/142316204

硬件工程师笔记——电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331

http://www.xdnf.cn/news/20147.html

相关文章:

  • 【ComfyUI】混合 ControlNet 多模型组合控制生成
  • ANSYS HFSS边界条件的认识
  • 【LeetCode热题100道笔记】二叉树中的最大路径和
  • 9.FusionAccess桌面云
  • Spring的事件监听机制(一)
  • 03.缓存池
  • 【数学建模】质量消光系数在烟幕遮蔽效能建模中的核心作用
  • 故障诊断 | MATLAB基于CNN - LSSVM组合模型在故障诊断中的应用研究
  • 在Ubuntu上配置Nginx实现开机自启功能
  • 54.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--实现手机邮箱注册
  • js面试题 什么是作用域?
  • 【Proteus仿真】定时器控制系列仿真——LED小灯闪烁/流水灯/LED灯带控制/LED小灯实现二进制
  • EG2104 SOP-8 带SD功能 内置600V功率MOS管 栅极驱动芯片
  • 智能客户服务支持智能体
  • 基于GOA与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 登录优化(双JWT+Redis)
  • 开源AI智能名片链动2+1模式S2B2C商城小程序服务提升复购率和转介绍率的研究
  • 80(HTTP默认端口)和8080端口(备用HTTP端口)区别
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(vulhub CVE-2018-12613)
  • Linux 使用pip报错(error: externally-managed-environment )解决方案
  • Qt图表功能学习
  • sensitive-word 敏感词性能提升14倍优化全过程 v0.28.0
  • 【C++】memcpy导致的深拷贝问题
  • [Upscayl图像增强] docs | 前端 | Electron工具(web->app)
  • 【Python字符串格式化】:全面指南与最佳实践
  • Day22_【机器学习—集成学习(4)—Boosting—GBDT算法】
  • 基于Spring Boot的幼儿园管理系统
  • 如何用c++调用大模型——关于使用llama.cpp的lib库的简易教程
  • 编译和链接
  • Dotnet 项目手动部署到AWS 和Github action CICD 流程总结