找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 354|回復(fù): 0
收起左側(cè)

單片機(jī)數(shù)碼管的中斷控制工作原理與Proteus仿真圖程序

[復(fù)制鏈接]
ID:1151709 發(fā)表于 2025-5-28 09:15 | 顯示全部樓層 |閱讀模式
一、實(shí)驗(yàn)相關(guān)知識(shí)點(diǎn)
1.掌握外部中斷的工作原理;
2.學(xué)會(huì)中斷程序設(shè)計(jì)。
二、實(shí)驗(yàn)內(nèi)容及要求
【實(shí)驗(yàn)內(nèi)容】
(1)創(chuàng)建一個(gè)包含80C51固件,采用Keil for 8051編譯器的新項(xiàng)目;
(2)仿照?qǐng)DA.5和表A.4繪制電路原理圖;
(3)編寫C51源程序,要求采用中斷方法實(shí)現(xiàn)如下功能:程序啟動(dòng)后,D1處于熄燈、LED1處于黑屏狀態(tài);單擊K1,可使D1亮燈狀態(tài)反轉(zhuǎn)一次;單擊K2,可使LED1顯示值加1,并按十六進(jìn)制數(shù)顯示,達(dá)到F后重新從1開始。
(4)完成源程序編譯和動(dòng)態(tài)調(diào)試,實(shí)現(xiàn)實(shí)驗(yàn)4的控制功能要求;
(5)完成實(shí)驗(yàn)4文檔的撰寫。
【實(shí)驗(yàn)要求】
提交實(shí)驗(yàn)文檔并包括如下內(nèi)容:
(1)電路原理圖
(2)C51源程序(含注釋語(yǔ)句)
(3)軟件調(diào)試分析
(4)仿真運(yùn)行截圖
(5)實(shí)驗(yàn)小結(jié)
三、實(shí)驗(yàn)方法
1.實(shí)驗(yàn)電路圖中按鍵K1和K2分別接于P3.2和P3.3,發(fā)光二極管D1接于P0.4,共陰極數(shù)碼管LED1接于P2口。
2.軟件編程原理為:將數(shù)碼管0~F的顯示字模保存在數(shù)組中,K1和K2的按鍵動(dòng)作分別作為的中斷請(qǐng)求,在中斷函數(shù)中進(jìn)行LED燈控制和數(shù)碼管顯示刷新。初始化后,主函數(shù)處于無(wú)限循環(huán)狀態(tài),等待中斷請(qǐng)求。
四、實(shí)驗(yàn)流程
1.電路原理圖
2.     C51源程序(含注釋語(yǔ)句)
  1. #include "reg51.h"// 引入8051單片機(jī)的頭文件
  2. unsigned char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,};         
  3. // 定義一個(gè)無(wú)符號(hào)字符型數(shù)組 led_mod,用于存儲(chǔ)數(shù)碼管顯示 0 - F 以及其他字符的段碼
  4. // 這里共陰極數(shù)碼管顯示 0 - F 及部分字符對(duì)應(yīng)的段碼依次存儲(chǔ)在數(shù)組中  
  5. unsigned char count = 0; // 定義一個(gè)無(wú)符號(hào)字符型變量 count,用于記錄數(shù)碼管顯示的索引值,初始化為 0                                                                                                                                                                                                
  6. sbit P04 = P0^4;// 使用 sbit 關(guān)鍵字定義 P0 口的第 4 位為 P04,方便后續(xù)對(duì)該引腳進(jìn)行操作


  7. // 外部中斷 0 的中斷服務(wù)函數(shù),當(dāng)外部中斷 0 觸發(fā)時(shí)執(zhí)行此函數(shù)
  8. // 函數(shù)名為 int0_key,中斷號(hào)為 0
  9. int0_key() interrupt 0{                 
  10.         P04 = !P04; // 對(duì) P04 引腳的電平取反,實(shí)現(xiàn)連接在該引腳的 LED 燈亮滅狀態(tài)的切換
  11. }


  12. // 外部中斷 1 的中斷服務(wù)函數(shù),當(dāng)外部中斷 1 觸發(fā)時(shí)執(zhí)行此函數(shù)
  13. // 函數(shù)名為 int1_key,中斷號(hào)為 2
  14. int1_key() interrupt 2{           
  15.         P2 = led_mod[count];        
  16.         if (++count>=0x10) count=0;
  17.         // 先將 count 的值加 1,然后判斷是否大于等于 0x10
  18.        // 如果大于等于 0x10,則將 count 重新置為 0,實(shí)現(xiàn)循環(huán)顯示  
  19. }

  20. // 主函數(shù),程序的入口點(diǎn)
  21. void main(){
  22.         IT0=IT1=EX0=EX1=EA=1;   
  23.         // 設(shè)置外部中斷 0 和外部中斷 1 的觸發(fā)方式為下降沿觸發(fā)
  24.         // IT0 控制外部中斷 0 的觸發(fā)方式,IT1 控制外部中斷 1 的觸發(fā)方式
  25.         // EX0 使能外部中斷 0,EX1 使能外部中斷 1
  26.         // EA 是總中斷允許位,置 1 表示允許所有中斷                                         
  27.         P2 = 0;        // 將 P2 口初始化為低電平,即數(shù)碼管初始不顯示任何字符                                                                          
  28.         while(1);
  29.         // 主函數(shù)進(jìn)入一個(gè)無(wú)限循環(huán),程序會(huì)一直停留在這個(gè)循環(huán)中
  30.         // 等待外部中斷的觸發(fā),當(dāng)有中斷觸發(fā)時(shí),會(huì)跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)函數(shù)執(zhí)行
  31. }
復(fù)制代碼
3.     程序分析
這段代碼主要功能是利用外部中斷來(lái)控制硬件設(shè)備。具體而言,通過(guò)外部中斷 0 控制一個(gè) LED 燈(連接在 P0.4 引腳)的亮滅狀態(tài)切換,通過(guò)外部中斷 1 控制共陰極數(shù)碼管(連接在 P2 口)循環(huán)顯示預(yù)設(shè)的字符段碼。
(1)頭文件包含
引入了reg51.h頭文件,該頭文件中定義了 8051 單片機(jī)的特殊功能寄存器和位定義,使得代碼可以方便地訪問(wèn)和操作單片機(jī)的各個(gè)寄存器。
(2)數(shù)碼管段碼數(shù)組
定義了一個(gè)無(wú)符號(hào)字符型數(shù)組led_mod,用于存儲(chǔ)共陰極數(shù)碼管顯示 0 - F 以及其他字符的段碼。每個(gè)元素對(duì)應(yīng)一個(gè)字符的顯示編碼,當(dāng)需要顯示某個(gè)字符時(shí),只需將對(duì)應(yīng)的段碼輸出到數(shù)碼管的控制端口。
(3)計(jì)數(shù)器變量
定義了一個(gè)無(wú)符號(hào)字符型變量count,初始值為 0。該變量作為索引,用于從led_mod數(shù)組中選取要顯示的段碼,同時(shí)在外部中斷 1 的處理中用于控制顯示的循環(huán)。
(4)引腳定義
使用sbit關(guān)鍵字將 P0 口的第 4 位定義為P04,這樣在代碼中可以直接使用P04來(lái)操作該引腳,提高了代碼的可讀性和可維護(hù)性。
(5)外部中斷 0 服務(wù)函數(shù)
函數(shù)名為int0_key。中斷號(hào)為0,表示這是外部中斷 0 的服務(wù)函數(shù)。當(dāng)外部中斷 0 觸發(fā)時(shí),將P04引腳的電平取反,從而實(shí)現(xiàn)連接在該引腳的 LED 燈亮滅狀態(tài)的切換。
(6)外部中斷 1 服務(wù)函數(shù)
函數(shù)名為int1_key,中斷號(hào)為2,表示這是外部中斷 1 的服務(wù)函數(shù)。功能是將led_mod數(shù)組中索引為count的段碼賦值給 P2 口,驅(qū)動(dòng)數(shù)碼管顯示對(duì)應(yīng)的字符。并將count的值加 1,然后判斷是否大于等于0x10。如果大于等于0x10,則將count重新置為 0,實(shí)現(xiàn)數(shù)碼管顯示的循環(huán)。
(7)主函數(shù)
中斷和觸發(fā)方式設(shè)置:IT0 = IT1 = 1,將外部中斷 0 和外部中斷 1 的觸發(fā)方式設(shè)置為下降沿觸發(fā)。EX0 = EX1 = 1,使能外部中斷 0 和外部中斷 1。EA = 1,使能總中斷,允許所有中斷源產(chǎn)生中斷。
數(shù)碼管初始化:P2 = 0,將 P2 口初始化為低電平,使數(shù)碼管初始狀態(tài)不顯示任何字符。
無(wú)限循環(huán):while(1);,主函數(shù)進(jìn)入一個(gè)無(wú)限循環(huán),程序會(huì)一直停留在這個(gè)循環(huán)中,等待外部中斷的觸發(fā)。當(dāng)有中斷觸發(fā)時(shí),程序會(huì)跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)函數(shù)執(zhí)行。
4.     軟件調(diào)試
5.     仿真運(yùn)行截圖


實(shí)驗(yàn)結(jié)論
本次實(shí)驗(yàn)基于 80C51 單片機(jī),成功運(yùn)用 Keil for 8051 編譯器完成項(xiàng)目創(chuàng)建與代碼編寫,通過(guò)繪制電路原理圖并搭建硬件連接,實(shí)現(xiàn)了外部中斷控制功能。其中,K1 按鍵觸發(fā)外部中斷 0,能夠準(zhǔn)確實(shí)現(xiàn) D1 亮燈狀態(tài)的反轉(zhuǎn);K2 按鍵觸發(fā)外部中斷 1,可使 LED1 按十六進(jìn)制數(shù)規(guī)律循環(huán)顯示數(shù)值。經(jīng)編譯調(diào)試與仿真運(yùn)行,程序穩(wěn)定運(yùn)行,功能完全符合預(yù)期,驗(yàn)證了外部中斷工作原理在單片機(jī)控制系統(tǒng)中的有效性和實(shí)用性,達(dá)到了實(shí)驗(yàn)?zāi)繕?biāo)。


實(shí)驗(yàn)個(gè)人體會(huì)
通過(guò)本次實(shí)驗(yàn),我對(duì)外部中斷的工作機(jī)制有了更深刻的理解,從理論學(xué)習(xí)到實(shí)際編程調(diào)試,掌握了中斷程序設(shè)計(jì)的基本方法和技巧。在調(diào)試過(guò)程中,遇到過(guò)按鍵抖動(dòng)導(dǎo)致誤觸發(fā)、數(shù)碼管顯示異常等問(wèn)題,通過(guò)查閱資料和逐步排查,最終得以解決,這極大地提升了我的問(wèn)題分析和解決能力。同時(shí),也意識(shí)到代碼規(guī)范性、注釋添加以及硬件連接準(zhǔn)確性的重要性。未來(lái),我將繼續(xù)深入學(xué)習(xí)單片機(jī)知識(shí),加強(qiáng)實(shí)踐操作,提升綜合應(yīng)用能力,以便更好地應(yīng)對(duì)復(fù)雜的嵌入式系統(tǒng)開發(fā)任務(wù)。

仿真文件和Word ppt下載: 實(shí)驗(yàn)5.7z (979.97 KB, 下載次數(shù): 0)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表