版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單元5 按鍵模塊設(shè)計(jì)回顧 1,數(shù)碼管顯示原理?,數(shù)碼管顯示原理?2,靜態(tài)數(shù)碼管工作原理?,靜態(tài)數(shù)碼管工作原理?3,動(dòng)態(tài)數(shù)碼管工作原理?,動(dòng)態(tài)數(shù)碼管工作原理?4,AT89C51有幾個(gè)定時(shí)器?有幾個(gè)定時(shí)器?各是多少位的?各是多少位的?請(qǐng)請(qǐng)簡(jiǎn)述定時(shí)器實(shí)現(xiàn)定時(shí)原理?簡(jiǎn)述定時(shí)器實(shí)現(xiàn)定時(shí)原理?5,8051單片機(jī)定時(shí)單片機(jī)定時(shí)/計(jì)數(shù)器工作方式有多少種?計(jì)數(shù)器工作方式有多少種?6,如何設(shè)置,如何設(shè)置8051單片機(jī)工作在定時(shí)單片機(jī)工作在定時(shí)/計(jì)數(shù)模式下?計(jì)數(shù)模式下?7,如何啟動(dòng)定時(shí)器工作?,如何啟動(dòng)定時(shí)器工作?8,請(qǐng)簡(jiǎn)述,請(qǐng)簡(jiǎn)述DS1302讀取時(shí)間的編程過程?讀取時(shí)間的編程過程?本單元任務(wù)p任務(wù)1 獨(dú)立式鍵盤設(shè)
2、計(jì) p任務(wù)2 鍵盤中斷設(shè)計(jì)p任務(wù)3 矩陣式鍵盤設(shè)計(jì)p任務(wù)4 多個(gè)外部中斷設(shè)計(jì)任務(wù)1 獨(dú)立式鍵盤設(shè)計(jì) 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:眾多嵌入式單片機(jī)系統(tǒng)、嵌入式單片機(jī)產(chǎn)品設(shè)備中,鍵盤模塊都是眾多嵌入式單片機(jī)系統(tǒng)、嵌入式單片機(jī)產(chǎn)品設(shè)備中,鍵盤模塊都是必不可少的,比如手機(jī)及各種智能家電等。本任務(wù)通過按鍵控制點(diǎn)亮流水必不可少的,比如手機(jī)及各種智能家電等。本任務(wù)通過按鍵控制點(diǎn)亮流水燈(燈(8個(gè)按鍵分別對(duì)應(yīng)控制個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)個(gè)LED),學(xué)習(xí)最簡(jiǎn)單的鍵盤),學(xué)習(xí)最簡(jiǎn)單的鍵盤獨(dú)立式按鍵設(shè)獨(dú)立式按鍵設(shè)計(jì)方法。計(jì)方法。 鍵盤實(shí)際上是一組開關(guān)的集合:當(dāng)鍵按下時(shí),兩根導(dǎo)線接通;釋放鍵盤實(shí)際上是一組開
3、關(guān)的集合:當(dāng)鍵按下時(shí),兩根導(dǎo)線接通;釋放時(shí),兩根導(dǎo)線不通。時(shí),兩根導(dǎo)線不通。8個(gè)按鍵的鍵盤電路可考慮在個(gè)按鍵的鍵盤電路可考慮在P2口上設(shè)計(jì),口上設(shè)計(jì),8個(gè)個(gè)LED電電路仍然安裝在單片機(jī)路仍然安裝在單片機(jī)P1口???。8個(gè)按鍵分別對(duì)應(yīng)控制個(gè)按鍵分別對(duì)應(yīng)控制8個(gè)個(gè)LED,按下按鍵則點(diǎn),按下按鍵則點(diǎn)亮對(duì)應(yīng)的燈。亮對(duì)應(yīng)的燈。 獨(dú)立式鍵盤工作原理及應(yīng)用 n獨(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.
4、7key1key2key3key0key4key5key6key7q抖動(dòng):抖動(dòng):當(dāng)用手按下一個(gè)鍵時(shí),往往出現(xiàn)按鍵在閉合和斷開位置之當(dāng)用手按下一個(gè)鍵時(shí),往往出現(xiàn)按鍵在閉合和斷開位置之間來回跳動(dòng)多次才能到閉合穩(wěn)定狀態(tài)的現(xiàn)象;在間來回跳動(dòng)多次才能到閉合穩(wěn)定狀態(tài)的現(xiàn)象;在 釋放一個(gè)鍵時(shí),釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類似的情況,這種情況就是抖動(dòng)。按下一個(gè)鍵時(shí)產(chǎn)生前也會(huì)出現(xiàn)類似的情況,這種情況就是抖動(dòng)。按下一個(gè)鍵時(shí)產(chǎn)生前沿抖動(dòng),釋放一個(gè)鍵時(shí)產(chǎn)生后沿抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間隨鍵盤簧沿抖動(dòng),釋放一個(gè)鍵時(shí)產(chǎn)生后沿抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間隨鍵盤簧片的材料和操作員而異,通常在片的材料和操作員而異,通常在510ms。而。而510m
5、s已經(jīng)對(duì)程序已經(jīng)對(duì)程序進(jìn)行多次循環(huán)掃描執(zhí)行,顯而易見,抖動(dòng)問題不解決,就會(huì)引起進(jìn)行多次循環(huán)掃描執(zhí)行,顯而易見,抖動(dòng)問題不解決,就會(huì)引起對(duì)閉合鍵的多次識(shí)別。對(duì)閉合鍵的多次識(shí)別。 。鍵按下前沿抖動(dòng)后沿抖動(dòng)閉合穩(wěn)定應(yīng)用舉例:例5-1 #includeAT89X51.Hvoid main() while(1)if(P2_0=0) /判斷判斷key0被按下被按下key_delay();/去抖延時(shí)去抖延時(shí)10msif(P2_0=0)/再次判斷再次判斷key0按下按下while(!P2_0); /等待閉合釋放等待閉合釋放P1_0=0; /點(diǎn)亮點(diǎn)亮LEDif(P2_1=0) /判斷判斷key1被按下被按下ke
6、y_delay();/去抖延時(shí)去抖延時(shí)10msif(P2_1=0) /再次判斷再次判斷key1按下按下while(!P2_1); /等待閉合釋放等待閉合釋放P1_0=1; /熄滅熄滅LED 開始P2.0=0?軟件延時(shí)10msP2.0=0?閉合釋放?P1.0=0點(diǎn)亮LEDYYYNP2.1=0?軟件延時(shí)10msP2.1=0?閉合釋放?P1.0=1熄滅LEDYYYNNNNNn1. Proteus電路設(shè)計(jì) n2. Keil C51程序設(shè)計(jì) n3. Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)實(shí)施硬件電路圖n(1)程序流程由獨(dú)立式鍵盤工作原理得知,按鍵是否按下是通過讀取按鍵對(duì)應(yīng)的IO的電平變化而判斷的,在
7、程序設(shè)計(jì)上,即通過讀取按鍵對(duì)應(yīng)IO口的電平是否為低(軟件去抖)來決定哪個(gè)按鍵被按下,當(dāng)判斷key0被按下,則點(diǎn)亮LED0;當(dāng)判斷key1被按下,則點(diǎn)亮LED1。 key0按下?key1按下?key2按下?key3按下?key4按下?key5按下?key6按下?key7按下?NNNNNNNN點(diǎn)亮LED0點(diǎn)亮LED1點(diǎn)亮LED2點(diǎn)亮LED3點(diǎn)亮LED4點(diǎn)亮LED5點(diǎn)亮LED6點(diǎn)亮LED7YYYYYYYY開始n主程序設(shè)計(jì):主程序設(shè)計(jì):#includeAT89X51.Hunsigned char code led_light=0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7
8、F;/點(diǎn)亮點(diǎn)亮LED對(duì)應(yīng)的編碼對(duì)應(yīng)的編碼void main() while(1)if(P2_0=0) /判斷判斷key0被按下被按下key_delay();/去抖延時(shí)去抖延時(shí)10msif(P2_0=0)/再次判斷再次判斷key0按下按下while(!P2_0); /等待閉合釋放等待閉合釋放P1=led_light0; /點(diǎn)亮點(diǎn)亮LED0if(P2_1=0) /判斷判斷key1被按下被按下key_delay();/去抖延時(shí)去抖延時(shí)10msif(P2_1=0) /再次判斷再次判斷key1按下按下while(!P2_1); /等待閉合釋放等待閉合釋放P1=led_light1; /點(diǎn)亮點(diǎn)亮LED1;
9、 n運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)2 鍵盤中斷設(shè)計(jì) 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:項(xiàng)目組掌握獨(dú)立式鍵盤設(shè)計(jì)后,現(xiàn)要求用項(xiàng)目組掌握獨(dú)立式鍵盤設(shè)計(jì)后,現(xiàn)要求用1個(gè)按鍵控制流水燈運(yùn)行樣個(gè)按鍵控制流水燈運(yùn)行樣式,初始時(shí)式,初始時(shí)8個(gè)個(gè)LED按從頭到尾方式循環(huán)運(yùn)行,當(dāng)按下按鍵,首尾兩燈點(diǎn)亮按從頭到尾方式循環(huán)運(yùn)行,當(dāng)按下按鍵,首尾兩燈點(diǎn)亮向中間,到中間后返回首尾的循環(huán)運(yùn)行,再次按下按鍵又轉(zhuǎn)為從頭到尾循向中間,到中間后返回首尾的循環(huán)運(yùn)行,再次按下按鍵又轉(zhuǎn)為從頭到尾循環(huán)運(yùn)行環(huán)運(yùn)行,即,即1個(gè)按鍵交替切換流水燈的兩種運(yùn)行樣式。個(gè)按鍵交替切換流水燈的兩種運(yùn)行樣式。 此任務(wù)設(shè)計(jì)有兩個(gè)主要功
10、能模塊,一是按鍵的判斷,二是此任務(wù)設(shè)計(jì)有兩個(gè)主要功能模塊,一是按鍵的判斷,二是LED流水流水燈的運(yùn)行。通過前面單元的學(xué)習(xí)得知,這兩個(gè)功能在主程序中無限循環(huán)判燈的運(yùn)行。通過前面單元的學(xué)習(xí)得知,這兩個(gè)功能在主程序中無限循環(huán)判斷執(zhí)行,正常人完成一次按鍵的時(shí)間需要斷執(zhí)行,正常人完成一次按鍵的時(shí)間需要20ms,而,而LED流水燈運(yùn)行頻率流水燈運(yùn)行頻率應(yīng)小于應(yīng)小于50Hz(即應(yīng)大于(即應(yīng)大于20ms走一個(gè)燈,否則運(yùn)行太快人眼無法識(shí)別),走一個(gè)燈,否則運(yùn)行太快人眼無法識(shí)別),那么如果單片機(jī)那么如果單片機(jī)CPU在執(zhí)行流水燈顯示延時(shí)程序期間,正好發(fā)生按鍵,在執(zhí)行流水燈顯示延時(shí)程序期間,正好發(fā)生按鍵,CPU無法運(yùn)
11、行按鍵掃描程序而導(dǎo)致按鍵判斷的丟失,如果無法運(yùn)行按鍵掃描程序而導(dǎo)致按鍵判斷的丟失,如果1s或更長(zhǎng)時(shí)間走或更長(zhǎng)時(shí)間走一個(gè)燈,那么丟失按鍵的現(xiàn)象將更加嚴(yán)重。由此可見普通的程序查詢獨(dú)立一個(gè)燈,那么丟失按鍵的現(xiàn)象將更加嚴(yán)重。由此可見普通的程序查詢獨(dú)立式按鍵設(shè)計(jì)方法在此任務(wù)設(shè)計(jì)是無法勝任的。本任務(wù)將介紹單片機(jī)重要的式按鍵設(shè)計(jì)方法在此任務(wù)設(shè)計(jì)是無法勝任的。本任務(wù)將介紹單片機(jī)重要的內(nèi)部資源內(nèi)部資源中斷系統(tǒng),它將有效解決上述問題。中斷系統(tǒng),它將有效解決上述問題。 1,中斷的概念n【例5-2】電路如5-10示,8個(gè)LED流水燈安裝在P1口,按鍵K0安裝在P2.0上,采用獨(dú)立式按鍵識(shí)別,實(shí)現(xiàn)任務(wù)描述中要求的功能。
12、 程序分析:主程序有兩個(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)行。 LED運(yùn)行標(biāo)志位=1?按鍵按下?流水燈運(yùn)行模式1LED點(diǎn)亮延時(shí)i自加1i=8?開始Yi清0YLED運(yùn)行標(biāo)志位取反N流水燈運(yùn)行模式2LED點(diǎn)亮延時(shí)i自加1i=7?i清0YYNNNvoid main() while(1)if(P2_0=0) /判斷判斷key0被按下被按下key_delay();/去
13、抖延時(shí)去抖延時(shí)10msif(P2_0=0)/再次判斷再次判斷key0按下按下while(!P2_0); /等待閉合釋放等待閉合釋放i=0;/編碼下標(biāo)編碼下標(biāo)i清清0run_flag= run_flag; /標(biāo)志位取反標(biāo)志位取反if(run_flag=0)/判斷判斷LED運(yùn)行標(biāo)志位運(yùn)行標(biāo)志位 P1=led_light1i+; /點(diǎn)亮點(diǎn)亮LED流水燈流水燈led_delay();/點(diǎn)亮延時(shí)點(diǎn)亮延時(shí)if(i=8)i=0; elseP1=led_light2i+; /點(diǎn)亮點(diǎn)亮LED流水燈流水燈led_delay();/點(diǎn)亮延時(shí)點(diǎn)亮延時(shí)if(i=7)i=0; 2, 8051單片機(jī)中斷系統(tǒng)結(jié)構(gòu) n(1)哪
14、些事件可以引發(fā)中斷哪些事件可以引發(fā)中斷 8051單片機(jī)有5個(gè)中斷源。q外部中斷0():由連接在P3.2引腳的外部信號(hào)觸發(fā)q定時(shí)/計(jì)數(shù)器0(T0)溢出中斷q外部中斷1():由連接在P3.3引腳的外部信號(hào)觸發(fā)q定時(shí)/計(jì)數(shù)器1(T1)溢出中斷q串行口中斷:由發(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中。 n(2)中斷標(biāo)志中斷標(biāo)志 TCON SCON n(3)中斷允許與禁止中斷允許與禁止 IEq(1)EA:總中
15、斷允許控制。當(dāng)EA=1時(shí),開放所有中斷,此時(shí)各中斷源的允許和禁止通過相應(yīng)的中斷允許位單獨(dú)加以控制;當(dāng)EA=0時(shí),禁止所有中斷。q(2)ES:允許或禁止串行口中斷控制位。ES=1,允許中斷;ES=0,禁止中斷。q(3)ET1:允許或禁止定時(shí)器T1溢出中斷控制位。ET1=1,允許中斷;ET1=0,禁止中斷。q(4)EX1:允許或禁止中斷控制位。EX1=1,允許中斷;EX1=0,禁止中斷。q(5)ET0:允許或禁止定時(shí)器T0溢出中斷控制位。ET0=1,允許中斷;ET0=0,禁止中斷。q(6)EX0:允許或禁止中斷控制位。EX0=1,允許中斷;EX0=0,禁止中斷。 n(4)中斷的響應(yīng)條件中斷的響應(yīng)條
16、件首先中斷源有請(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)。 n(5)中斷響應(yīng)過程中斷響應(yīng)過程 中斷的響應(yīng)過程由單片機(jī)CPU控制,自動(dòng)完成,具體有如下幾個(gè)步驟:q執(zhí)行一個(gè)硬件子程序調(diào)用,處理優(yōu)先級(jí)最高的中斷請(qǐng)求,清除
17、中斷請(qǐng)求標(biāo)志位(TI和RI除外);硬件子程序?qū)纹瑱C(jī)當(dāng)前執(zhí)行的內(nèi)容的地址壓入堆棧,轉(zhuǎn)入執(zhí)行相應(yīng)中斷服務(wù)程序的第一條指令。q中斷處理程序從入口地址開始一直執(zhí)行到最后為止;q系統(tǒng)返回原來被打斷的程序處開始繼續(xù)執(zhí)行。 3,中斷編程結(jié)構(gòu) n(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;/開放所有中斷
18、n(2)編寫中斷服務(wù)程序 q中斷程序入口。C51規(guī)定了8051單片機(jī)每種中斷類型對(duì)應(yīng)中斷服務(wù)程序的入口編號(hào)中斷類型中斷類型C51中斷處理程序的中中斷處理程序的中斷號(hào)斷號(hào)外部中斷00定時(shí)/計(jì)數(shù)器0溢出中斷1外部中斷12定時(shí)/計(jì)數(shù)器1溢出中斷3串行口中斷4q現(xiàn)場(chǎng)保護(hù)。如果中斷服務(wù)程序中要使用與主程序有關(guān)的寄存器,那么CPU在執(zhí)行中斷服務(wù)程序之前要保護(hù)這些寄存器的內(nèi)容,即“保護(hù)現(xiàn)場(chǎng)”,中斷返回時(shí)再恢復(fù)它們的值。在使用Keil uVison4集成開發(fā)環(huán)境時(shí),其C51編譯器為中斷服務(wù)程序提供自動(dòng)現(xiàn)場(chǎng)保護(hù)以及返回時(shí)內(nèi)容恢復(fù)的功能,為用戶編程提供了方便。 常用的中斷服務(wù)程序的結(jié)構(gòu)如下。 void 中斷程序名
19、( ) interrupt 中斷號(hào) using n ;其中“中斷程序名”最好依據(jù)中斷服務(wù)程序的功能,取一個(gè)比較直觀淺顯的名稱;“interrupt”是中斷服務(wù)程序的關(guān)鍵字; “中斷號(hào)”則根據(jù)表5-1所示,如果使用外部事件0中斷,則“中斷號(hào)”為0;using定義工作寄存器組;n為寄存器組編號(hào)(03),默認(rèn)為0;“ ”內(nèi)部為中斷服務(wù)要執(zhí)行的程序。 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è)從高電平到低電平的邊沿跳變(稱為“下降沿”),按鍵松開
20、產(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)求。 n1. Proteus電路設(shè)計(jì) n2. Keil C51程序設(shè)計(jì) n3. Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)實(shí)施硬件電路圖n(1)程序流程主程序根據(jù)標(biāo)志位狀態(tài),無限循環(huán)執(zhí)行LED流水燈程序;按鍵的判斷轉(zhuǎn)化成中斷處理,按下按鍵則意味著一次中斷事件發(fā)生,單片機(jī)處理按鍵任務(wù),即跳轉(zhuǎn)到INT0中斷處理程序中,交替將LED流水燈標(biāo)志位置1
21、/清0。 運(yùn)行流水燈led_light1i+LED運(yùn)行標(biāo)志=1?LED點(diǎn)亮延時(shí)i=0i=8?開始NY初始中斷寄存器及變量運(yùn)行流水燈led_light2i+LED點(diǎn)亮延時(shí)i=0i=7?NYYN主程序設(shè)計(jì):主程序設(shè)計(jì):void main() IT0 = 1;/設(shè)置外部中斷設(shè)置外部中斷0觸發(fā)方式位,觸發(fā)方式位,1為邊沿觸發(fā)為邊沿觸發(fā)EX0 = 1; /外部中斷外部中斷0中斷允許位中斷允許位EA = 1;/允許總中斷標(biāo)志位允許總中斷標(biāo)志位while(1)if(run_flag=0)/判斷運(yùn)行標(biāo)志位狀態(tài)判斷運(yùn)行標(biāo)志位狀態(tài)P1 = led_light1i+;delay();if(i=8)i=0;elseP
22、1=led_light2i+; /點(diǎn)亮點(diǎn)亮LED流水燈流水燈delay();/點(diǎn)亮延時(shí)點(diǎn)亮延時(shí)if(i=7)i=0;中斷程序:void int0() interrupt 0/中斷服務(wù)函數(shù)入口EX0 = 0;i=0;run_flag =run_flag;/每按一下按鍵,行標(biāo)志位取反EX0 = 1; 開始LED運(yùn)行標(biāo)志位取反返回禁止INT0中斷允許INT0中斷n運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)3 矩陣式鍵盤設(shè)計(jì) 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:當(dāng)嵌入式產(chǎn)品、設(shè)備中的按鍵數(shù)目較多時(shí),將采用更普遍的按鍵設(shè)當(dāng)嵌入式產(chǎn)品、設(shè)備中的按鍵數(shù)目較多時(shí),將采用更普遍的按鍵設(shè)計(jì)方法計(jì)方法矩陣式
23、鍵盤。本任務(wù)要求運(yùn)用矩陣式鍵盤的設(shè)計(jì)方法設(shè)計(jì)矩陣式鍵盤。本任務(wù)要求運(yùn)用矩陣式鍵盤的設(shè)計(jì)方法設(shè)計(jì)9個(gè)按鍵個(gè)按鍵控制點(diǎn)亮控制點(diǎn)亮1個(gè)數(shù)碼管分別顯示個(gè)數(shù)碼管分別顯示19。 獨(dú)立式鍵盤的每個(gè)按鍵都要獨(dú)占一位獨(dú)立式鍵盤的每個(gè)按鍵都要獨(dú)占一位I/O,當(dāng)按鍵較多就會(huì)嚴(yán)重耗費(fèi),當(dāng)按鍵較多就會(huì)嚴(yán)重耗費(fèi)單片機(jī)的單片機(jī)的I/O資源。比如計(jì)算機(jī)的鍵盤功能有資源。比如計(jì)算機(jī)的鍵盤功能有100多個(gè),如果采用獨(dú)立式方多個(gè),如果采用獨(dú)立式方法設(shè)計(jì),就需要法設(shè)計(jì),就需要100多個(gè)多個(gè)I/O,因此獨(dú)立式鍵盤設(shè)計(jì)在按鍵較多的情況下不,因此獨(dú)立式鍵盤設(shè)計(jì)在按鍵較多的情況下不再適合。本任務(wù)將探討新的方法再適合。本任務(wù)將探討新的方法矩陣
24、式鍵盤設(shè)計(jì),盡可能少占用矩陣式鍵盤設(shè)計(jì),盡可能少占用I/O資源資源又保證設(shè)計(jì)的效果。又保證設(shè)計(jì)的效果。矩陣式鍵盤工作原理及應(yīng)用 n矩陣式鍵盤是利用幾根I/O口線作為列,幾根作為行,行跟列相交叉,在交叉點(diǎn)用按鍵連接列和行的I/O口線。 2341掃描循環(huán)掃描循環(huán)矩陣式鍵盤的工作原理工作原理是單片機(jī)通過定時(shí)掃描的方式來查詢按鍵的狀態(tài),如先從行掃描,在掃描第一行的時(shí)候查詢?cè)谶@一行上與列相交叉的按鍵有沒有被按下,如果沒有按鍵按下就以掃描第一行的方式掃描第二行,這樣循環(huán)掃描所有的行,如果有就作出相應(yīng)的處理,處理實(shí)現(xiàn)后再繼續(xù)重新掃描。由于在掃描第1行的時(shí)候P2.3=0,但行P2.3與列P2.7交叉處的按鍵被
25、按下時(shí),P2.7就會(huì)從本來的高電平變?yōu)榈碗娖?從而確定是哪個(gè)按鍵被按下. 應(yīng)用舉例:例5-5 #define Portkey P2/鍵盤控制端鍵盤控制端 列線列線P2.0 P2.1#define KeyColm1 P2_2/行線行線 P2.2 P2.3 Portkey=0 xff; /矩陣按鍵全輸出矩陣按鍵全輸出1KeyColm1=0; /選擇掃描第一行選擇掃描第一行key_temp=Portkey; /讀按鍵控制端讀按鍵控制端key_temp=key_temp&0 x03;/0000,0011 讀取列線鍵值讀取列線鍵值if(key_temp!=0 x03)/如果鍵值不等于如果鍵值不等
26、于0 x03key_delay();/去抖延時(shí)去抖延時(shí)key_temp=Portkey; /讀按鍵控制端讀按鍵控制端key_temp=key_temp&0 x03;/0000,0111 讀取列線鍵值讀取列線鍵值if(key_temp!=0 x03)/如果鍵值仍不等于如果鍵值仍不等于0 x03switch(key_temp)/對(duì)讀取的鍵盤分配相應(yīng)鍵碼對(duì)讀取的鍵盤分配相應(yīng)鍵碼case 0 x02: /0000 0010,key0被按下被按下break;case 0 x01: /0000 0001,key1被按被按 break; 開始列線IO不全為1軟件延時(shí)10ms列線IO不全為1分析哪根列
27、線IO為0執(zhí)行按鍵對(duì)應(yīng)程序返回NNYY被掃描行線IO=0讀列線IO電平n1. Proteus電路設(shè)計(jì) n2. Keil C51程序設(shè)計(jì) n3. Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)實(shí)施硬件電路圖n(1)程序流程程序設(shè)計(jì)最重要的部分就是矩陣鍵盤的掃描,此電路為33鍵盤,編程從行開始逐行掃描,掃描至第三行,重新開始循環(huán)第一行掃描。 有按鍵按下?掃描第一行執(zhí)行按鍵按下對(duì)應(yīng)程序Y有按鍵按下?掃描第一行執(zhí)行按鍵按下對(duì)應(yīng)程序YNN有按鍵按下?掃描第一行執(zhí)行按鍵按下對(duì)應(yīng)程序Y有按鍵按下?掃描第一行執(zhí)行按鍵按下對(duì)應(yīng)程序YNN開始主程序設(shè)計(jì):主程序設(shè)計(jì):main()key=9;/初始顯示關(guān)閉初始顯示關(guān)閉w
28、hile(1)Portkey=0 xff; /矩陣按鍵全輸出矩陣按鍵全輸出1KeyColm1=0; /選擇掃描第一行選擇掃描第一行key_temp=Portkey; /讀按鍵控制端讀按鍵控制端key_temp=key_temp&0 x07;/0000,0111 讀取鍵值讀取鍵值if(key_temp!=0 x07)/如果鍵值不等于如果鍵值不等于0 x07key_delay();/去抖延時(shí)去抖延時(shí)key_temp=Portkey; /讀按鍵控制端讀按鍵控制端key_temp=key_temp&0 x07;/0000,0111 讀取鍵值讀取鍵值if(key_temp!=0 x07)
29、/如果鍵值仍不等于如果鍵值仍不等于0 x07switch(key_temp)/對(duì)讀取的鍵盤分配相應(yīng)鍵碼對(duì)讀取的鍵盤分配相應(yīng)鍵碼case 0 x06: /0000 0110,k0被按下被按下key=0;/顯示內(nèi)容變量顯示內(nèi)容變量break;case 0 x05:/0000 0101,k1被按下被按下key=1;break;case 0 x03:/0000 0011,k2被按下被按下key=2;break; ;n運(yùn)行Proteus-Keil聯(lián)合調(diào)試仿真 【課堂練習(xí)】【課堂練習(xí)】構(gòu)建22矩陣式鍵盤(K0、K1、K2、K3),控制2個(gè)共陽(yáng)極數(shù)碼管對(duì)應(yīng)顯示23、68、77、19。 任務(wù)4 多個(gè)外部中斷設(shè)
30、計(jì) 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:在實(shí)際項(xiàng)目設(shè)計(jì)中,有些時(shí)候可能需要將不止一個(gè)事件設(shè)計(jì)成中斷在實(shí)際項(xiàng)目設(shè)計(jì)中,有些時(shí)候可能需要將不止一個(gè)事件設(shè)計(jì)成中斷處理任務(wù),這就涉及到多個(gè)中斷并存的情況。本任務(wù)要求設(shè)計(jì)兩個(gè)按鍵分處理任務(wù),這就涉及到多個(gè)中斷并存的情況。本任務(wù)要求設(shè)計(jì)兩個(gè)按鍵分別控制別控制LED流水燈工作流程,當(dāng)流水燈工作流程,當(dāng)k0按下,流水燈從兩頭向中間運(yùn)行,達(dá)到按下,流水燈從兩頭向中間運(yùn)行,達(dá)到中間返回兩頭,來回往返;當(dāng)中間返回兩頭,來回往返;當(dāng)k1按下,流水燈先點(diǎn)亮紅燈,再點(diǎn)亮藍(lán)燈,按下,流水燈先點(diǎn)亮紅燈,再點(diǎn)亮藍(lán)燈,即重復(fù)點(diǎn)亮紅燈、藍(lán)燈。即重復(fù)點(diǎn)亮紅燈、藍(lán)燈。 按鍵控制流水
31、燈工作狀態(tài),不能采用獨(dú)立式按鍵設(shè)計(jì)。因此兩個(gè)按按鍵控制流水燈工作狀態(tài),不能采用獨(dú)立式按鍵設(shè)計(jì)。因此兩個(gè)按鍵都應(yīng)運(yùn)用鍵都應(yīng)運(yùn)用“中斷中斷”的設(shè)計(jì)方法,的設(shè)計(jì)方法,89C51有有INT0、INT1兩個(gè)外部中斷,可兩個(gè)外部中斷,可以滿足兩個(gè)按鍵的設(shè)計(jì)要求。以滿足兩個(gè)按鍵的設(shè)計(jì)要求。 中斷優(yōu)先級(jí) n當(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)求。n中斷源的響應(yīng)優(yōu)先級(jí)由寄存器IP確定,中斷系統(tǒng)可
32、以在IP定義兩個(gè)優(yōu)先級(jí)水平,即高優(yōu)先級(jí)水平和低優(yōu)先級(jí)水平;同時(shí)規(guī)定了同一水平下不同中斷源的優(yōu)先級(jí)。 n特殊功能寄存器IP n1. Proteus電路設(shè)計(jì) n2. Keil C51程序設(shè)計(jì) n3. Proteus-Keil聯(lián)合調(diào)試仿真 任務(wù)實(shí)施硬件電路圖n兩個(gè)按鍵對(duì)應(yīng)為外部中斷0、外部中斷1,因此鍵盤電路必須設(shè)計(jì)在外部中斷口上,如圖5-30示將按鍵k0、k1分別設(shè)計(jì)在P3.2/INT0、P3.3/INT1管腳上,LED電路依然設(shè)計(jì)在P1口上。 n(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)的寄存器。 led_light1i+運(yùn)行判斷運(yùn)行標(biāo)志位LED點(diǎn)亮延時(shí)i=0i=8?開始NY初始INT0、INT1寄存器led_light2i+運(yùn)行LED點(diǎn)亮延時(shí)i=0i=2?Yl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化娛樂業(yè)IP開發(fā)及產(chǎn)業(yè)拓展計(jì)劃方案
- 醫(yī)療美容行業(yè)皮膚管理服務(wù)免責(zé)聲明
- 安妮日記人物形象解讀
- 企業(yè)股權(quán)融資協(xié)議
- 2025年延安貨運(yùn)從業(yè)資格證科目一考試答案
- 基于大數(shù)據(jù)的智慧園區(qū)運(yùn)營(yíng)管理解決方案
- 2025年廣州貨運(yùn)從業(yè)資格試題
- 制造業(yè)工業(yè) 4.0 工廠設(shè)計(jì)方案
- 2025年武威貨運(yùn)從業(yè)資格證題庫(kù)
- 農(nóng)業(yè)生物技術(shù)推廣應(yīng)用合同
- 機(jī)關(guān)事業(yè)單位財(cái)務(wù)管理制度(六篇)
- 2025禮品定制合同范本
- 醫(yī)院消毒隔離制度范文(2篇)
- 2024年01月11026經(jīng)濟(jì)學(xué)(本)期末試題答案
- 烘干煤泥合同范例
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)第八單元數(shù)學(xué)廣角數(shù)與形單元試題含答案
- 2025年“三基”培訓(xùn)計(jì)劃
- 第20課 北洋軍閥統(tǒng)治時(shí)期的政治、經(jīng)濟(jì)與文化 教案
- 叉車租賃合同模板
- 住房公積金稽核審計(jì)工作方案例文(4篇)
- 口腔門診醫(yī)療風(fēng)險(xiǎn)規(guī)避
評(píng)論
0/150
提交評(píng)論