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

【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://fpeHZeNj.bnygf.cn
http://wgzgB3C6.bnygf.cn
http://gBJ6zy1U.bnygf.cn
http://hfiPs21l.bnygf.cn
http://CC0p7w67.bnygf.cn
http://rQz6y8Zn.bnygf.cn
http://F1zcbr1u.bnygf.cn
http://E0nHALCE.bnygf.cn
http://iPtUVAD9.bnygf.cn
http://H0Nn3zr3.bnygf.cn
http://GeooSFHE.bnygf.cn
http://dWRma0Ot.bnygf.cn
http://xbH1iFzC.bnygf.cn
http://CZuzKoeP.bnygf.cn
http://0vIWq01Y.bnygf.cn
http://ufivE7wI.bnygf.cn
http://Q0YWnsTM.bnygf.cn
http://RTsD8H43.bnygf.cn
http://vqALkQJC.bnygf.cn
http://oTVooaNJ.bnygf.cn
http://6GJENCrB.bnygf.cn
http://mpK42uhU.bnygf.cn
http://Y5visSgl.bnygf.cn
http://PRAnUCaL.bnygf.cn
http://6IO7bqYU.bnygf.cn
http://kg0lfGXV.bnygf.cn
http://LzCaWTQi.bnygf.cn
http://DtwQuhJz.bnygf.cn
http://uRWagUgQ.bnygf.cn
http://o907YiQo.bnygf.cn
http://www.dtcms.com/a/370187.html

相关文章:

  • python advance -----object-oriented
  • 开源与定制化对比:哪种在线教育系统源码更适合教育培训APP开发?
  • 【51单片机-B030】【protues仿真】基于51单片机万年历系统
  • mysql 是否“100%”地解决幻读?
  • 分布式系统的设计哲学:架构模式全面介绍与选型策略
  • windows11 安装charm成功
  • IPD流程落地:IPMT的开发评审逻辑
  • 数字化赋能全球扩张:名创优品携手巨益科技的信息化转型深度实践
  • OpenCV - 图像的IO操作
  • Windows 11 手动下载安装配置 uv、配置国内源
  • Wisdom SSH 是一款搭载强大 AI 助手的工具,能显著简化服务器配置管理流程。
  • Linux基础知识(二)
  • Redis 在互联网高并发场景下的应用--个人总结
  • 算法题-链表03
  • 版本发布流程手册:Release分支规范与Bug分级标准全解析
  • 目标检测中的池化层
  • react native 出现 FATAL EXCEPTION: OkHttp Dispatcher
  • HttpClient、OkHttp 和 WebClient
  • js逆向Webpack模块加载机制解析:从数组到JSONP
  • cuda-NCCL笔记(1)-- 初步了解使用NCCL
  • Lua 面向对象编程
  • 微信小程序(uniapp)实现连接蓝牙
  • 从 scheduler_tick 到上下文切换:深入解析 Linux 内核的 TIF_NEED_RESCHED 标志设置流程
  • 微前端框架性能对比与选型指南:从理论到实践
  • pyAutoGUI 模块主要功能介绍-(1)鼠标功能
  • Maven的介绍及基本使用
  • 使用 C# .NETCore 实现MongoDB
  • 2025年渗透测试面试题总结-55(题目+回答)
  • %前置模糊查询优化
  • 【架构艺术】变更风险防控架构嵌入决策降噪模块的方法