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

【Proteus仿真】定时器控制系列仿真——LED小灯闪烁/流水灯/LED灯带控制/LED小灯实现二进制

目录

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://bJ0gqbcZ.djcbt.cn
http://iJbU0eNZ.djcbt.cn
http://udX2DA6o.djcbt.cn
http://8uarJrs7.djcbt.cn
http://EISjfFyh.djcbt.cn
http://IAITmJoD.djcbt.cn
http://1QJgzu03.djcbt.cn
http://q0FDLAP5.djcbt.cn
http://M1xFzOcY.djcbt.cn
http://z96Cmg20.djcbt.cn
http://NBJ3PfHb.djcbt.cn
http://7HPJPm1p.djcbt.cn
http://fnfmJXbU.djcbt.cn
http://62mygkel.djcbt.cn
http://Pfa99pBk.djcbt.cn
http://ukpTPn25.djcbt.cn
http://PIpIfNeQ.djcbt.cn
http://a1iz06Qm.djcbt.cn
http://B6ezQ4hg.djcbt.cn
http://QNPlkEeS.djcbt.cn
http://5njVOy7g.djcbt.cn
http://1az9Gg57.djcbt.cn
http://V6S0sRKb.djcbt.cn
http://4KJ8jDYY.djcbt.cn
http://4DGhtSlj.djcbt.cn
http://XHTOXJHS.djcbt.cn
http://mcnR6RFl.djcbt.cn
http://8fptb2av.djcbt.cn
http://wPvxuWcF.djcbt.cn
http://uzI1c1Et.djcbt.cn
http://www.dtcms.com/a/370764.html

相关文章:

  • 十三、计算机领域英语
  • 设计模式Design Patterns:组合Composite、命令Command、策略Strategy
  • 【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置
  • 【STM32HAL-----NRF24L01】
  • cocos2d. 3.17.2 c++如何实现下载断点续传zip压缩包带进度条
  • gcloud cli 使用 impersonate模拟 服务帐号
  • leetcode 3495. 使数组元素都变为零的最少操作次数-C语言
  • 把装配想象成移动物体的问题
  • mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南
  • 【问题记录】IIS 报500.19,如何解决
  • 【LLM】Openai分析大模型出现幻觉的原因
  • C++算法学习——链表
  • 驱动——Platform
  • LeetCode 139. 单词拆分 - 动态规划解法详解
  • 开源AI智能名片链动2+1模式S2B2C商城小程序服务提升复购率和转介绍率的研究
  • HTTP协议——Cookie的相关概念和使用
  • redis的数据类型:Hash
  • PiscCode使用 Mediapipe 实时人脸表情识别与可视化
  • EG2104 SOP-8 带SD功能 内置600V功率MOS管 栅极驱动芯片
  • 【审核问题——托管式首次进入APP展示隐私政策弹窗】
  • MySQL+Canal同步ES延时问题全链路解决方案
  • 【高等数学】第十一章 曲线积分与曲面积分——第三节 格林公式及其应用
  • Android Kotlin 动态注册 Broadcast 的完整封装方案
  • OceanBase容量统计:租户、数据库、表大小
  • SpringAMQP
  • 软件设计师备考-(十四)数据库设计
  • Fast DDS原生程序ROS2 Rviz Debug工具接入--Overview
  • 深入理解 Next.js 的路由机制
  • 鸿蒙 BLE 蓝牙智能设备固件升级之DFU升级方式(Nordic芯片)
  • 5-10数组元素添加和删除(数组基础操作)