![單片機(jī)按鍵模塊設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view/e4d3edd48a7c068b9454186021602d18/e4d3edd48a7c068b9454186021602d181.gif)
![單片機(jī)按鍵模塊設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view/e4d3edd48a7c068b9454186021602d18/e4d3edd48a7c068b9454186021602d182.gif)
![單片機(jī)按鍵模塊設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view/e4d3edd48a7c068b9454186021602d18/e4d3edd48a7c068b9454186021602d183.gif)
![單片機(jī)按鍵模塊設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view/e4d3edd48a7c068b9454186021602d18/e4d3edd48a7c068b9454186021602d184.gif)
![單片機(jī)按鍵模塊設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view/e4d3edd48a7c068b9454186021602d18/e4d3edd48a7c068b9454186021602d185.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1單片機(jī)按鍵模塊設(shè)計(jì)回顧1,數(shù)碼管顯示原理?
2,靜態(tài)數(shù)碼管工作原理?3,動(dòng)態(tài)數(shù)碼管工作原理?4,AT89C51有幾個(gè)定時(shí)器?各是多少位的?請(qǐng)簡述定時(shí)器實(shí)現(xiàn)定時(shí)原理?5,8051單片機(jī)定時(shí)/計(jì)數(shù)器工作方式有多少種?6,如何設(shè)置8051單片機(jī)工作在定時(shí)/計(jì)數(shù)模式下?7,如何啟動(dòng)定時(shí)器工作?8,請(qǐng)簡述DS1302讀取時(shí)間的編程過程?第1頁/共62頁本單元任務(wù)任務(wù)1獨(dú)立式鍵盤設(shè)計(jì)任務(wù)2鍵盤中斷設(shè)計(jì)任務(wù)3矩陣式鍵盤設(shè)計(jì)任務(wù)4多個(gè)外部中斷設(shè)計(jì)第2頁/共62頁任務(wù)1獨(dú)立式鍵盤設(shè)計(jì)任務(wù)描述:任務(wù)分析:
眾多嵌入式單片機(jī)系統(tǒng)、嵌入式單片機(jī)產(chǎn)品設(shè)備中,鍵盤模塊都是必不可少的,比如手機(jī)及各種智能家電等。本任務(wù)通過按鍵控制點(diǎn)亮流水燈(8個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)LED),學(xué)習(xí)最簡單的鍵盤—獨(dú)立式按鍵設(shè)計(jì)方法。
鍵盤實(shí)際上是一組開關(guān)的集合:當(dāng)鍵按下時(shí),兩根導(dǎo)線接通;釋放時(shí),兩根導(dǎo)線不通。8個(gè)按鍵的鍵盤電路可考慮在P2口上設(shè)計(jì),8個(gè)LED電路仍然安裝在單片機(jī)P1口。8個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)LED,按下按鍵則點(diǎn)亮對(duì)應(yīng)的燈。
第3頁/共62頁獨(dú)立式鍵盤工作原理及應(yīng)用獨(dú)立式鍵盤的組成是由若干個(gè)按鍵與單片機(jī)的I/O口一一的對(duì)應(yīng)連接,然后通過讀取單片機(jī)I/O的電平狀態(tài)來確認(rèn)哪個(gè)對(duì)應(yīng)的按鍵被按下,一般一個(gè)獨(dú)立式按鍵對(duì)應(yīng)一個(gè)功能,可以通過按鍵的組合來實(shí)現(xiàn)多個(gè)功能。P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7key1key2key3key0key4key5key6key7第4頁/共62頁抖動(dòng):當(dāng)用手按下一個(gè)鍵時(shí),往往出現(xiàn)按鍵在閉合和斷開位置之間來回跳動(dòng)多次才能到閉合穩(wěn)定狀態(tài)的現(xiàn)象;在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類似的情況,這種情況就是抖動(dòng)。按下一個(gè)鍵時(shí)產(chǎn)生前沿抖動(dòng),釋放一個(gè)鍵時(shí)產(chǎn)生后沿抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間隨鍵盤簧片的材料和操作員而異,通常在5~10ms。而5~10ms已經(jīng)對(duì)程序進(jìn)行多次循環(huán)掃描執(zhí)行,顯而易見,抖動(dòng)問題不解決,就會(huì)引起對(duì)閉合鍵的多次識(shí)別。。鍵按下前沿抖動(dòng)后沿抖動(dòng)閉合穩(wěn)定第5頁/共62頁應(yīng)用舉例:例5-1第6頁/共62頁 #include"AT89X51.H" voidmain() { while(1) { if(P2_0==0)//判斷key0被按下
{ key_delay();//去抖延時(shí)10ms if(P2_0==0) //再次判斷key0按下
{ while(!P2_0);//等待閉合釋放
P1_0=0;//點(diǎn)亮LED } } if(P2_1==0) //判斷key1被按下
{ key_delay();//去抖延時(shí)10ms if(P2_1==0) //再次判斷key1按下
{ while(!P2_1);//等待閉合釋放
P1_0=1;//熄滅LED } } } }第7頁/共62頁1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第8頁/共62頁硬件電路圖第9頁/共62頁(1)程序流程
由獨(dú)立式鍵盤工作原理得知,按鍵是否按下是通過讀取按鍵對(duì)應(yīng)的IO的電平變化而判斷的,在程序設(shè)計(jì)上,即通過讀取按鍵對(duì)應(yīng)IO口的電平是否為低(軟件去抖)來決定哪個(gè)按鍵被按下,當(dāng)判斷key0被按下,則點(diǎn)亮LED0;當(dāng)判斷key1被按下,則點(diǎn)亮LED1……。
第10頁/共62頁主程序設(shè)計(jì):
#include"AT89X51.H" unsignedcharcodeled_light[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //點(diǎn)亮LED對(duì)應(yīng)的編碼
voidmain() { while(1) { if(P2_0==0)//判斷key0被按下
{ key_delay();//去抖延時(shí)10ms if(P2_0==0) //再次判斷key0按下
{ while(!P2_0);//等待閉合釋放
P1=led_light[0];//點(diǎn)亮LED0 } } if(P2_1==0) //判斷key1被按下
{ key_delay();//去抖延時(shí)10ms if(P2_1==0) //再次判斷key1按下
{ while(!P2_1);//等待閉合釋放
P1=led_light[1];//點(diǎn)亮LED1 } } ……; } }第11頁/共62頁運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真第12頁/共62頁任務(wù)2鍵盤中斷設(shè)計(jì)任務(wù)描述:任務(wù)分析:
項(xiàng)目組掌握獨(dú)立式鍵盤設(shè)計(jì)后,現(xiàn)要求用1個(gè)按鍵控制流水燈運(yùn)行樣式,初始時(shí)8個(gè)LED按從頭到尾方式循環(huán)運(yùn)行,當(dāng)按下按鍵,首尾兩燈點(diǎn)亮向中間,到中間后返回首尾的循環(huán)運(yùn)行,再次按下按鍵又轉(zhuǎn)為從頭到尾循環(huán)運(yùn)行……,即1個(gè)按鍵交替切換流水燈的兩種運(yùn)行樣式。
此任務(wù)設(shè)計(jì)有兩個(gè)主要功能模塊,一是按鍵的判斷,二是LED流水燈的運(yùn)行。通過前面單元的學(xué)習(xí)得知,這兩個(gè)功能在主程序中無限循環(huán)判斷執(zhí)行,正常人完成一次按鍵的時(shí)間需要20ms,而LED流水燈運(yùn)行頻率應(yīng)小于50Hz(即應(yīng)大于20ms走一個(gè)燈,否則運(yùn)行太快人眼無法識(shí)別),那么如果單片機(jī)CPU在執(zhí)行流水燈顯示延時(shí)程序期間,正好發(fā)生按鍵,CPU無法運(yùn)行按鍵掃描程序而導(dǎo)致按鍵判斷的丟失,如果1s或更長時(shí)間走一個(gè)燈,那么丟失按鍵的現(xiàn)象將更加嚴(yán)重。由此可見普通的程序查詢獨(dú)立式按鍵設(shè)計(jì)方法在此任務(wù)設(shè)計(jì)是無法勝任的。本任務(wù)將介紹單片機(jī)重要的內(nèi)部資源—中斷系統(tǒng),它將有效解決上述問題。
第13頁/共62頁1,中斷的概念【例5-2】電路如5-10示,8個(gè)LED流水燈安裝在P1口,按鍵K0安裝在P2.0上,采用獨(dú)立式按鍵識(shí)別,實(shí)現(xiàn)任務(wù)描述中要求的功能。 程序分析:主程序有兩個(gè)功能模塊,一方面按鍵判斷程序,另一方面LED流水燈程序。由于按鍵是兩種流水燈運(yùn)行方式的交替按鍵,因此可考慮設(shè)置按鍵控制標(biāo)志位狀態(tài),LED流水燈則判斷標(biāo)志位狀態(tài)決定運(yùn)行方式,即按鍵通過標(biāo)志位間接控制LED流水燈的運(yùn)行方式。每次按下按鍵則把標(biāo)志位取反,以達(dá)到控制LED流水燈的運(yùn)行。第14頁/共62頁第15頁/共62頁第16頁/共62頁voidmain(){ while(1) { if(P2_0==0)//判斷key0被按下
{ key_delay();//去抖延時(shí)10ms if(P2_0==0) //再次判斷key0按下
{ while(!P2_0);//等待閉合釋放
i=0; //編碼下標(biāo)i清0 run_flag=~run_flag; //標(biāo)志位取反
} } if(run_flag==0) //判斷LED運(yùn)行標(biāo)志位
{ P1=led_light1[i++];//點(diǎn)亮LED流水燈
led_delay(); //點(diǎn)亮延時(shí)
if(i==8)i=0; } else { P1=led_light2[i++];//點(diǎn)亮LED流水燈
led_delay(); //點(diǎn)亮延時(shí)
if(i==7)i=0; } } }
第17頁/共62頁2,8051單片機(jī)中斷系統(tǒng)結(jié)構(gòu)第18頁/共62頁(1)哪些事件可以引發(fā)中斷
8051單片機(jī)有5個(gè)中斷源。外部中斷0():由連接在P3.2引腳的外部信號(hào)觸發(fā)定時(shí)/計(jì)數(shù)器0(T0)溢出中斷外部中斷1():由連接在P3.3引腳的外部信號(hào)觸發(fā)定時(shí)/計(jì)數(shù)器1(T1)溢出中斷串行口中斷:由發(fā)送中斷TXD和接收中斷RXD組成 當(dāng)它們有中斷請(qǐng)求發(fā)出時(shí),將相應(yīng)的中斷標(biāo)志IE0、TF0、IE1、TF1、TI、RI自動(dòng)置位,單片機(jī)CPU根據(jù)中斷標(biāo)志位情況判別是哪個(gè)中斷源發(fā)出的中斷請(qǐng)求。中斷標(biāo)志位存放在特殊功能寄存器TCON、SCON中。第19頁/共62頁(2)中斷標(biāo)志
TCON第20頁/共62頁 SCON第21頁/共62頁(3)中斷允許與禁止
IE第22頁/共62頁(1)EA:總中斷允許控制。當(dāng)EA=1時(shí),開放所有中斷,此時(shí)各中斷源的允許和禁止通過相應(yīng)的中斷允許位單獨(dú)加以控制;當(dāng)EA=0時(shí),禁止所有中斷。(2)ES:允許或禁止串行口中斷控制位。ES=1,允許中斷;ES=0,禁止中斷。(3)ET1:允許或禁止定時(shí)器T1溢出中斷控制位。ET1=1,允許中斷;ET1=0,禁止中斷。(4)EX1:允許或禁止中斷控制位。EX1=1,允許中斷;EX1=0,禁止中斷。(5)ET0:允許或禁止定時(shí)器T0溢出中斷控制位。ET0=1,允許中斷;ET0=0,禁止中斷。(6)EX0:允許或禁止中斷控制位。EX0=1,允許中斷;EX0=0,禁止中斷。第23頁/共62頁(4)中斷的響應(yīng)條件
首先中斷源有請(qǐng)求。其次編程設(shè)置單片機(jī)CPU允許所有中斷源請(qǐng)求(EA=1),并且中斷允許寄存器IE相應(yīng)位置為1。這樣,在每個(gè)機(jī)器周期內(nèi),單片機(jī)對(duì)所有中斷源進(jìn)行順序檢測(cè),并找到所有有效的中斷請(qǐng)求,對(duì)其優(yōu)先級(jí)排隊(duì)。單片機(jī)在緊接著下一個(gè)機(jī)器周期響應(yīng)中斷條件是:1無同級(jí)或更高級(jí)中斷占用CPU控制權(quán);2當(dāng)前指令執(zhí)行完畢;3如果當(dāng)前指令為RETI或需訪問IE、IP的指令,執(zhí)行完該指令且緊隨其后的一條指令也已執(zhí)行完畢。否則,單片機(jī)將放棄對(duì)中斷請(qǐng)求的響應(yīng)。第24頁/共62頁(5)中斷響應(yīng)過程
中斷的響應(yīng)過程由單片機(jī)CPU控制,自動(dòng)完成,具體有如下幾個(gè)步驟:執(zhí)行一個(gè)硬件子程序調(diào)用,處理優(yōu)先級(jí)最高的中斷請(qǐng)求,清除中斷請(qǐng)求標(biāo)志位(TI和RI除外);硬件子程序?qū)纹瑱C(jī)當(dāng)前執(zhí)行的內(nèi)容的地址壓入堆棧,轉(zhuǎn)入執(zhí)行相應(yīng)中斷服務(wù)程序的第一條指令。中斷處理程序從入口地址開始一直執(zhí)行到最后為止;系統(tǒng)返回原來被打斷的程序處開始繼續(xù)執(zhí)行。第25頁/共62頁3,中斷編程結(jié)構(gòu)(1)編寫中斷初始化程序 為使單片機(jī)CPU在執(zhí)行主程序過程中能夠響應(yīng)中斷,就必須先對(duì)使用中斷的相關(guān)寄存器(TMOD、SCON、IE等)進(jìn)行初始化。
【例5-3】假設(shè)單片機(jī)系統(tǒng)允許外部中斷0、定時(shí)/計(jì)數(shù)器T0中斷,并設(shè)定采用邊沿觸發(fā),則主程序中的中斷初始化程序如下:
IT0=1; //設(shè)置為下降沿觸發(fā)
EX0=1; //允許中斷
ET0=1; //允許T0中斷
EA=1; //開放所有中斷第26頁/共62頁(2)編寫中斷服務(wù)程序中斷程序入口。C51規(guī)定了8051單片機(jī)每種中斷類型對(duì)應(yīng)中斷服務(wù)程序的入口編號(hào)中斷類型C51中斷處理程序的中斷號(hào)外部中斷00定時(shí)/計(jì)數(shù)器0溢出中斷1外部中斷12定時(shí)/計(jì)數(shù)器1溢出中斷3串行口中斷4第27頁/共62頁現(xiàn)場(chǎng)保護(hù)。如果中斷服務(wù)程序中要使用與主程序有關(guān)的寄存器,那么CPU在執(zhí)行中斷服務(wù)程序之前要保護(hù)這些寄存器的內(nèi)容,即“保護(hù)現(xiàn)場(chǎng)”,中斷返回時(shí)再恢復(fù)它們的值。在使用KeiluVison4集成開發(fā)環(huán)境時(shí),其C51編譯器為中斷服務(wù)程序提供自動(dòng)現(xiàn)場(chǎng)保護(hù)以及返回時(shí)內(nèi)容恢復(fù)的功能,為用戶編程提供了方便。第28頁/共62頁常用的中斷服務(wù)程序的結(jié)構(gòu)如下。void中斷程序名()interrupt中斷號(hào)usingn { ……;}
其中“中斷程序名”最好依據(jù)中斷服務(wù)程序的功能,取一個(gè)比較直觀淺顯的名稱;“interrupt”是中斷服務(wù)程序的關(guān)鍵字;“中斷號(hào)”則根據(jù)表5-1所示,如果使用外部事件0中斷,則“中斷號(hào)”為0;using定義工作寄存器組;n為寄存器組編號(hào)(0~3),默認(rèn)為0;“{}”內(nèi)部為中斷服務(wù)要執(zhí)行的程序。第29頁/共62頁4,按鍵與外部事件中斷(1)IT0:設(shè)置為1,選擇外部中斷0由下降沿觸發(fā),即當(dāng)出現(xiàn)一個(gè)下降沿表示有一個(gè)外部中斷0的請(qǐng)求信號(hào)。為什么將IT0設(shè)置為1呢?任務(wù)1學(xué)習(xí)得知(圖6-3),按鍵按下將會(huì)產(chǎn)生一個(gè)從高電平到低電平的邊沿跳變(稱為“下降沿”),按鍵松開產(chǎn)生從低電平到高電平的邊沿跳變(稱為“上升沿”)。因此1次按鍵信號(hào)(產(chǎn)生一次下降沿)正好轉(zhuǎn)化成外部中斷0信號(hào)。(2)IE0:無需初始,它由硬件自動(dòng)設(shè)置。(3)EX0:設(shè)置為1,即允許CPU響應(yīng)外部中斷0請(qǐng)求。(4)EA:設(shè)置為1,允許CPU響應(yīng)所有中斷請(qǐng)求。第30頁/共62頁1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第31頁/共62頁硬件電路圖第32頁/共62頁(1)程序流程 主程序根據(jù)標(biāo)志位狀態(tài),無限循環(huán)執(zhí)行LED流水燈程序;按鍵的判斷轉(zhuǎn)化成中斷處理,按下按鍵則意味著一次中斷事件發(fā)生,單片機(jī)處理按鍵任務(wù),即跳轉(zhuǎn)到INT0中斷處理程序中,交替將LED流水燈標(biāo)志位置1/清0。第33頁/共62頁主程序設(shè)計(jì):
voidmain(){ IT0=1; //設(shè)置外部中斷0觸發(fā)方式位,1為邊沿觸發(fā)
EX0=1; //外部中斷0中斷允許位
EA=1; //允許總中斷標(biāo)志位
while(1) { if(run_flag==0) //判斷運(yùn)行標(biāo)志位狀態(tài)
{ P1=led_light1[i++]; delay(); if(i==8)i=0; } else { P1=led_light2[i++];//點(diǎn)亮LED流水燈
delay(); //點(diǎn)亮延時(shí)
if(i==7)i=0; } } }第34頁/共62頁中斷程序:voidint0()interrupt0 //中斷服務(wù)函數(shù)入口{ EX0=0; i=0; run_flag=~run_flag; //每按一下按鍵,行標(biāo)志位取反
EX0=1; }第35頁/共62頁運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真第36頁/共62頁任務(wù)3矩陣式鍵盤設(shè)計(jì)任務(wù)描述:任務(wù)分析:
當(dāng)嵌入式產(chǎn)品、設(shè)備中的按鍵數(shù)目較多時(shí),將采用更普遍的按鍵設(shè)計(jì)方法—矩陣式鍵盤。本任務(wù)要求運(yùn)用矩陣式鍵盤的設(shè)計(jì)方法設(shè)計(jì)9個(gè)按鍵控制點(diǎn)亮1個(gè)數(shù)碼管分別顯示1~9。
獨(dú)立式鍵盤的每個(gè)按鍵都要獨(dú)占一位I/O,當(dāng)按鍵較多就會(huì)嚴(yán)重耗費(fèi)單片機(jī)的I/O資源。比如計(jì)算機(jī)的鍵盤功能有100多個(gè),如果采用獨(dú)立式方法設(shè)計(jì),就需要100多個(gè)I/O,因此獨(dú)立式鍵盤設(shè)計(jì)在按鍵較多的情況下不再適合。本任務(wù)將探討新的方法—矩陣式鍵盤設(shè)計(jì),盡可能少占用I/O資源又保證設(shè)計(jì)的效果。第37頁/共62頁矩陣式鍵盤工作原理及應(yīng)用矩陣式鍵盤是利用幾根I/O口線作為列,幾根作為行,行跟列相交叉,在交叉點(diǎn)用按鍵連接列和行的I/O口線。第38頁/共62頁2341掃描循環(huán)第39頁/共62頁
矩陣式鍵盤的工作原理是單片機(jī)通過定時(shí)掃描的方式來查詢按鍵的狀態(tài),如先從行掃描,在掃描第一行的時(shí)候查詢?cè)谶@一行上與列相交叉的按鍵有沒有被按下,如果沒有按鍵按下就以掃描第一行的方式掃描第二行,這樣循環(huán)掃描所有的行,如果有就作出相應(yīng)的處理,處理實(shí)現(xiàn)后再繼續(xù)重新掃描。由于在掃描第1行的時(shí)候P2.3=0,但行P2.3與列P2.7交叉處的按鍵被按下時(shí),P2.7就會(huì)從本來的高電平變?yōu)榈碗娖?從而確定是哪個(gè)按鍵被按下.第40頁/共62頁應(yīng)用舉例:例5-5第41頁/共62頁 #define Portkey P2 //鍵盤控制端列線P2.0P2.1 #define KeyColm1 P2_2 //行線P2.2P2.3 Portkey=0xff; //矩陣按鍵全輸出1 KeyColm1=0; //選擇掃描第一行
key_temp=Portkey; //讀按鍵控制端
key_temp=key_temp&0x03; //0000,0011讀取列線鍵值
if(key_temp!=0x03) //如果鍵值不等于0x03 { key_delay(); //去抖延時(shí)
key_temp=Portkey; //讀按鍵控制端
key_temp=key_temp&0x03; //0000,0111讀取列線鍵值
if(key_temp!=0x03) //如果鍵值仍不等于0x03 { switch(key_temp) //對(duì)讀取的鍵盤分配相應(yīng)鍵碼
{ case0x02: //00000010,key0被按下
break; case0x01: //00000001,key1被按
break; } } }第42頁/共62頁1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第43頁/共62頁硬件電路圖第44頁/共62頁(1)程序流程
程序設(shè)計(jì)最重要的部分就是矩陣鍵盤的掃描,此電路為3×3鍵盤,編程從行開始逐行掃描,掃描至第三行,重新開始循環(huán)第一行掃描。
第45頁/共62頁
主程序設(shè)計(jì):
main() { key=9; //初始顯示關(guān)閉
while(1) { Portkey=0xff; //矩陣按鍵全輸出1 KeyColm1=0; //選擇掃描第一行
key_temp=Portkey; //讀按鍵控制端
key_temp=key_temp&0x07; //0000,0111讀取鍵值
if(key_temp!=0x07) //如果鍵值不等于0x07 { key_delay(); //去抖延時(shí)
key_temp=Portkey; //讀按鍵控制端
key_temp=key_temp&0x07; //0000,0111讀取鍵值
if(key_temp!=0x07) //如果鍵值仍不等于0x07 { switch(key_temp) //對(duì)讀取的鍵盤分配相應(yīng)鍵碼
{ case0x06: //00000110,k0被按下
key=0; //顯示內(nèi)容變量
break; case0x05: //00000101,k1被按下
key=1; break; case0x03: //00000011,k2被按下
key=2; break; } } }
……;第46頁/共62頁運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真【課堂練習(xí)】構(gòu)建2×2矩陣式鍵盤(K0、K1、K2、K3),控制2個(gè)共陽極數(shù)碼管對(duì)應(yīng)顯示23、68、77、19。第47頁/共62頁任務(wù)4多個(gè)外部中斷設(shè)計(jì)任務(wù)描述:任務(wù)分析:
在實(shí)際項(xiàng)目設(shè)計(jì)中,有些時(shí)候可能需要將不止一個(gè)事件設(shè)計(jì)成中斷處理任務(wù),這就涉及到多個(gè)中斷并存的情況。本任務(wù)要求設(shè)計(jì)兩個(gè)按鍵分別控制LED流水燈工作流程,當(dāng)k0按下,流水燈從兩頭向中間運(yùn)行,達(dá)到中間返回兩頭,來回往返;當(dāng)k1按下,流水燈先點(diǎn)亮紅燈,再點(diǎn)亮藍(lán)燈,即重復(fù)點(diǎn)亮紅燈、藍(lán)燈。
按鍵控制流水燈工作狀態(tài),不能采用獨(dú)立式按鍵設(shè)計(jì)。因此兩個(gè)按鍵都應(yīng)運(yùn)用“中斷”的設(shè)計(jì)方法,89C51有INT0、INT1兩個(gè)外部中斷,可以滿足兩個(gè)按鍵的設(shè)計(jì)要求。
第48頁/共62頁中斷優(yōu)先級(jí)當(dāng)幾個(gè)中斷源同時(shí)向單片機(jī)CPU發(fā)出中斷請(qǐng)求時(shí),CPU應(yīng)優(yōu)先響應(yīng)最需緊急處理的中斷請(qǐng)求。為此,需要規(guī)定各個(gè)中斷源的優(yōu)先級(jí),使CPU在多個(gè)中斷源同時(shí)發(fā)出中斷請(qǐng)求時(shí)能找到優(yōu)先級(jí)最高的中斷源,響應(yīng)它的中斷請(qǐng)求。高優(yōu)先級(jí)的中斷請(qǐng)求處理完畢以后,再響應(yīng)優(yōu)先級(jí)低的中斷請(qǐng)求。中斷源的響應(yīng)優(yōu)先級(jí)由寄存器IP確定,中斷系統(tǒng)可以在IP定義兩個(gè)優(yōu)先級(jí)水平,即高優(yōu)先級(jí)水平和低優(yōu)先級(jí)水平;同時(shí)規(guī)定了同一水平下不同中斷源的優(yōu)先級(jí)。第49頁/共62頁特殊功能寄存器IP第50頁/共62頁1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第51頁/共62頁硬件電路圖第52頁/共62頁兩個(gè)按鍵對(duì)應(yīng)為外部中斷0、外部中斷1,因此鍵盤電路必須設(shè)計(jì)在外部中斷口上,如圖5-30示將按鍵k0、k1分別設(shè)計(jì)在P3.2/INT0、P3.3/INT1管腳上,LED電路依然設(shè)計(jì)在P1口上。第53頁/共62頁(1)程序流程 由于兩個(gè)按鍵分別控制流水燈不同運(yùn)行狀態(tài),因此程序設(shè)計(jì)中采用兩個(gè)運(yùn)行標(biāo)志位進(jìn)行相應(yīng)的判斷;而兩個(gè)按鍵的都轉(zhuǎn)化成中斷處理,按下按鍵k0,代表INT0中斷事件發(fā)生,按下按鍵k1,代表INT1中斷事件發(fā)生,單片機(jī)響應(yīng)按鍵,即跳轉(zhuǎn)到響應(yīng)中斷的處理程序中,將對(duì)應(yīng)的運(yùn)行標(biāo)志位置1。在使用“中斷”時(shí),都應(yīng)初始兩個(gè)中斷相關(guān)的寄存器。第54頁/共62頁主程序設(shè)計(jì):main(){ IT0=1; //設(shè)置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版數(shù)學(xué)七年級(jí)下冊(cè)3.5《整式的化簡》聽評(píng)課記錄
- 蘇科版九年級(jí)數(shù)學(xué)聽評(píng)課記錄:第32講 正多邊形的外接圓
- 青島版數(shù)學(xué)七年級(jí)上冊(cè)3.2《有理數(shù)的乘法與除法》聽評(píng)課記錄3
- 一年級(jí)下冊(cè)數(shù)學(xué)聽評(píng)課記錄《看一看(一)》4 北師大版
- 部編版八年級(jí)歷史(上)《第17課 中國工農(nóng)紅軍長征》聽課評(píng)課記錄
- 華師大版數(shù)學(xué)九年級(jí)下冊(cè)《復(fù)習(xí)題》聽評(píng)課記錄4
- 川教版歷史九年級(jí)下冊(cè)第3課《日本明治維新》聽課評(píng)課記錄
- 蘇科版數(shù)學(xué)九年級(jí)下冊(cè)《6.2 黃金分割》聽評(píng)課記錄
- 小學(xué)二年級(jí)數(shù)學(xué)口算訓(xùn)練
- 小學(xué)二年級(jí)上冊(cè)數(shù)學(xué)除法口算題
- 中央2025年交通運(yùn)輸部所屬事業(yè)單位招聘261人筆試歷年參考題庫附帶答案詳解
- 江蘇省蘇州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 銷售與銷售目標(biāo)管理制度
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計(jì)劃
- 2025年技術(shù)員個(gè)人工作計(jì)劃例文(四篇)
- 2025年第一次工地開工會(huì)議主要議程開工大吉模板
- 第16課抗日戰(zhàn)爭(zhēng)課件-人教版高中歷史必修一
- 對(duì)口升學(xué)語文模擬試卷(9)-江西省(解析版)
- 無人機(jī)運(yùn)營方案
- 糖尿病高滲昏迷指南
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
評(píng)論
0/150
提交評(píng)論