一、實(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ǔ)句) - #include "reg51.h"// 引入8051單片機(jī)的頭文件
- unsigned char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,};
- // 定義一個(gè)無(wú)符號(hào)字符型數(shù)組 led_mod,用于存儲(chǔ)數(shù)碼管顯示 0 - F 以及其他字符的段碼
- // 這里共陰極數(shù)碼管顯示 0 - F 及部分字符對(duì)應(yīng)的段碼依次存儲(chǔ)在數(shù)組中
- unsigned char count = 0; // 定義一個(gè)無(wú)符號(hào)字符型變量 count,用于記錄數(shù)碼管顯示的索引值,初始化為 0
- sbit P04 = P0^4;// 使用 sbit 關(guān)鍵字定義 P0 口的第 4 位為 P04,方便后續(xù)對(duì)該引腳進(jìn)行操作
- // 外部中斷 0 的中斷服務(wù)函數(shù),當(dāng)外部中斷 0 觸發(fā)時(shí)執(zhí)行此函數(shù)
- // 函數(shù)名為 int0_key,中斷號(hào)為 0
- int0_key() interrupt 0{
- P04 = !P04; // 對(duì) P04 引腳的電平取反,實(shí)現(xiàn)連接在該引腳的 LED 燈亮滅狀態(tài)的切換
- }
- // 外部中斷 1 的中斷服務(wù)函數(shù),當(dāng)外部中斷 1 觸發(fā)時(shí)執(zhí)行此函數(shù)
- // 函數(shù)名為 int1_key,中斷號(hào)為 2
- int1_key() interrupt 2{
- P2 = led_mod[count];
- if (++count>=0x10) count=0;
- // 先將 count 的值加 1,然后判斷是否大于等于 0x10
- // 如果大于等于 0x10,則將 count 重新置為 0,實(shí)現(xiàn)循環(huán)顯示
- }
- // 主函數(shù),程序的入口點(diǎn)
- void main(){
- IT0=IT1=EX0=EX1=EA=1;
- // 設(shè)置外部中斷 0 和外部中斷 1 的觸發(fā)方式為下降沿觸發(fā)
- // IT0 控制外部中斷 0 的觸發(fā)方式,IT1 控制外部中斷 1 的觸發(fā)方式
- // EX0 使能外部中斷 0,EX1 使能外部中斷 1
- // EA 是總中斷允許位,置 1 表示允許所有中斷
- P2 = 0; // 將 P2 口初始化為低電平,即數(shù)碼管初始不顯示任何字符
- 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í)行
- }
復(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)
2025-5-28 09:14 上傳
點(diǎn)擊文件名下載附件
數(shù)碼管的中斷控制
|