【Proteus仿真】AT89C51單片機中斷系列仿真——INT0中斷控制LED小燈/INT0和INT1中斷控制數碼管

目錄

0案例視頻效果展示

0.1例子1:INT0控制LED閃爍

0.2例子2:INT0中斷控制數碼管計數

0.3例子3:INT0中斷實現秒表功能

0.4例子4:INT0INT1中斷控制數碼管計數

1基礎知識補充——中斷系統

1.1 中斷源一覽

1.2 控制寄存器

1.3 優先級與嵌套規則?

1.4 外部中斷細節

1.5定時器中斷?

1.6串行口中斷

1.7 中斷響應流程(精簡記憶版)?

1.8 使用技巧?

2例子1: INT0控制LED閃爍

2.1電路原理圖

2.1.1電路組成及接線

2.2控制程序

2.2.1控制程序步驟

2.2.3源代碼

3例子2:INT0中斷控制數碼管計數

3.1電路原理圖

3.1.1電路組成及接線

3.2控制程序

3.2.1控制程序步驟

3.2.3源代碼

4例子3:INT0中斷實現秒表功能

4.1電路原理圖

4.1.1電路組成及接線

4.2控制程序

4.2.1控制程序步驟

4.2.3源代碼

5例子4:INT0INT1中斷控制數碼管計數

5.1電路原理圖

5.1.1電路組成及接線

5.2控制程序

5.2.1控制程序步驟

5.2.3源代碼

? 6??硬件工程師筆試面試相關文章鏈接(部分鏈接)


摘要:本文介紹了基于51單片機外部中斷(INT0/INT1)的四個實踐案例:1)INT0控制LED開關;2)INT0中斷實現數碼管計數/清零;3)INT0中斷構建秒表功能(啟動/暫停/清零);4)INT0/INT1雙中斷獨立控制兩組數碼管計數。每個案例包含電路原理圖、接線說明及完整源代碼,重點演示了外部中斷在硬件控制中的應用方法。附加硬件工程師筆試面試資料鏈接,涵蓋器件知識、Multisim教程等內容,適合嵌入式學習者參考實踐。

0案例視頻效果展示

0.1例子1:INT0控制LED閃爍

例子25:INT0控制LED閃爍

0.2例子2:INT0中斷控制數碼管計數

例子26:INT0中斷控制數碼管計數

0.3例子3:INT0中斷實現秒表功能

例子27:INT0中斷實現秒表功能

0.4例子4:INT0INT1中斷控制數碼管計數

例子28:INT0INT1中斷控制數碼管計數

1基礎知識補充——中斷系統

AT89C52的中斷系統=“6 組固定中斷向量 + 1 組共用中斷向量 + 2 級優先級管理”

1.1 中斷源一覽

編號

向量地址

標志位

源/功能

觸發方式

0

0003H

IE0

外部中斷 0 (INT0)

低電平 / 下降沿

1

000BH

TF0

定時器 0 溢出

內部計數溢出

2

0013H

IE1

外部中斷 1 (INT1)

低電平 / 下降沿

3

001BH

TF1

定時器 1 溢出

內部計數溢出

4

0023H

RI/TI

串行口 (UART)

收完/發完 1 字節

5

002BH

TF2+EXF2

定時器 2

溢出或捕獲/重載

共 8 個“物理”中斷源,但向量只有 6 個(T2 兩個標志共用 002BH)。

1.2 控制寄存器

1. IE(A8H)——總中斷允許?

?? EA? ES? ET2? ES? ET1? EX1? ET0? EX0?

?? 1 = 允許;0 = 屏蔽?

2. IP(B8H)——優先級(1 = 高優先級,0 = 低優先級)?

?? —?? —?? PT2? PS? PT1? PX1? PT0? PX0?

?? 8052 新增 PT2,其余位含義同 8051。?

3. T2CON(C8H)——T2 專用?

?? TF2、EXF2 由軟件清 0。?

1.3 優先級與嵌套規則?

兩級:高優先級可打斷低優先級,同級不嵌套。?

同優先級內部再按自然序號 0→5 排隊。?

1.4 外部中斷細節

IT0/IT1(TCON.0/TCON.2)?

0 = 低電平觸發(需手動撤除低電平才能再次觸發)?

1 = 下降沿觸發(自動鎖存,脈沖寬度 ≥ 1 機器周期即可)?

1.5定時器中斷?

TF0/TF1 在計數器溢出時置 1,CPU 響應后硬件自動清 0。?

TF2/EXF2 共用向量,中斷服務程序需判斷是溢出還是捕獲/重載,再分別清 0。

1.6串行口中斷

RI 和 TI 共用向量,進入服務程序后先讀 SCON 判定是“接收完”還是“發送完”,再清相應標志。

1.7 中斷響應流程(精簡記憶版)?

1. 標志置位 → 2. 總中斷 EA=1 且對應位允許 → 3. 優先級仲裁 → 4. 完成當前指令 → 5. 自動把 PC 壓棧 → 6. 裝入向量地址 → 7. 執行 ISR → 8. RETI 返回。

1.8 使用技巧?

下降沿觸發外部中斷時,ITn=1 可避免“電平保持”誤觸發。?

高優先級 ISR 里可再被更高優先級打斷,但同級或低優先級不能打斷。?

T2 的 TF2/EXF2 必須軟件清 0,否則會不停地進入中斷。

2例子1: INT0控制LED閃爍

實現功能:(外部INT0中斷控制LED):每次按鍵都會觸發INT0中斷,中斷發生時將LED狀態取反,產生LED狀態由按鍵控制的效果

本質:按鍵每次觸發INT0中斷,中斷服務程序將LED電平取反,實現按鍵控制LED開關。

2.1電路原理圖

2.1.1電路組成及接線

名稱

接線

AT89C51單片機

XTAL1/XTAL2—>連接晶振電路

RST—>連接復位電路

P0.0—>LED燈

P3.2—>按鍵開關

復位電路

晶振電路

LED燈

按鍵開關

2.2控制程序

2.2.1控制程序步驟

庫文件和引腳定義

主程序(LED閃爍)

INT0中斷函數

2.2.3源代碼

//(外部INT0中斷控制LED):每次按鍵都會觸發INT0中斷,中斷發生時將LED狀態取反,產生LED狀態由按鍵控制的效果#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P0^0;//主程序void main(){LED=1;EA=1;EX0=1;IT0=1;while(1);}//INT0中斷函數void EX_INT0() interrupt 0{LED=~LED; ???? //控制LED亮滅}

3例子2:INT0中斷控制數碼管計數

實現功能:每次按下計數鍵時觸發INT0中斷,中斷程序累加計數,? 計數值顯示在3只數碼管上,按下清零鍵時數碼管清零

本質:按鍵觸發INT0中斷即計數并刷新數碼管,清零鍵直接歸零。

3.1電路原理圖

3.1.1電路組成及接線

名稱

接線

AT89C51單片機

XTAL1/XTAL2—>連接晶振電路

RST—>連接復位電路

P0.0-P0.7—>計數數碼管

P1.0-P1.7—>計數數碼管

P2.0-P2.7—>計數數碼管

P3.2/P3.6—>按鍵開關

復位電路

晶振電路

計數數碼管

按鍵開關

排阻

3.2控制程序

3.2.1控制程序步驟

庫文件

段碼

分解顯示數位

示數

主程序(數值顯示)

INT0中斷函數

3.2.3源代碼

//計數:每次按下計數鍵時觸發INT0中斷,中斷程序累加計數,? 計數值顯示在3只數碼管上,按下清零鍵時數碼管清零#include<reg51.h>#define uchar unsigned char#define uint unsigned int//0~9的段碼uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//計數值分解后各個待顯示的數位uchar DSY_Buffer[]={0,0,0};uchar Count=0;sbit Clear_Key=P3^6;//數碼管上顯示計數值void Show_Count_ON_DSY(){DSY_Buffer[2]=Count/100;????? //獲取3個數DSY_Buffer[1]=Count%100/10;DSY_Buffer[0]=Count%10;if(DSY_Buffer[2]==0)?? //高位為0時不顯示{DSY_Buffer[2]=0x0a;if(DSY_Buffer[1]==0)?? //高位為0,若第二位為0同樣不顯示DSY_Buffer[1]=0x0a;}P0=DSY_CODE[DSY_Buffer[0]];P1=DSY_CODE[DSY_Buffer[1]];P2=DSY_CODE[DSY_Buffer[2]];}//主程序void main(){P0=0x00;P1=0x00;P2=0x00;IE=0x81;? //允許INT0中斷IT0=1;?????????????? //下降沿觸發while(1){if(Clear_Key==0) Count=0;????? //清0Show_Count_ON_DSY();}}//INT0中斷函數void EX_INT0() interrupt 0{Count++; ??????? //計數值遞增}

4例子3:INT0中斷實現秒表功能

實現功能:能夠實現秒表作用,首次按鍵計時開始,再次按鍵暫停,第三次按鍵清零。

本質:按鍵循環控制:首次啟動計,再次暫停,第三次清零,實現秒表功能。

4.1電路原理圖

4.1.1電路組成及接線

名稱

接線

AT89C51單片機

XTAL1/XTAL2—>連接晶振電路

RST—>連接復位電路

P0.0-P0.7—>計數數碼管/排阻

P1.0-P1.7—>計數數碼管

P3.7—>按鍵開關

復位電路

晶振電路

兩個數碼管

按鍵開關

排阻

4.2控制程序

4.2.1控制程序步驟

庫文件和引腳定義

段碼

延時函數

按鍵處理函數

主程序(數值顯示)

INT0中斷函數

4.2.3源代碼

//功能:首次按鍵計時開始,再次按鍵暫停,第三次按鍵清零。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit K1=P3^7;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延時void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}//處理按鍵事件void Key_Event_Handle(){if(Key_State==0){Key_Flag_Idx=(Key_Flag_Idx+1)%3;switch(Key_Flag_Idx){case 1:???? EA=1;ET0=1;TR0=1;break;case 2:???? EA=0;ET0=0;TR0=0;break;case 0:???? P0=0x3f;P2=0x3f;i=0;Second_Counts=0;}}}//主程序void main(){P0=0x3f;?????????????????? ????? //顯示00P2=0x3f;i=0;Second_Counts=0;?Key_Flag_Idx=0;????????????? ????? //按鍵次數(取值0,1,2,3)Key_State=1;?????????? ????? //按鍵狀態TMOD=0x01;??????????????????????????? //定時器0方式1TH0=(65536-50000)/256;?????????????? //定時器0:15msTL0=(65536-50000)%256;while(1){if(Key_State!=K1){DelayMS(10);Key_State=K1;Key_Event_Handle();}}}//INT0中斷函數void DSY_Refresh() interrupt 1{TH0=(65536-50000)/256;?????????????? //恢復定時器0初值TL0=(65536-50000)%256;if(++i==2)????????????????????????? //50ms*2=0.1s轉換狀態{i=0;Second_Counts++;P0=DSY_CODE[Second_Counts/10];P2=DSY_CODE[Second_Counts%10];if(Second_Counts==100) Second_Counts=0; //滿100(10s)后顯示00}}

5例子4:INT0INT1中斷控制數碼管計數

實現功能:每次按下第1個計數鍵時,第1組計數值累加并顯示在右邊3只數碼管上, 每次按下第2個計數鍵時,第2組計數值累加并顯示在左邊3只數碼管上,后兩個按鍵分別清零。

本質:左右各三管,分別由兩鍵獨立計數與清零,互不干擾。

5.1電路原理圖

5.1.1電路組成及接線

名稱

接線

AT89C51單片機

XTAL1/XTAL2—>連接晶振電路

RST—>連接復位電路

P2.0-P1.3—>6位數碼管

P3.2-P3.5—>按鍵

復位電路

晶振電路

6位數碼管

按鍵

5.2控制程序

5.2.1控制程序步驟

庫文件和引腳定義

數碼管段碼和位碼定義

數據顯示函數

主程序(數值顯示)

INT0中斷函數

INT1中斷函數

5.2.3源代碼

//功能:每次按下第1個計數鍵時,第1組計數值累加并顯示在右邊3只數碼管上,每次按下第2個計數鍵時,第2組計數值累加并顯示在左邊3只數碼管上,后兩個按鍵分別清零。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit K3=P3^4;? //2個清零鍵sbit K4=P3^5;//數碼管段碼與位碼uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};uchar code DSY_Scan_Bits[]={0x20,0x10,0x08,0x04,0x02,0x01};//2組計數的顯示緩沖,前3位一組,后3位一組uchar data Buffer_Counts[]={0,0,0,0,0,0};uint Count_A,Count_B=0;//延時void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//數據顯示void Show_Counts(){uchar i;Buffer_Counts[2]=Count_A/100;Buffer_Counts[1]=Count_A%100/10;Buffer_Counts[0]=Count_A%10;if(???? Buffer_Counts[2]==0){Buffer_Counts[2]=0x0a;if(???? Buffer_Counts[1]==0)Buffer_Counts[1]=0x0a;}Buffer_Counts[5]=Count_B/100;Buffer_Counts[4]=Count_B%100/10;Buffer_Counts[3]=Count_B%10;if(???? Buffer_Counts[5]==0){Buffer_Counts[5]=0x0a;if(???? Buffer_Counts[4]==0)Buffer_Counts[4]=0x0a;}for(i=0;i<6;i++){P2=DSY_Scan_Bits[i];P1=DSY_CODE[Buffer_Counts[i]];DelayMS(1);}}//主程序void main(){IE=0x85;PX0=1;???? //中斷優先IT0=1;IT1=1;while(1){if(K3==0) Count_A=0;if(K4==0) Count_B=0;Show_Counts();}}//INT0中斷函數void EX_INT0() interrupt 0{Count_A++; ??}//INT1中斷函數void EX_INT1() interrupt 2{Count_B++; ??}

? 6??硬件工程師筆試面試相關文章鏈接(部分鏈接)

更多文章可前往主頁觀看

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/pingmian/95435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95435.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MTK Linux DRM分析(三十三)- MTK mtk_mipi_tx.c

一、MIPI PHY驅動簡介 1. MIPI 協議分層 應用層:顯示(DSI)、攝像頭(CSI)。 協議層:定義像素/圖像幀如何封裝成數據包。 物理層(PHY):具體電氣信號傳輸方式 —— 這里就是 D-PHY 或 C-PHY。 2. D-PHY(Differential PHY) 傳輸方式:差分信號(類似 LVDS/USB/PCIe …

G2D 圖形加速器

文章目錄G2D 圖形加速器1. 功能簡介1.1 矩形填充1.2 旋轉和鏡像 (rotate and mirror)1.3 透明度混合1.4 colorkey1.5 縮放 (Stretchblt)2. G2D 框架3. 全志 G2D 使用示例3.1 使用G2D實現圖像旋轉縮放3.2 實時預覽中加入旋轉縮放功能G2D 圖形加速器 G2D模塊主要實現圖像旋轉、數…

【FPGA】單總線——DS18B20

目錄 項目&#xff1a;項目&#xff08;含quartus工程、仿真文件&#xff09; 1. 單總線通信時序詳解 1.1 初始化&#xff08;復位脈沖 存在脈沖&#xff09; 1.2 寫時隙&#xff08;寫“0”和寫“1”&#xff09; 1.3 讀時隙 2. DS18B20 暫存器與溫度數據格式 2.1 暫存…

JUC的安全并發包機制

目錄 1. Lock機制&#xff1a;明鎖控制 2. 柵欄機制(CyclicBarrier) 3. 閉鎖機制(CountDownLatch) 4. 信號量機制(Semaphore) 5. 無鎖機制 1. Lock機制&#xff1a;明鎖控制 Lock接口提供了比synchronized更靈活的鎖機制&#xff0c;屬于明鎖&#xff08;需要手動獲取和釋…

開源企業級快速開發平臺(JeecgBoot)

JeecgBoot 是一款基于 Spring Boot Vue 技術棧的開源企業級快速開發平臺&#xff0c;旨在通過「低代碼代碼生成」模式降低企業級應用的開發成本&#xff0c;提升開發效率。其核心定位是“開箱即用的中后臺解決方案”&#xff0c;覆蓋權限管理、表單報表、工作流、代碼生成等核…

探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處,找到滿足您項目需求的最佳數據庫解決方案。

探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處&#xff0c;找到滿足您項目需求的最佳數據庫解決方案。 探索 PostgreSQL 和 MySQL 之間的主要差異和相似之處&#xff0c;找到滿足您項目需求的最佳數據庫解決方案。 關系數據庫已經存在了很長時間。事實上&#xff0c;關系…

如何畫時序圖、流程圖、狀態流轉圖

如何畫時序圖、流程圖、狀態流轉圖流程圖符號約定時序圖元素交互框最佳實踐狀態流轉圖在研發或者寫技術方案的時候&#xff0c;我們經常會畫各種圖。圖比文字更加容易理解一些&#xff0c;那么如何畫出優秀好看的圖呢下面簡單介紹一些畫圖時需要注意的點 流程圖 流程圖是流程…

CSDN 與 掘金 高效學習指南

CSDN 和掘金&#xff08;juejin.cn&#xff09;是國內最活躍的技術社區&#xff0c;但信息量巨大、質量參差不齊。高效運用的關鍵是&#xff1a;從“被動瀏覽”轉向“主動獲取”&#xff0c;避免陷入“收藏一堆文章卻學不會”的陷阱。 以下是為你量身定制的CSDN 與 掘金 高效學…

容器tomcat鏡像制作

pull-tomcat鏡像 docker pull tomcat啟動 –security-opt 禁用默認的安全策略&#xff0c;放寬限制 docker run -d --name mysql-tomcat -p 8080:8080 --security-opt seccompunconfined tomcat:latest進入容器直接訪問404&#xff0c;網頁相關的webapps下面為空&#xff0c;將…

AC安全認證方式全解析

AC的幾種安全認證方法認證方式 安全性 便捷性 典型應用場景 所需配置Portal認證 ??中 高 訪客網絡、商場、 Portal服務 酒…

《壘球江西百科》男子壘球世界紀錄·壘球9號位

男子壘球世界紀錄終極盤點? | 冷知識科普&#xff01;1. 最遠本壘打距離 | Longest Home Run Distance紀錄保持者&#xff1a; Jeff Hall (美國)距離&#xff1a; 643英尺 (約196米)賽事&#xff1a; 2012年 USSSA 慢投壘球錦標賽? 科普&#xff1a; 慢投壘球中&#xff0c;球…

設計模式六大原則2-里氏替換原則

肯定有不少人跟我剛看到這項原則的時候一樣&#xff0c;對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年&#xff0c;由麻省理工學院的一位姓里的女士&#xff08;Barbara Liskov&#xff09;提出來的。定義1&#xff1a;如果對每一個類型為 T1的對象 o1&#x…

Spring Security 深度學習(五): 過濾器鏈與自定義過濾器

目錄1. 引言&#xff1a;揭開Spring Security的內部奧秘2. Spring Security 過濾器鏈核心機制2.1 DelegatingFilterProxy&#xff1a;整合Spring與Servlet容器2.2 FilterChainProxy&#xff1a;管理安全過濾器鏈的“總管”2.3 Security Filters&#xff1a;核心安全功能的承載者…

微軟GraphRAG 端到端使用及自用工具類

文章目錄一. 環境準備1.安裝 Python 環境2.安裝依賴3.配置 LLM API Key二. 初始化項目三. 文檔上傳 & 索引構建四. 問答&#xff08;CLI 方式&#xff09;示例&#xff1a;五. 代碼中調用 GraphRAG工具概覽核心工具詳解1. simple_graphrag_integration.py - 智能問答核心2.…

sqlserver2008導入excel表數據遇到的問題

1.如果表格為.xlsx格式時可能會提示“沒有為此鏈接管理提供列”&#xff0c;無法點擊下一步的話&#xff0c;建議可以使用.csv格式 .csv格式可能也會存在此提示&#xff0c;但是可以不用管 2.導入.csv數據時&#xff0c;字段為int時&#xff0c;填null導入不進去的話可以給個0作…

Unity游戲打包——打包流程

本文由 NRatel 歷史筆記整理而來&#xff0c;如有錯誤歡迎指正。一、基本流程二、組合步驟把上述每步做成獨立的輸入輸出邏輯 y fuc(x)然后&#xff0c;控制/組合其過程&#xff0c;可靈活產生不同的流程&#xff1a;1、單渠道出測試包2、單渠道出正式包3、單渠道包熱更三、構…

卷積神經網絡(二):手寫數字識別項目(一)

文章目錄手寫數字識別項目一、準備數據集二、定義模型三、模型訓練3.1 導入依賴庫3.2 設備設置&#xff08;CPU/GPU 自動選擇&#xff09;3.3 超參數定義3.4數據集準備1.獲取數據集2.劃分訓練集與驗證集3.創建 DataLoader&#xff08;按批次加載數據&#xff09;3.5模型初始化與…

批量給文件夾添加文件v2【件批量復制工具】

代碼功能介紹 這個代碼的功能就是一個&#xff0c;給某個文件夾里面添加某個文件&#xff08;含父級文件夾下的每一個子文件夾&#xff09; 舉個例子&#xff0c;父級文件夾是&#xff1a;“D:\Desktop\1&#xff0c;要添加的文件路徑是&#xff1a;D:\1.txt” 則最后會把文件…

Qt實現2048小游戲:看看AI如何評估棋盤策略實現“人機合一

2048 是一款經典的數字益智游戲,其簡單的規則背后蘊含著豐富的策略性。該項目不僅完整實現了 2048 的核心玩法,還包含了一個基于啟發式評估和蒙特卡洛方法的智能 AI 玩家。 我們將從項目整體架構入手,逐一解析游戲核心邏輯、UI 渲染、事件處理、AI 策略等關鍵模塊,并通過展…

封裝紅黑樹實現mysetmymap

1. 源碼分析 set實例化rb_tree時第二個模板參數給的是key&#xff0c;map實例化rb_tree時第?個模板參數給的是 pair<const key,T>&#xff0c;這樣一顆紅黑樹既可以實現key搜索場景的set&#xff0c;也可以實現key/value搜索場 景的map源碼里面模板參數是用T代表value&…