【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://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等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…