單片機(jī)按鍵模塊設(shè)計(jì)_第1頁(yè)
單片機(jī)按鍵模塊設(shè)計(jì)_第2頁(yè)
單片機(jī)按鍵模塊設(shè)計(jì)_第3頁(yè)
單片機(jī)按鍵模塊設(shè)計(jì)_第4頁(yè)
單片機(jī)按鍵模塊設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

會(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)簡(jiǎn)述定時(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)簡(jiǎn)述DS1302讀取時(shí)間的編程過(guò)程?第1頁(yè)/共62頁(yè)本單元任務(wù)任務(wù)1獨(dú)立式鍵盤(pán)設(shè)計(jì)任務(wù)2鍵盤(pán)中斷設(shè)計(jì)任務(wù)3矩陣式鍵盤(pán)設(shè)計(jì)任務(wù)4多個(gè)外部中斷設(shè)計(jì)第2頁(yè)/共62頁(yè)任務(wù)1獨(dú)立式鍵盤(pán)設(shè)計(jì)任務(wù)描述:任務(wù)分析:

眾多嵌入式單片機(jī)系統(tǒng)、嵌入式單片機(jī)產(chǎn)品設(shè)備中,鍵盤(pán)模塊都是必不可少的,比如手機(jī)及各種智能家電等。本任務(wù)通過(guò)按鍵控制點(diǎn)亮流水燈(8個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)LED),學(xué)習(xí)最簡(jiǎn)單的鍵盤(pán)—獨(dú)立式按鍵設(shè)計(jì)方法。

鍵盤(pán)實(shí)際上是一組開(kāi)關(guān)的集合:當(dāng)鍵按下時(shí),兩根導(dǎo)線接通;釋放時(shí),兩根導(dǎo)線不通。8個(gè)按鍵的鍵盤(pán)電路可考慮在P2口上設(shè)計(jì),8個(gè)LED電路仍然安裝在單片機(jī)P1口。8個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)LED,按下按鍵則點(diǎn)亮對(duì)應(yīng)的燈。

第3頁(yè)/共62頁(yè)獨(dú)立式鍵盤(pán)工作原理及應(yīng)用獨(dú)立式鍵盤(pán)的組成是由若干個(gè)按鍵與單片機(jī)的I/O口一一的對(duì)應(yīng)連接,然后通過(guò)讀取單片機(jī)I/O的電平狀態(tài)來(lái)確認(rèn)哪個(gè)對(duì)應(yīng)的按鍵被按下,一般一個(gè)獨(dú)立式按鍵對(duì)應(yīng)一個(gè)功能,可以通過(guò)按鍵的組合來(lái)實(shí)現(xiàn)多個(gè)功能。P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7key1key2key3key0key4key5key6key7第4頁(yè)/共62頁(yè)抖動(dòng):當(dāng)用手按下一個(gè)鍵時(shí),往往出現(xiàn)按鍵在閉合和斷開(kāi)位置之間來(lái)回跳動(dòng)多次才能到閉合穩(wěn)定狀態(tài)的現(xiàn)象;在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類(lèi)似的情況,這種情況就是抖動(dòng)。按下一個(gè)鍵時(shí)產(chǎn)生前沿抖動(dòng),釋放一個(gè)鍵時(shí)產(chǎn)生后沿抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間隨鍵盤(pán)簧片的材料和操作員而異,通常在5~10ms。而5~10ms已經(jīng)對(duì)程序進(jìn)行多次循環(huán)掃描執(zhí)行,顯而易見(jiàn),抖動(dòng)問(wèn)題不解決,就會(huì)引起對(duì)閉合鍵的多次識(shí)別。。鍵按下前沿抖動(dòng)后沿抖動(dòng)閉合穩(wěn)定第5頁(yè)/共62頁(yè)應(yīng)用舉例:例5-1第6頁(yè)/共62頁(yè) #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頁(yè)/共62頁(yè)1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第8頁(yè)/共62頁(yè)硬件電路圖第9頁(yè)/共62頁(yè)(1)程序流程

由獨(dú)立式鍵盤(pán)工作原理得知,按鍵是否按下是通過(guò)讀取按鍵對(duì)應(yīng)的IO的電平變化而判斷的,在程序設(shè)計(jì)上,即通過(guò)讀取按鍵對(duì)應(yīng)IO口的電平是否為低(軟件去抖)來(lái)決定哪個(gè)按鍵被按下,當(dāng)判斷key0被按下,則點(diǎn)亮LED0;當(dāng)判斷key1被按下,則點(diǎn)亮LED1……。

第10頁(yè)/共62頁(yè)主程序設(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頁(yè)/共62頁(yè)運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真第12頁(yè)/共62頁(yè)任務(wù)2鍵盤(pán)中斷設(shè)計(jì)任務(wù)描述:任務(wù)分析:

項(xiàng)目組掌握獨(dú)立式鍵盤(pán)設(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)行。通過(guò)前面單元的學(xué)習(xí)得知,這兩個(gè)功能在主程序中無(wú)限循環(huán)判斷執(zhí)行,正常人完成一次按鍵的時(shí)間需要20ms,而LED流水燈運(yùn)行頻率應(yīng)小于50Hz(即應(yīng)大于20ms走一個(gè)燈,否則運(yùn)行太快人眼無(wú)法識(shí)別),那么如果單片機(jī)CPU在執(zhí)行流水燈顯示延時(shí)程序期間,正好發(fā)生按鍵,CPU無(wú)法運(yùn)行按鍵掃描程序而導(dǎo)致按鍵判斷的丟失,如果1s或更長(zhǎng)時(shí)間走一個(gè)燈,那么丟失按鍵的現(xiàn)象將更加嚴(yán)重。由此可見(jiàn)普通的程序查詢(xún)獨(dú)立式按鍵設(shè)計(jì)方法在此任務(wù)設(shè)計(jì)是無(wú)法勝任的。本任務(wù)將介紹單片機(jī)重要的內(nèi)部資源—中斷系統(tǒng),它將有效解決上述問(wèn)題。

第13頁(yè)/共62頁(yè)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)行方式,即按鍵通過(guò)標(biāo)志位間接控制LED流水燈的運(yùn)行方式。每次按下按鍵則把標(biāo)志位取反,以達(dá)到控制LED流水燈的運(yùn)行。第14頁(yè)/共62頁(yè)第15頁(yè)/共62頁(yè)第16頁(yè)/共62頁(yè)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頁(yè)/共62頁(yè)2,8051單片機(jī)中斷系統(tǒng)結(jié)構(gòu)第18頁(yè)/共62頁(yè)(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頁(yè)/共62頁(yè)(2)中斷標(biāo)志

TCON第20頁(yè)/共62頁(yè) SCON第21頁(yè)/共62頁(yè)(3)中斷允許與禁止

IE第22頁(yè)/共62頁(yè)(1)EA:總中斷允許控制。當(dāng)EA=1時(shí),開(kāi)放所有中斷,此時(shí)各中斷源的允許和禁止通過(guò)相應(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頁(yè)/共62頁(yè)(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無(wú)同級(jí)或更高級(jí)中斷占用CPU控制權(quán);2當(dāng)前指令執(zhí)行完畢;3如果當(dāng)前指令為RETI或需訪問(wèn)IE、IP的指令,執(zhí)行完該指令且緊隨其后的一條指令也已執(zhí)行完畢。否則,單片機(jī)將放棄對(duì)中斷請(qǐng)求的響應(yīng)。第24頁(yè)/共62頁(yè)(5)中斷響應(yīng)過(guò)程

中斷的響應(yīng)過(guò)程由單片機(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ù)程序的第一條指令。中斷處理程序從入口地址開(kāi)始一直執(zhí)行到最后為止;系統(tǒng)返回原來(lái)被打斷的程序處開(kāi)始繼續(xù)執(zhí)行。第25頁(yè)/共62頁(yè)3,中斷編程結(jié)構(gòu)(1)編寫(xiě)中斷初始化程序 為使單片機(jī)CPU在執(zhí)行主程序過(guò)程中能夠響應(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; //開(kāi)放所有中斷第26頁(yè)/共62頁(yè)(2)編寫(xiě)中斷服務(wù)程序中斷程序入口。C51規(guī)定了8051單片機(jī)每種中斷類(lèi)型對(duì)應(yīng)中斷服務(wù)程序的入口編號(hào)中斷類(lèi)型C51中斷處理程序的中斷號(hào)外部中斷00定時(shí)/計(jì)數(shù)器0溢出中斷1外部中斷12定時(shí)/計(jì)數(shù)器1溢出中斷3串行口中斷4第27頁(yè)/共62頁(yè)現(xiàn)場(chǎng)保護(hù)。如果中斷服務(wù)程序中要使用與主程序有關(guān)的寄存器,那么CPU在執(zhí)行中斷服務(wù)程序之前要保護(hù)這些寄存器的內(nèi)容,即“保護(hù)現(xiàn)場(chǎng)”,中斷返回時(shí)再恢復(fù)它們的值。在使用KeiluVison4集成開(kāi)發(fā)環(huán)境時(shí),其C51編譯器為中斷服務(wù)程序提供自動(dòng)現(xiàn)場(chǎng)保護(hù)以及返回時(shí)內(nèi)容恢復(fù)的功能,為用戶(hù)編程提供了方便。第28頁(yè)/共62頁(yè)常用的中斷服務(wù)程序的結(jié)構(gòu)如下。void中斷程序名()interrupt中斷號(hào)usingn { ……;}

其中“中斷程序名”最好依據(jù)中斷服務(wù)程序的功能,取一個(gè)比較直觀淺顯的名稱(chēng);“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頁(yè)/共62頁(yè)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ēng)為“下降沿”),按鍵松開(kāi)產(chǎn)生從低電平到高電平的邊沿跳變(稱(chēng)為“上升沿”)。因此1次按鍵信號(hào)(產(chǎn)生一次下降沿)正好轉(zhuǎn)化成外部中斷0信號(hào)。(2)IE0:無(wú)需初始,它由硬件自動(dòng)設(shè)置。(3)EX0:設(shè)置為1,即允許CPU響應(yīng)外部中斷0請(qǐng)求。(4)EA:設(shè)置為1,允許CPU響應(yīng)所有中斷請(qǐng)求。第30頁(yè)/共62頁(yè)1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第31頁(yè)/共62頁(yè)硬件電路圖第32頁(yè)/共62頁(yè)(1)程序流程 主程序根據(jù)標(biāo)志位狀態(tài),無(wú)限循環(huán)執(zhí)行LED流水燈程序;按鍵的判斷轉(zhuǎn)化成中斷處理,按下按鍵則意味著一次中斷事件發(fā)生,單片機(jī)處理按鍵任務(wù),即跳轉(zhuǎn)到INT0中斷處理程序中,交替將LED流水燈標(biāo)志位置1/清0。第33頁(yè)/共62頁(yè)主程序設(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頁(yè)/共62頁(yè)中斷程序:voidint0()interrupt0 //中斷服務(wù)函數(shù)入口{ EX0=0; i=0; run_flag=~run_flag; //每按一下按鍵,行標(biāo)志位取反

EX0=1; }第35頁(yè)/共62頁(yè)運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真第36頁(yè)/共62頁(yè)任務(wù)3矩陣式鍵盤(pán)設(shè)計(jì)任務(wù)描述:任務(wù)分析:

當(dāng)嵌入式產(chǎn)品、設(shè)備中的按鍵數(shù)目較多時(shí),將采用更普遍的按鍵設(shè)計(jì)方法—矩陣式鍵盤(pán)。本任務(wù)要求運(yùn)用矩陣式鍵盤(pán)的設(shè)計(jì)方法設(shè)計(jì)9個(gè)按鍵控制點(diǎn)亮1個(gè)數(shù)碼管分別顯示1~9。

獨(dú)立式鍵盤(pán)的每個(gè)按鍵都要獨(dú)占一位I/O,當(dāng)按鍵較多就會(huì)嚴(yán)重耗費(fèi)單片機(jī)的I/O資源。比如計(jì)算機(jī)的鍵盤(pán)功能有100多個(gè),如果采用獨(dú)立式方法設(shè)計(jì),就需要100多個(gè)I/O,因此獨(dú)立式鍵盤(pán)設(shè)計(jì)在按鍵較多的情況下不再適合。本任務(wù)將探討新的方法—矩陣式鍵盤(pán)設(shè)計(jì),盡可能少占用I/O資源又保證設(shè)計(jì)的效果。第37頁(yè)/共62頁(yè)矩陣式鍵盤(pán)工作原理及應(yīng)用矩陣式鍵盤(pán)是利用幾根I/O口線作為列,幾根作為行,行跟列相交叉,在交叉點(diǎn)用按鍵連接列和行的I/O口線。第38頁(yè)/共62頁(yè)2341掃描循環(huán)第39頁(yè)/共62頁(yè)

矩陣式鍵盤(pán)的工作原理是單片機(jī)通過(guò)定時(shí)掃描的方式來(lái)查詢(xún)按鍵的狀態(tài),如先從行掃描,在掃描第一行的時(shí)候查詢(xún)?cè)谶@一行上與列相交叉的按鍵有沒(méi)有被按下,如果沒(méi)有按鍵按下就以掃描第一行的方式掃描第二行,這樣循環(huán)掃描所有的行,如果有就作出相應(yīng)的處理,處理實(shí)現(xiàn)后再繼續(xù)重新掃描。由于在掃描第1行的時(shí)候P2.3=0,但行P2.3與列P2.7交叉處的按鍵被按下時(shí),P2.7就會(huì)從本來(lái)的高電平變?yōu)榈碗娖?從而確定是哪個(gè)按鍵被按下.第40頁(yè)/共62頁(yè)應(yīng)用舉例:例5-5第41頁(yè)/共62頁(yè) #define Portkey P2 //鍵盤(pán)控制端列線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ì)讀取的鍵盤(pán)分配相應(yīng)鍵碼

{ case0x02: //00000010,key0被按下

break; case0x01: //00000001,key1被按

break; } } }第42頁(yè)/共62頁(yè)1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第43頁(yè)/共62頁(yè)硬件電路圖第44頁(yè)/共62頁(yè)(1)程序流程

程序設(shè)計(jì)最重要的部分就是矩陣鍵盤(pán)的掃描,此電路為3×3鍵盤(pán),編程從行開(kāi)始逐行掃描,掃描至第三行,重新開(kāi)始循環(huán)第一行掃描。

第45頁(yè)/共62頁(yè)

主程序設(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ì)讀取的鍵盤(pán)分配相應(yīng)鍵碼

{ case0x06: //00000110,k0被按下

key=0; //顯示內(nèi)容變量

break; case0x05: //00000101,k1被按下

key=1; break; case0x03: //00000011,k2被按下

key=2; break; } } }

……;第46頁(yè)/共62頁(yè)運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真【課堂練習(xí)】構(gòu)建2×2矩陣式鍵盤(pán)(K0、K1、K2、K3),控制2個(gè)共陽(yáng)極數(shù)碼管對(duì)應(yīng)顯示23、68、77、19。第47頁(yè)/共62頁(yè)任務(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á)到中間返回兩頭,來(lái)回往返;當(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è)外部中斷,可以滿(mǎn)足兩個(gè)按鍵的設(shè)計(jì)要求。

第48頁(yè)/共62頁(yè)中斷優(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頁(yè)/共62頁(yè)特殊功能寄存器IP第50頁(yè)/共62頁(yè)1.Proteus電路設(shè)計(jì)2.KeilC51程序設(shè)計(jì)3.Proteus-Keil聯(lián)合調(diào)試仿真任務(wù)實(shí)施第51頁(yè)/共62頁(yè)硬件電路圖第52頁(yè)/共62頁(yè)兩個(gè)按鍵對(duì)應(yīng)為外部中斷0、外部中斷1,因此鍵盤(pán)電路必須設(shè)計(jì)在外部中斷口上,如圖5-30示將按鍵k0、k1分別設(shè)計(jì)在P3.2/INT0、P3.3/INT1管腳上,LED電路依然設(shè)計(jì)在P1口上。第53頁(yè)/共62頁(yè)(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頁(yè)/共62頁(yè)主程序設(shè)計(jì):main(){ IT0=1; //設(shè)置

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論