目录
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