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