目录

0案例视频效果展示

0.1例子1:基于AT89C51单片机的定时器控制小灯闪烁

0.2例子2:基于AT89C51单片机的定时器T0流水灯

0.3例子3:基于AT89C51单片机的定时器控制LED灯带

0.4例子4:基于AT89C51单片机的定时器控制LED闪烁

0.5例子5:基于AT89C51单片机的定时器LED实现二进制计数

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单片机的定时器T0流水灯

3.1电路原理图

3.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.3源代码

4例子3:基于AT89C51单片机的定时器控制LED灯带

4.1电路原理图

4.1.1电路组成及接线

4.2控制程序

4.2.1控制程序步骤

4.2.3源代码

5例子4:基于AT89C51单片机的定时器控制LED闪烁

5.1电路原理图

5.1.1电路组成及接线

5.2控制程序

5.2.1控制程序步骤

5.2.3源代码

6例子5:基于AT89C51单片机的定时器LED实现二进制计数

6.1电路原理图

6.1.1电路组成及接线

6.2控制程序

6.2.1控制程序步骤

6.2.3源代码

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


摘要:本文介绍了基于AT89C51单片机的5种定时器控制LED应用案例,包括小灯闪烁、流水灯、LED灯带控制、LED闪烁和二进制计数。详细讲解了每种案例的电路原理、程序设计及实现方法,并补充了定时器的基础知识,包括工作方式、计算方法和应用场景。文中提供了完整的源代码,并阐述了硬件连接方式,最后附有硬件工程师笔试面试相关文章的链接。这些案例展示了AT89C51单片机定时器在LED控制中的多样化应用,可作为单片机学习者的实践参考。

0案例视频效果展示

0.1例子1基于AT89C51单片机的定时器控制小灯闪烁

例子29:基于AT89C51单片机的定时器控制小灯闪烁

0.2例子2:基于AT89C51单片机的定时器T0流水灯

例子30:基于AT89C51单片机的定时器T0流水灯

0.3例子3基于AT89C51单片机的定时器控制LED灯带

例子31:基于AT89C51单片机的定时器控制LED灯带

0.4例子4基于AT89C51单片机的定时器控制LED闪烁

例子32:基于AT89C51单片机的定时器控制LED闪烁

0.5例子5:基于AT89C51单片机的定时器LED实现二进制计数

例子33:AT89C51单片机定时器控制LED实现二进制计数

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单片机的定时器控制小灯闪烁

实现功能:LED在定时器的中断例程控制下不断闪烁。

本质:定时器中断周期性地翻转LED引脚电平。

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P1.0—>共阳极LED灯

复位电路

晶振电路

共阳极LED灯

2.2控制程序

2.2.1控制程序步骤

库文件与引脚定义

主程序(小灯闪烁)

INT0中断函数

2.2.3源代码

//功能:LED在定时器的中断例程控制下不断闪烁。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;       uchar T_Count=0;//主程序void main(){TMOD=0x00;                  //定时器0工作方式0TH0=(8192-5000)/32;     //5ms定时TL0=(8192-5000)%32;IE=0x82;                   //允许T0中断TR0=1;while(1);}//T0中断函数void LED_Flash() interrupt 1{TH0=(8192-5000)/32;     //恢复初值TL0=(8192-5000)%32;if(++T_Count==100)        //0.5s开关一次LED{LED=~LED;T_Count=0;   }}

3例子2:基于AT89C51单片机的定时器T0流水灯

实现功能:TIMER0控制流水灯:定时器控制P0、P2口的LED滚动显示。

本质:TIMER0定时中断轮流移位点亮P0、P2口LED,形成滚动流水效果。

3.1电路原理图

3.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>流水灯

P2.0-P2.7—>流水灯

复位电路

晶振电路

两排流水灯

3.2控制程序

3.2.1控制程序步骤

库文件

主程序(定时器控制实现流水灯)

3.2.3源代码

//功能:TIMER0控制流水灯:定时器控制P0、P2口的LED滚动显示。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//主程序void main(){uchar T_Count=0;P0=0xfe;P2=0xfe;TMOD=0x01;                          //定时器0工作方式1TH0=(65536-40000)/256;       //40ms定时TL0=(65536-40000)%256;TR0=1;                                       //启动定时器while(1){if(TF0==1){TF0=0;TH0=(65536-40000)/256;       //恢复初值TL0=(65536-40000)%256;if(++T_Count==5){P0=_crol_(P0,1);P2=_crol_(P2,1);T_Count=0;}}}}

4例子3:基于AT89C51单片机的定时器控制LED灯带

实现功能:定时器T0定时控制上一组条形LED,滚动速度较快定时器T1定时控制下一组条形LED,滚动速度较慢

本质:T0快中断“扫”上条灯,T1慢中断“扫”下条灯,双速分时滚动。

4.1电路原理图

4.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>LED灯带

P2.0-P2.7—>LED灯带

复位电路

晶振电路

LED灯带

4.2控制程序

4.2.1控制程序步骤

库文件

主程序

T0中断函数

T1中断函数

4.2.3源代码

//功能:定时器T0定时控制上一组条形LED,滚动速度较快定时器T1定时控制下一组条形LED,滚动速度较慢#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar tc0=0,tc1=0;//主程序void main(){P0=0xfe;P2=0xfe;TMOD=0x11;   //定时器0、定时器1均工作于方式1TH0=(65536-15000)/256;               //定时器0:15msTL0=(65536-15000)%256;TH1=(65536-50000)/256;               //定时器1:50msTL1=(65536-50000)%256;IE=0x8a;TR0=1;                              //启动定时器TR1=1;while(1);}//T0中断函数void Time0() interrupt 1{TH0=(65536-15000)/256;               //恢复定时器0初值TL0=(65536-15000)%256;if(++tc0==10)                            //150ms转换状态{tc0=0;P0=_crol_(P0,1);}}//T1中断函数void Time1() interrupt 3{TH0=(65536-50000)/256;               //恢复定时器1初值TL0=(65536-50000)%256;if(++tc1==10)                            //500ms转换状态{tc1=0;P2=_crol_(P2,1);}}

5例子4:基于AT89C51单片机的定时器控制LED闪烁

实现功能:4只LED在定时器控制下滚动闪烁。

本质:定时器中断依次移位点亮4只LED,形成滚动闪烁。

5.1电路原理图

5.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.3—>LED电路

复位电路

晶振电路

LED灯电路

5.2控制程序

5.2.1控制程序步骤

库文件与引脚定义

主程序(小灯闪烁控制)

T0中断函数

5.2.3源代码

//功能:4只LED在定时器控制下滚动闪烁。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit B1=P0^0;sbit G1=P0^1;sbit R1=P0^2;sbit Y1=P0^3;uint i,j,k;//主程序void main(){i=j=k=0;P0=0xff;TMOD=0x02;                  //定时器0工作方式2TH0=256-200;         //200us定时TL0=256-200;IE=0x82;TR0=1;                              //启动定时器while(1);}//T0中断函数void LED_Flash_and_Scroll() interrupt 1{if(++k<35)        return;        //定时中断若干次后执行闪烁k=0;switch(i){case 0:     B1=~B1;break;case 1:     G1=~G1;break;case 2:     R1=~R1;break;case 3:     Y1=~Y1;break;default:i=0;}if(++j<300) return;    //每次闪烁持续一段时间j=0;P0=0xff;  //关闭显示i++;    //切换到下一个LED}

6例子5:基于AT89C51单片机的定时器LED实现二进制计数

实现功能:对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在T0引脚的按键每次按下时,会使计数寄存器的值递增其值通过LED以二进制形式显示

本质:把按键当计数脉冲源接T0脚,启用计数器0,每按一次TL0/TH0自增,无需任何中断或查询,CPU只管随时把计数值送LED二进制显示。

6.1电路原理图

6.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P1.0-P1.7—>LED灯

P2.0-P2.7—>LED灯

复位电路

晶振电路

LED灯

6.2控制程序

6.2.1控制程序步骤

库文件

主程序(实现LED的二进制)

6.2.3源代码

//功能:对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在T0引脚的按键每次按下时,会使计数寄存器的值递增其值通过LED以二进制形式显示#include<reg51.h>//主程序void main(){TMOD=0x05;   //定时器0为计数器,工作方式1,最大计数值65535TH0=0;             //初值为0TL0=0;TR0=1;                              //启动定时器while(1){P1=TH0;P2=TL0;}}

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

更多文章可前往主页观看

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.pswp.cn/news/921407.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921407.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921407.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进阶向:密码生成与管理工具

密码生成与管理工具&#xff1a;从零开始的完全指南在现代数字生活中&#xff0c;密码是保护个人信息和账户安全的第一道防线。随着网络服务的普及&#xff0c;每个人平均需要管理数十个不同账户的密码。一个强大且独特的密码通常应包含12个以上字符&#xff0c;混合大小写字母…

解决 Gitee 中 git push 因邮箱隐私设置导致的失败问题

解决 Gitee 中 git push 因邮箱隐私设置导致的失败问题 在使用 Git 向 Gitee 远程仓库推送代码时&#xff0c;可能会遇到因邮箱隐私设置引发的 git push 失败情况。最近我就碰到了&#xff0c;现在把问题现象、原因和解决方法分享出来。 一、错误现象 执行 git push -u origin …

Flutter的三棵树

“三棵树”是 Flutter 渲染和构建UI的核心机制&#xff0c;理解它们对于掌握 Flutter 至关重要。这三棵树分别是&#xff1a; Widget 树 Element 树 RenderObject 树 它们协同工作&#xff0c;以实现 Flutter 的高性能渲染和高效的响应式编程模型。 Flutter 是声明式的UI&…

同一台nginx中配置多个前端项目的三种方式

目录 第一种方式:配置多个二级域名 第二种方式:配置端口转发(不推荐) 第三种方式:同一个server中基于location配置(重点讲解) 第一种方式:配置多个二级域名 一个域名下面申请多个二级域名,每个二级域名配置一个vue前端项目,这个很好配置,在这里不再详细说明。 …

第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI

第二家公司虽然用PowerBI &#xff0c;可能更适合用以前的QuickBI现在回想一下&#xff0c;第二家公司数据源是MySQL &#xff0c;常规报表是用excel报表&#xff0c;另外还做了一张能发布到web的看板供运营使用。基于基本情况&#xff0c;quickbi 的早期版本是合适的&#xff…

STM32 USBx Device HID standalone 移植示例 LAT1466

关键字&#xff1a;USBx&#xff0c; Device, HID&#xff0c;standalone 1.设计目的 目前 USBx Device standalone 的官方示例较少&#xff0c;不过使用 STM32CubeMX 可以快速地生成 USBx Device 相关类的示例工程&#xff0c;会很方便大家的开发。这里以 NUCLEO-H563 为例&…

python创建并写入excel文件

大家好&#xff0c;这里是七七&#xff0c;今天来跟大家分享一个python创建并写入一个excel文件的小例子&#xff0c;话不多说&#xff0c;开始介绍。首先我们来看一下这一小段代码。import openpyxl# 创建一个新的 Excel 工作簿workbook openpyxl.Workbook()# 获取当前活动的…

react native 出现 FATAL EXCEPTION: OkHttp Dispatcher

react native 出现 FATAL EXCEPTION: OkHttp Dispatcher 报错信息FATAL EXCEPTION: OkHttp DispatcherProcess: , PID: 8868java.lang.NoSuchMethodError: No virtual method toString(Z)Ljava/lang/String; in class Lokhttp3/Cookie; or its super classes (declaration of o…

sentinel实现控制台与nacos数据双向绑定

有两种方式可以实现&#xff1a;Springboot客户端做相应配置&#xff08;推荐&#xff09;修改sentinel-dashboard的源码一、Springboot客户端做相应配置&#xff08;推荐&#xff09;1、添加依赖<dependency><groupId>com.alibaba.csp</groupId><artifac…

Kubernetes (k8s)

Kubernetes (k8s) 以下是一份 ​Kubernetes (k8s) 基础使用教程&#xff0c;涵盖从环境搭建到核心操作的完整流程&#xff0c;附详细命令和示例&#xff1a; &#x1f680; ​一、环境准备&#xff08;3种方式&#xff09;​​ ​1. 本地开发环境&#xff08;推荐&#xff09;​…

三打ANSYS HFSS

2. 激励方式&#xff08;端口&#xff09;详细对比分析在HFSS中&#xff0c;“激励方式”和“端口”这两个词经常混用&#xff0c;但严格来说&#xff0c;“端口”是实现“激励”的一种最主要的方式。端口类型工作原理适用情况优点缺点波端口 (Wave Port)默认首选。计算端口的固…

3.python——数据类型转换

python的数据类型转换分为两种&#xff1a; 隐式转换&#xff1a;自动完成 显式转换&#xff1a;用类型函数转换 隐式转换 # 自动转为浮点数 num_int 123 num_flo 1.23num_new num_int num_flo显式转换 整型 x int(1) # x 输出结果为 1 y int(2.8) # y 输出结果为 2 z …

迅为RK3568开发板OpenHarmonyv3.2-Beta4版本测试-命令终端

将串口连接到开发板的调试串口&#xff0c;进入 OpenHarmony 系统后&#xff0c;会自动进入 OpenHarmony终端&#xff0c;如下图所示&#xff1a;

【面试题】介绍一下BERT和GPT的训练方式区别?

BERT(双向编码器): 预训练任务: 掩码语言模型(MLM):随机掩盖15%的token,其中: 80%替换为[MASK] 10%替换为随机token 10%保持原样 下一句预测(NSP):判断两个句子是否连续(后续版本已移除) 训练特点: 使用双向Transformer编码器 同时利用左右上下文信息 适合理解类任…

邪修实战系列(1)

1、第一阶段邪修实战总览&#xff08;9.1-9.30&#xff09; 把第一阶段&#xff08;基础夯实期&#xff09;的学习计划拆解成极具操作性的每日行动方案。这个计划充分利用我“在职学习”的特殊优势&#xff0c;强调“用输出倒逼输入”&#xff0c;确保每一分钟的学习都直接服务…

XR数字融合工作站打造智能制造专业学习新范式

智能制造是工业4.0的核心发展方向&#xff0c;涵盖数字化设计、智能生产、工业机器人、数字孪生、物联网等关键技术。然而&#xff0c;传统教学模式在设备成本高、实训风险大、抽象概念难理解等方面存在诸多挑战。XR数字融合工作站,利用VR/AR/MR等技术&#xff0c;通过虚拟仿真…

基于FPGA实现数字QAM调制系统

基于FPGA实现数字QAM调制系统题目要求一、代码设计1.顶层2.分频3.m序列4.串转并5.映射6.正弦波余弦波生成ROM和7.ask二、仿真波形总结题目要求 FPGA实现数字QAM调制系统要求根据正交振幅调制原理&#xff0c;利用正弦载波信号发生器&#xff0c;实现调制信号。调制原理会利用到…

DAY 22 复习日

浙大疏锦行复习日 仔细回顾一下之前21天的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码 导入需要的库 import pandas as pd # 用于数据处理和分析&#xff0c;…

biocmanager安装 库 老是提示网络连接错误 才尝试各种办法

您好&#xff0c;遇到 BioManager &#xff08;通常是 BiocManager&#xff09;安装R包时提示网络连接错误确实非常令人头疼。这通常与R/RStudio的配置、网络环境&#xff08;尤其是国内用户&#xff09;或SSL证书问题有关。 请不要着急&#xff0c;我们可以按照从易到难的顺序…

【开题答辩全过程】以 智能商品数据分析系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…