




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1會(huì)計(jì)學(xué)s鍵盤管理與程序設(shè)計(jì)剖析鍵盤管理與程序設(shè)計(jì)剖析按結(jié)構(gòu)和使用方法的不同,可將按鍵分為兩大類:獨(dú)立按鍵和矩陣鍵盤。按結(jié)構(gòu)和使用方法的不同,可將按鍵分為兩大類:獨(dú)立按鍵和矩陣鍵盤。矩陣鍵盤矩陣鍵盤 獨(dú)立按鍵獨(dú)立按鍵 直接用直接用I/O控制,每個(gè)按鍵獨(dú)占一個(gè)控制,每個(gè)按鍵獨(dú)占一個(gè)I/O特點(diǎn)特點(diǎn)由行線和列線組成,按鍵位于交叉點(diǎn)上由行線和列線組成,按鍵位于交叉點(diǎn)上互不影響,配置靈活,結(jié)構(gòu)簡(jiǎn)單互不影響,配置靈活,結(jié)構(gòu)簡(jiǎn)單優(yōu)點(diǎn)優(yōu)點(diǎn)組合靈活,按鍵數(shù)量較多時(shí),節(jié)省組合靈活,按鍵數(shù)量較多時(shí),節(jié)省I/O按鍵多時(shí),按鍵多時(shí),I/O口浪費(fèi)嚴(yán)重口浪費(fèi)嚴(yán)重缺點(diǎn)缺點(diǎn)區(qū)分和判斷按鍵動(dòng)作的方法比較復(fù)雜區(qū)分和判斷按鍵動(dòng)作的方
2、法比較復(fù)雜按鍵不超過按鍵不超過8只時(shí)只時(shí)適用適用場(chǎng)合場(chǎng)合按鍵數(shù)量較多時(shí)按鍵數(shù)量較多時(shí) 獨(dú)立鍵盤與消抖獨(dú)立鍵盤與消抖 矩陣鍵盤與掃描方法矩陣鍵盤與掃描方法 逐行逐列掃描法逐行逐列掃描法 S1VccP0.7R1 10KS2P2.3(a) (b)80C51單片機(jī)的兩種常見的獨(dú)立按鍵接法:?jiǎn)纹瑱C(jī)的兩種常見的獨(dú)立按鍵接法:I/O口為開漏結(jié)構(gòu)時(shí)口為開漏結(jié)構(gòu)時(shí),需,需外接上拉電阻外接上拉電阻,如如51的的P0口口I/O內(nèi)部自帶弱上拉電阻內(nèi)部自帶弱上拉電阻時(shí),可時(shí),可直接相連直接相連,如,如51的的P1、P2、P3口口+E0V未按下時(shí)未按下時(shí)為高電平為高電平剛釋放時(shí)剛釋放時(shí)出現(xiàn)抖動(dòng)出現(xiàn)抖動(dòng)剛按下時(shí)剛按下時(shí)出現(xiàn)
3、抖動(dòng)出現(xiàn)抖動(dòng)按下穩(wěn)定按下穩(wěn)定后為低電平后為低電平實(shí)際效果實(shí)際效果窄脈沖干擾窄脈沖干擾 剛釋放時(shí)剛釋放時(shí)出現(xiàn)抖動(dòng)出現(xiàn)抖動(dòng)按鍵的結(jié)構(gòu):按鍵的結(jié)構(gòu):和電路圖中的符號(hào)極為相似,它是靠鍍銀的銅合金簧片在和電路圖中的符號(hào)極為相似,它是靠鍍銀的銅合金簧片在按鍵柄的擠壓下接觸而導(dǎo)通,松開后簧片恢復(fù)原狀而脫離接觸斷開。按鍵柄的擠壓下接觸而導(dǎo)通,松開后簧片恢復(fù)原狀而脫離接觸斷開。S1VccP0.7R1 10K“0”“1”理想效果理想效果按鍵的抖動(dòng):按鍵的抖動(dòng):按鍵在人手指按壓按鍵在人手指按壓/釋放簧片的瞬間,因接觸不良而產(chǎn)生的釋放簧片的瞬間,因接觸不良而產(chǎn)生的反復(fù)跳動(dòng)現(xiàn)象。反復(fù)跳動(dòng)現(xiàn)象?!岸秳?dòng)抖動(dòng)”的脈沖寬度一般
4、在幾十到幾百微秒,也可能達(dá)到毫秒級(jí),的脈沖寬度一般在幾十到幾百微秒,也可能達(dá)到毫秒級(jí),若加在運(yùn)若加在運(yùn)行速度很快的數(shù)字電路中將會(huì)產(chǎn)生很大的影響行速度很快的數(shù)字電路中將會(huì)產(chǎn)生很大的影響。比如將發(fā)生。比如將發(fā)生“抖動(dòng)抖動(dòng)”現(xiàn)象的按鍵作現(xiàn)象的按鍵作為數(shù)字電路的時(shí)鐘輸入,則每按一次鍵都會(huì)產(chǎn)生一串極不穩(wěn)定的脈沖。為數(shù)字電路的時(shí)鐘輸入,則每按一次鍵都會(huì)產(chǎn)生一串極不穩(wěn)定的脈沖。abcdefghcom1 com2 com3 com4 編程思路:編程思路:用按鍵模擬計(jì)數(shù)輸入信號(hào),用用按鍵模擬計(jì)數(shù)輸入信號(hào),用4位位LED數(shù)碼管顯示計(jì)數(shù)值。數(shù)碼管顯示計(jì)數(shù)值。實(shí)驗(yàn)現(xiàn)象:在理想效果下,每按一次鍵,實(shí)驗(yàn)現(xiàn)象:在理想效果下
5、,每按一次鍵,I/O口僅檢測(cè)到口僅檢測(cè)到1次高次高/低電平轉(zhuǎn)換,計(jì)數(shù)低電平轉(zhuǎn)換,計(jì)數(shù)加加1;在實(shí)際效果中,由于;在實(shí)際效果中,由于“抖動(dòng)抖動(dòng)”存在,每按一次鍵,存在,每按一次鍵, I/O口檢測(cè)到口檢測(cè)到多次電平轉(zhuǎn)換,計(jì)數(shù)好幾次。多次電平轉(zhuǎn)換,計(jì)數(shù)好幾次。SVccP3.4R10Kabcdefghcom1 com2 com3 com4 理想效果:理想效果: 實(shí)際效果:實(shí)際效果: 存放存放4位計(jì)數(shù)值位計(jì)數(shù)值0 x7A 0 x7B 地址地址 數(shù)據(jù)數(shù)據(jù) 0 x7C 0 x7D 0 x7E 0 x7F 存放將計(jì)數(shù)值轉(zhuǎn)換成存放將計(jì)數(shù)值轉(zhuǎn)換成數(shù)碼管顯示的字符碼數(shù)碼管顯示的字符碼0 x7C 0 x7D 0 x7
6、E 0 x7F ORG 0000HStart:MOV0 x7A,#0 x00;計(jì)數(shù)器高計(jì)數(shù)器高2位寄存器位寄存器0 x7A清清0MOV0 x7B,#0 x00;計(jì)數(shù)器低計(jì)數(shù)器低2位寄存器位寄存器0 x7B清清0LD_Data: MOVR0,#0 x7C;取顯示緩沖區(qū)首地址到指針取顯示緩沖區(qū)首地址到指針R0MOVA,0 x7A;取計(jì)數(shù)器高取計(jì)數(shù)器高2位數(shù)據(jù)位數(shù)據(jù)ACALL Split_Display_Byte;將數(shù)據(jù)字符送顯示緩沖區(qū)前將數(shù)據(jù)字符送顯示緩沖區(qū)前2個(gè)單元個(gè)單元MOVA,0 x7B;取計(jì)數(shù)器低取計(jì)數(shù)器低2位數(shù)據(jù)位數(shù)據(jù)ACALL Split_Display_Byte;將數(shù)據(jù)字符送顯示緩沖
7、區(qū)后將數(shù)據(jù)字符送顯示緩沖區(qū)后2個(gè)單元個(gè)單元0 x00 0 x00 高高4位轉(zhuǎn)換的字符碼位轉(zhuǎn)換的字符碼低低4位轉(zhuǎn)換的字符碼位轉(zhuǎn)換的字符碼0 xC0 0 xC0 0 xC0 0 xC0 Display_Loop:ACALLScan_Display_Value;調(diào)用顯示掃描子程序調(diào)用顯示掃描子程序 JBP3.4, Display_Loop ;P3.4是否為是否為0?鍵未按下,轉(zhuǎn)?鍵未按下,轉(zhuǎn)Display_LoopMOV A, #0 x01 ;A取加數(shù)取加數(shù)1 ADDA, 0 x7B;計(jì)數(shù)器計(jì)數(shù)器+1DAA;10進(jìn)制修正指令進(jìn)制修正指令 MOV 0 x7B,A;回存低回存低2位的運(yùn)算結(jié)果到位的運(yùn)算結(jié)
8、果到0 x7B CLRA ;清清0累加器累加器AADDC A,0 x7A;帶進(jìn)位加法加計(jì)數(shù)器高帶進(jìn)位加法加計(jì)數(shù)器高2位數(shù)據(jù)位數(shù)據(jù)DAAMOV0 x7A,A;回存高回存高2位的運(yùn)算結(jié)果到位的運(yùn)算結(jié)果到0 x7AJNBP3.4, $;檢查按鍵是否松開,檢查按鍵是否松開,P3.4=1 本地循環(huán)本地循環(huán)AJMP LD_Data;按鍵松開,轉(zhuǎn)按鍵松開,轉(zhuǎn)LD_Dataa b c d e f g hcom1 com2 com3 com4 數(shù)碼管顯示:數(shù)碼管顯示:判斷是否有按鍵按下判斷是否有按鍵按下0 x01 數(shù)碼管顯示計(jì)數(shù)數(shù)碼管顯示計(jì)數(shù)流程圖流程圖 P3.4=0?N 計(jì)數(shù)器清計(jì)數(shù)器清0計(jì)數(shù)值轉(zhuǎn)換成字符碼計(jì)
9、數(shù)值轉(zhuǎn)換成字符碼計(jì)數(shù)器計(jì)數(shù)器+1,調(diào)整,調(diào)整10進(jìn)制數(shù)進(jìn)制數(shù)P3.4=1?N Y Y +EKR 110KY+E0VY:td啟動(dòng)延時(shí)啟動(dòng)延時(shí)停止延時(shí)停止延時(shí)消除消除“抖動(dòng)抖動(dòng)”的方法的方法:硬件消抖和軟件消抖兩大類。:硬件消抖和軟件消抖兩大類。常見的硬件消抖方法是:低通濾波施密特整形以及常見的硬件消抖方法是:低通濾波施密特整形以及RS觸發(fā)器,而軟件消抖觸發(fā)器,而軟件消抖方法就是插入適當(dāng)?shù)难訒r(shí)。方法就是插入適當(dāng)?shù)难訒r(shí)。復(fù)習(xí)數(shù)字電路相關(guān)復(fù)習(xí)數(shù)字電路相關(guān)內(nèi)容內(nèi)容軟件消抖:軟件消抖:在按鍵按下的瞬間啟動(dòng)定時(shí)器開始延時(shí),延時(shí)在按鍵按下的瞬間啟動(dòng)定時(shí)器開始延時(shí),延時(shí)td時(shí)間后再判斷按鍵是否仍然時(shí)間后再判斷按
10、鍵是否仍然按下,若仍按下,則本次按鍵有效;否則本次按鍵無效。按下,若仍按下,則本次按鍵有效;否則本次按鍵無效。思考題:思考題: 如何增加延時(shí)消除如何增加延時(shí)消除“抖動(dòng)抖動(dòng)”,請(qǐng)嘗試修改前面的程序。,請(qǐng)嘗試修改前面的程序。 如果認(rèn)真觀察實(shí)驗(yàn),一定會(huì)發(fā)現(xiàn)前面的程序有一個(gè)小小的不足,就是在按如果認(rèn)真觀察實(shí)驗(yàn),一定會(huì)發(fā)現(xiàn)前面的程序有一個(gè)小小的不足,就是在按鍵按下的瞬間顯示器會(huì)熄滅,請(qǐng)分析原因。鍵按下的瞬間顯示器會(huì)熄滅,請(qǐng)分析原因。 獨(dú)立鍵盤與消抖獨(dú)立鍵盤與消抖 矩陣鍵盤與掃描方法矩陣鍵盤與掃描方法 逐行逐列掃描法逐行逐列掃描法 4 4 矩陣鍵盤矩陣鍵盤 行行線線 列列 線線 按鍵的兩端分別接按鍵的兩端
11、分別接在行線和列線上在行線和列線上矩陣鍵盤:矩陣鍵盤:用盡可能少的用盡可能少的I/O口口去管理較多的按鍵。去管理較多的按鍵。 最大的優(yōu)點(diǎn)是組合靈活,假如最大的優(yōu)點(diǎn)是組合靈活,假如有有16個(gè)個(gè)I/O可用作鍵盤電路,可以可用作鍵盤電路,可以將它接成將它接成610、511或或88等等許多種接法。當(dāng)然,使用效率最許多種接法。當(dāng)然,使用效率最高的是高的是88的接法,最多可以接的接法,最多可以接64個(gè)按鍵。個(gè)按鍵。 矩陣連接法要區(qū)分和判斷按鍵矩陣連接法要區(qū)分和判斷按鍵動(dòng)作的方法比較復(fù)雜,所以這種動(dòng)作的方法比較復(fù)雜,所以這種接法一般只用在計(jì)算機(jī)技術(shù)中。接法一般只用在計(jì)算機(jī)技術(shù)中。 獨(dú)立鍵盤與消抖獨(dú)立鍵盤與消
12、抖 矩陣鍵盤與掃描方法矩陣鍵盤與掃描方法 逐行逐列掃描法逐行逐列掃描法 TinyView的的2 4 矩陣鍵盤矩陣鍵盤 行行線線 列列線線 KC1KC4并接在并接在com1com4上,與上,與P3.2P3.5相連相連與與P3.6、P3.7相連相連TinyView的的2 4 矩陣鍵盤矩陣鍵盤 行行線線 列列線線 與數(shù)碼管的位選控與數(shù)碼管的位選控制端制端復(fù)用復(fù)用I/O口復(fù)用:口復(fù)用:將將同一個(gè)(或組)同一個(gè)(或組)I/O口用于口用于2種不同作用的種不同作用的2個(gè)器件上。個(gè)器件上。能夠復(fù)用的原因:能夠復(fù)用的原因:因?yàn)橛?jì)算機(jī)是因?yàn)橛?jì)算機(jī)是一種一種“串行串行”執(zhí)行程序的機(jī)器,是一條執(zhí)行程序的機(jī)器,是一條接
13、一條的執(zhí)行指令,而不是全部指令一接一條的執(zhí)行指令,而不是全部指令一起上。利用這種在時(shí)間上的可區(qū)分性使起上。利用這種在時(shí)間上的可區(qū)分性使其在不同的時(shí)間管理不同的部件。其在不同的時(shí)間管理不同的部件。這種復(fù)用是有條件的這種復(fù)用是有條件的,對(duì)于需要保,對(duì)于需要保持確定狀態(tài)的控制口(如控制一個(gè)繼持確定狀態(tài)的控制口(如控制一個(gè)繼電器開關(guān)的端口)是沒辦法復(fù)用的。電器開關(guān)的端口)是沒辦法復(fù)用的。 逐行掃描鍵盤的方法逐行掃描鍵盤的方法選擇選擇KR1和和KR2為輸入,它們?yōu)檩斎耄鼈兊某B(tài)是電平的常態(tài)是電平“1”。當(dāng)沒有按鍵按。當(dāng)沒有按鍵按下時(shí),下時(shí),KR1和和KR2保持常態(tài)。當(dāng)保持常態(tài)。當(dāng)KY1按下時(shí),按下時(shí),
14、KR1在在KC1輸出輸出“0”電平時(shí)得到電平時(shí)得到“0”信號(hào),而信號(hào),而KR2在不在不受影響仍然保持常態(tài)。受影響仍然保持常態(tài)。2 4 矩陣鍵盤矩陣鍵盤 行行線線 列列線線 單片機(jī)的輸出單片機(jī)的輸出單片機(jī)的輸入單片機(jī)的輸入利用這種必須配合利用這種必須配合KC1KC4的輸出情況才能使的輸出情況才能使KR1或或KR2得到得到“0”信號(hào)的特點(diǎn),人們發(fā)明出鍵盤信號(hào)的特點(diǎn),人們發(fā)明出鍵盤的逐行掃描法。的逐行掃描法。即每次只有一根列線輸出即每次只有一根列線輸出“0”,然后逐行掃描讀入行信號(hào),通過,然后逐行掃描讀入行信號(hào),通過行信號(hào)來判斷鍵盤所有按鍵的狀態(tài)行信號(hào)來判斷鍵盤所有按鍵的狀態(tài)。1 111110111
15、1 10 0逐列掃描鍵盤的方法:逐列掃描鍵盤的方法:把行和列的輸把行和列的輸入輸出顛倒,其原理和操作方法與逐行入輸出顛倒,其原理和操作方法與逐行掃描鍵盤的方法一致。掃描鍵盤的方法一致。逐個(gè)掃描鍵盤的方法:逐個(gè)掃描鍵盤的方法:Scan_Key:MOV P1, #0 xFF;關(guān)閉所有段選,阻止掃描鍵盤對(duì)顯示的影響關(guān)閉所有段選,阻止掃描鍵盤對(duì)顯示的影響MOV R6, #0 x04;設(shè)定鍵盤計(jì)數(shù)器為設(shè)定鍵盤計(jì)數(shù)器為4,即循環(huán),即循環(huán)4次次 MOV R5, #0 xFB 取第一位掃描控制數(shù)據(jù)取第一位掃描控制數(shù)據(jù)Scan_KLP:MOV P3, R5;送位選數(shù)據(jù)到位選口送位選數(shù)據(jù)到位選口SETB P3.6
16、;設(shè)置采樣口設(shè)置采樣口P3.6進(jìn)入采樣狀態(tài)進(jìn)入采樣狀態(tài)SETB P3.7;設(shè)置采樣口設(shè)置采樣口P3.7進(jìn)入采樣狀態(tài)進(jìn)入采樣狀態(tài)JNBP3.6, Scan_KBK1;檢查檢查KR1為為0否,是否,是,轉(zhuǎn)轉(zhuǎn)Scan_KBK1JNBP3.7, Scan_KBK2 ;檢查檢查KR2為為0否,是否,是,轉(zhuǎn)轉(zhuǎn)Scan_KBK2MOV A, R5;位選暫存器到位選暫存器到ARLA;A循環(huán)左移使下一只位選輸出循環(huán)左移使下一只位選輸出0電平電平MOV R5, A;A返存回位選暫存器返存回位選暫存器DJNZR6, Scan_KLP;鍵盤計(jì)數(shù)器減鍵盤計(jì)數(shù)器減1,非,非0,返回,返回Scan_KLPScan_KBK1
17、: MOVA, R6;A取位選計(jì)數(shù)器數(shù)值取位選計(jì)數(shù)器數(shù)值RETScan_KBK2: MOVA, R6;A取位選計(jì)數(shù)器數(shù)值取位選計(jì)數(shù)器數(shù)值A(chǔ)DDA, #4RETP1:數(shù)碼管段選控制端,因數(shù)碼管位選與鍵:數(shù)碼管段選控制端,因數(shù)碼管位選與鍵盤列控制線復(fù)用,故在此先關(guān)閉所有段盤列控制線復(fù)用,故在此先關(guān)閉所有段選,阻止掃描鍵盤對(duì)顯示的影響選,阻止掃描鍵盤對(duì)顯示的影響。R6:鍵盤計(jì)數(shù)器,:鍵盤計(jì)數(shù)器,4:4列,單次逐行掃描到列,單次逐行掃描到所有按鍵循環(huán)的次數(shù)。所有按鍵循環(huán)的次數(shù)。R5:位選:位選/列線控制數(shù)據(jù),控制每次只有一根列線控制數(shù)據(jù),控制每次只有一根列線為列線為“0”。P1、R6、R5初始化初始化
18、KR1、KR2行掃行掃描口置常態(tài)描口置常態(tài)“1”為為0則有鍵按下,跳轉(zhuǎn);則有鍵按下,跳轉(zhuǎn);否則繼續(xù)往下執(zhí)行程序否則繼續(xù)往下執(zhí)行程序左移,更換為左移,更換為“0”的位的位選選/列線列線KR1所在行有按鍵按下時(shí),將所在行有按鍵按下時(shí),將R6的值傳的值傳送給送給A,并退出子程序,并退出子程序KR2所在行有按鍵按下時(shí),將所在行有按鍵按下時(shí),將R6的值傳的值傳送給送給A,A統(tǒng)一加統(tǒng)一加4后退出子程序后退出子程序R6-1為為0,繼續(xù)往下執(zhí)行,繼續(xù)往下執(zhí)行程序;不為程序;不為0則跳轉(zhuǎn)則跳轉(zhuǎn)實(shí)現(xiàn)功能:實(shí)現(xiàn)功能:?jiǎn)未沃鹦袙呙鑶未沃鹦袙呙?個(gè)按鍵。當(dāng)個(gè)按鍵。當(dāng)有鍵按下時(shí),程序立即跳出循環(huán),輸出有鍵按下時(shí),程序立即
19、跳出循環(huán),輸出參數(shù)參數(shù)A不為不為0;當(dāng)無鍵按下時(shí),;當(dāng)無鍵按下時(shí),R6被減為被減為0并退出循環(huán),輸出參數(shù)并退出循環(huán),輸出參數(shù)A=0。按鍵掃描順序:按鍵掃描順序:先判斷先判斷KY1是否按下?如是否按下?如果是,果是,R6為為4傳給傳給A并退出子程序;如果不是并退出子程序;如果不是,接著判斷,接著判斷KY5是否按下;如果是,是否按下;如果是,R6為為4傳傳給給A,A加加4后退出子程序;如果不是,則接后退出子程序;如果不是,則接著判斷著判斷KY2是否按下是否按下依此類推,依此類推,KY1KY5 KY2 KY6 KY3 KY7 KY4 KY8輸出參數(shù):輸出參數(shù):無鍵按下,無鍵按下,A=0;KY1按下,
20、按下,A=4;KY5按下,按下,A=8;KY2按下,按下,A=3;KY6按下,按下,A=7;KY3按下,按下,A=2; KY7按下,按下,A=6;KY4按下,按下,A=1; KY8按下,按下,A=5給給P1、R6、R5賦初值賦初值送位選數(shù)據(jù)到位選口送位選數(shù)據(jù)到位選口P3P3.6、P3.7置初態(tài)置初態(tài)1P3.6=0?P3.7=0?位選數(shù)據(jù)左移位選數(shù)據(jù)左移1位位R6-1=0?將將R6的值傳給的值傳給A退出子程序退出子程序?qū)6的值傳給的值傳給A(A)(A)+4退出子程序退出子程序Y N N Y Y N 流程圖流程圖 程序流程:程序流程: 首先對(duì)四位計(jì)數(shù)器賦初值首先對(duì)四位計(jì)數(shù)器賦初值0,并進(jìn)行顯示
21、循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài),并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài)。 當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。 當(dāng)有鍵按下時(shí),先判斷是否是當(dāng)有鍵按下時(shí),先判斷是否是KY1按下?如果是,則計(jì)數(shù)器加按下?如果是,則計(jì)數(shù)器加1。如果不是,則轉(zhuǎn)而檢查。如果不是,則轉(zhuǎn)而檢查是否是是否是KY8按下?如果是,計(jì)數(shù)器減按下?如果是,計(jì)數(shù)器減1。如果不是,則程序不做任何操作返回重來。如果不是,則程序不做任何操作返回重來。ORG0000HStart:MOV0 x7A,#0 x00;清清0計(jì)數(shù)器高計(jì)數(shù)器高2位寄存器位寄存器0 x7AMOV0 x7B,#0 x00
22、;清清0計(jì)數(shù)器低計(jì)數(shù)器低2位寄存器位寄存器0 x7BLD_Data: ACALL L_DisplayBuf;將將0 x7A、0 x7B數(shù)字字符調(diào)入顯示緩沖區(qū)數(shù)字字符調(diào)入顯示緩沖區(qū)Display_Loop: ACALL Scan_Display_Value;調(diào)用顯示掃描調(diào)用顯示掃描子子程序程序 ACALL Scan_Key ;調(diào)用鍵盤掃描調(diào)用鍵盤掃描子子程序程序JZDisplay_Loop ;無鍵按下,轉(zhuǎn)無鍵按下,轉(zhuǎn)Display_Loop重復(fù)顯示重復(fù)顯示4位計(jì)數(shù)器清位計(jì)數(shù)器清04位計(jì)數(shù)值轉(zhuǎn)成數(shù)字字位計(jì)數(shù)值轉(zhuǎn)成數(shù)字字符并載入顯示緩沖區(qū)符并載入顯示緩沖區(qū)數(shù)碼管顯示數(shù)碼管顯示4位計(jì)數(shù)值位計(jì)數(shù)值單次逐
23、行掃描按鍵,無鍵按下單次逐行掃描按鍵,無鍵按下,A為為0;有鍵按下,;有鍵按下,A不為不為0A為為0,跳轉(zhuǎn);,跳轉(zhuǎn);A不為不為0,繼續(xù)往下執(zhí)行程序,繼續(xù)往下執(zhí)行程序程序流程:程序流程: 首先對(duì)四位計(jì)數(shù)器賦初值首先對(duì)四位計(jì)數(shù)器賦初值0,并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài),并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài)。 當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。 當(dāng)有鍵按下時(shí),先判斷是否是當(dāng)有鍵按下時(shí),先判斷是否是KY1按下?如果是,則計(jì)數(shù)器加按下?如果是,則計(jì)數(shù)器加1。如果不是,則轉(zhuǎn)而檢查。如果不是,則轉(zhuǎn)而檢查是否是是否是KY8按下?如果是,計(jì)數(shù)器
24、減按下?如果是,計(jì)數(shù)器減1。如果不是,則程序不做任何操作返回重來。如果不是,則程序不做任何操作返回重來。CJNEA, #0 x04, Next_Key ;是是KY1鍵按下鍵按下嗎?不是嗎?不是,則則轉(zhuǎn)轉(zhuǎn)Next_Key; 加加1計(jì)數(shù)程序計(jì)數(shù)程序 MOV A, 0 x7B ;取計(jì)數(shù)器取計(jì)數(shù)器的的低低2位數(shù)值位數(shù)值 ADDA, #0 x01 ;數(shù)值加數(shù)值加1DAA ;調(diào)整調(diào)整10進(jìn)制進(jìn)制數(shù)數(shù) MOV 0 x7B, A;將低將低2位運(yùn)算結(jié)果回存到位運(yùn)算結(jié)果回存到0 x7B MOV A, 0 x7A ;取計(jì)數(shù)器取計(jì)數(shù)器的的高高2位數(shù)值位數(shù)值A(chǔ)DDC A,#0 x00;帶進(jìn)位加法加帶進(jìn)位加法加0,如有進(jìn)
25、位高,如有進(jìn)位高2位加位加1DAA;調(diào)整調(diào)整10進(jìn)制進(jìn)制數(shù)數(shù)MOV0 x7A, A;將高將高2位的運(yùn)算結(jié)果回存位的運(yùn)算結(jié)果回存0 x7AAJMP Key_Back;轉(zhuǎn)轉(zhuǎn)Key_Back鍵返回處理程序鍵返回處理程序A為為0 x04,KY1按下,繼續(xù)往下按下,繼續(xù)往下執(zhí)行程序;不為執(zhí)行程序;不為0 x04,跳轉(zhuǎn),跳轉(zhuǎn)4位位計(jì)計(jì)數(shù)數(shù)器器加加1 程序流程:程序流程: 首先對(duì)四位計(jì)數(shù)器賦初值首先對(duì)四位計(jì)數(shù)器賦初值0,并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài),并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài)。 當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。 當(dāng)有鍵按下時(shí),
26、先判斷是否是當(dāng)有鍵按下時(shí),先判斷是否是KY1按下?如果是,則計(jì)數(shù)器加按下?如果是,則計(jì)數(shù)器加1。如果不是,則轉(zhuǎn)而檢查。如果不是,則轉(zhuǎn)而檢查是否是是否是KY8按下?如果是,計(jì)數(shù)器減按下?如果是,計(jì)數(shù)器減1。如果不是,則程序不做任何操作返回重來。如果不是,則程序不做任何操作返回重來。Next_Key :CJNEA,#0 x05,Display_Loop ;是是KY8鍵按下嗎?否,返回鍵按下嗎?否,返回Display_Loop; 減減1計(jì)數(shù)程序計(jì)數(shù)程序 MOV A, 0 x7B;取計(jì)數(shù)器低取計(jì)數(shù)器低2位數(shù)值位數(shù)值 ADDA, #0 x99 ;加加99,相當(dāng)于減,相當(dāng)于減1操作操作DAA ;進(jìn)行進(jìn)行1
27、0進(jìn)制修正進(jìn)制修正 MOV 0 x7B, A;將低將低2位運(yùn)算結(jié)果回存到位運(yùn)算結(jié)果回存到0 x7BJC Key_Back;是否有溢出,是,則不借位是否有溢出,是,則不借位MOV A, 0 x7A;取計(jì)數(shù)器高取計(jì)數(shù)器高2位數(shù)值位數(shù)值A(chǔ)DD A, #0 x99 ;加加99,相當(dāng)于減,相當(dāng)于減1操作操作DA A;10進(jìn)制修正指令進(jìn)制修正指令MOV0 x7A, A;將高將高2位的運(yùn)算結(jié)果回存位的運(yùn)算結(jié)果回存0 x7AA為為0 x05,KY8按下,繼續(xù)往下按下,繼續(xù)往下執(zhí)行程序;不為執(zhí)行程序;不為0 x05,跳轉(zhuǎn),跳轉(zhuǎn)4位位計(jì)計(jì)數(shù)數(shù)器器減減1 減減1操作:操作: 因?yàn)橐驗(yàn)椤癉A A”指令只對(duì)加法指令起作
28、用指令只對(duì)加法指令起作用,所以程序以加,所以程序以加99來處理減來處理減1。 對(duì)于對(duì)于8位寄存器,值不為位寄存器,值不為0時(shí),加時(shí),加99后會(huì)產(chǎn)后會(huì)產(chǎn)生進(jìn)位,生進(jìn)位,8位寄存器被減位寄存器被減1,如,如6+99=105,8位寄存器中的值為位寄存器中的值為5,實(shí)現(xiàn)減,實(shí)現(xiàn)減1。 值為值為0時(shí),加時(shí),加99后后8位寄存器中的值變成位寄存器中的值變成99,不產(chǎn)生進(jìn)位,需要向高位借位。,不產(chǎn)生進(jìn)位,需要向高位借位。程序流程:程序流程: 首先對(duì)四位計(jì)數(shù)器賦初值首先對(duì)四位計(jì)數(shù)器賦初值0,并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài),并進(jìn)行顯示循環(huán),在循環(huán)中運(yùn)行鍵盤程序隨時(shí)檢查按鍵狀態(tài)。 當(dāng)無鍵按下
29、時(shí),程序保持循環(huán)狀態(tài)。當(dāng)無鍵按下時(shí),程序保持循環(huán)狀態(tài)。 當(dāng)有鍵按下時(shí),先判斷是否是當(dāng)有鍵按下時(shí),先判斷是否是KY1按下?如果是,則計(jì)數(shù)器加按下?如果是,則計(jì)數(shù)器加1。如果不是,則轉(zhuǎn)而檢查。如果不是,則轉(zhuǎn)而檢查是否是是否是KY8按下?如果是,計(jì)數(shù)器減按下?如果是,計(jì)數(shù)器減1。如果不是,則程序不做任何操作返回重來。如果不是,則程序不做任何操作返回重來。Key_Back: ACALL L_DisplayBuf ;將將0 x7A、0 x7B數(shù)字字符調(diào)入顯示緩沖區(qū)數(shù)字字符調(diào)入顯示緩沖區(qū)ACALL Scan_Display_Value;調(diào)用顯示掃描程序調(diào)用顯示掃描程序ACALL Scan_Key ;調(diào)用鍵
30、盤掃描程序調(diào)用鍵盤掃描程序JNZ Key_Back;按鍵是否松開按鍵是否松開?否,則?否,則轉(zhuǎn)轉(zhuǎn)Key_Back繼續(xù)檢查繼續(xù)檢查SJMP Display_Loop ;有,返有,返Display_Loop 在檢測(cè)按鍵是否松開的循環(huán)中增加顯在檢測(cè)按鍵是否松開的循環(huán)中增加顯示掃描,即避免了顯示器的熄滅,又示掃描,即避免了顯示器的熄滅,又增加了防按鍵增加了防按鍵“抖動(dòng)抖動(dòng)”的延時(shí)的延時(shí)問題提出:?jiǎn)栴}提出:當(dāng)這個(gè)矩陣擴(kuò)大到一定數(shù)目時(shí),逐行掃描的方法會(huì)很費(fèi)時(shí),如果需要對(duì)當(dāng)這個(gè)矩陣擴(kuò)大到一定數(shù)目時(shí),逐行掃描的方法會(huì)很費(fèi)時(shí),如果需要對(duì)2個(gè)以上的按鍵個(gè)以上的按鍵“同時(shí)同時(shí)”操作時(shí),則處理起來更麻煩。操作時(shí),則處
31、理起來更麻煩。解決方法:解決方法:按鍵的處理程序并非只有逐行掃描法這一種,如:按鍵的處理程序并非只有逐行掃描法這一種,如:“線反轉(zhuǎn)法線反轉(zhuǎn)法”按鍵檢按鍵檢測(cè)技術(shù),也是矩陣鍵盤應(yīng)用中的一種經(jīng)典程序處理方法。測(cè)技術(shù),也是矩陣鍵盤應(yīng)用中的一種經(jīng)典程序處理方法。TinyView的的2 4 矩陣鍵盤矩陣鍵盤 線反轉(zhuǎn)法:線反轉(zhuǎn)法:將矩陣電路行、列的將矩陣電路行、列的I/O屬性進(jìn)行調(diào)換處理。矩陣電路的行、列線必須屬性進(jìn)行調(diào)換處理。矩陣電路的行、列線必須一組輸出、一組輸入,而線反轉(zhuǎn)的操作方法是多進(jìn)行一次這種操作。一組輸出、一組輸入,而線反轉(zhuǎn)的操作方法是多進(jìn)行一次這種操作。具體實(shí)現(xiàn):具體實(shí)現(xiàn):假設(shè)有假設(shè)有KY1
32、、KY3、KY8這這3個(gè)按鍵同時(shí)按下。個(gè)按鍵同時(shí)按下。TinyView的的2 4 矩陣鍵盤矩陣鍵盤 第一步:第一步:輸入輸入 輸出輸出 輸出輸出 輸入輸入 11111 11 1000000第二步:線反轉(zhuǎn)第二步:線反轉(zhuǎn) 1 11 1111100101由由KR1和和KR2可推斷出:兩行都有按鍵按下??赏茢喑觯簝尚卸加邪存I按下。 結(jié)合第一步的推斷,可知結(jié)合第一步的推斷,可知KY1和和KY3按下;按下; 結(jié)合第一步的推斷,可知結(jié)合第一步的推斷,可知KY8按下。按下。01110線反轉(zhuǎn)法不但采樣速度快,而且鍵盤信息全面,但它對(duì)硬件有一定的要求:行線反轉(zhuǎn)法不但采樣速度快,而且鍵盤信息全面,但它對(duì)硬件有一定的
33、要求:行線和列線都必須是可反轉(zhuǎn)的,既可配置為輸出,又可配置成輸入。此外,行線和列線和列線都必須是可反轉(zhuǎn)的,既可配置為輸出,又可配置成輸入。此外,行線和列線的分組最好在線的分組最好在2個(gè)不同的操作口上,比如,個(gè)不同的操作口上,比如,80C51的的P1和和P3。AT89C52AT89C52P1.0 P1.0 P1.1 P1.1 P1.2 P1.2 P1.3P1.3 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7P1.7+5v0行行1行行2行行3行行0列列1列列2列列3列列 由行線輸出全由行線輸出全“0”0”,讀入列,讀入列線,判有無鍵按下。線,判有無鍵按下。 若有鍵按下若有鍵
34、按下, ,再將讀入的列再將讀入的列 線值由列線輸出線值由列線輸出, ,讀進(jìn)行線的值讀進(jìn)行線的值。 第一步讀進(jìn)的列線值與第二第一步讀進(jìn)的列線值與第二步讀進(jìn)的行線值相加,從而得到步讀進(jìn)的行線值相加,從而得到代表此鍵的唯一的特征值。代表此鍵的唯一的特征值。AT89C52AT89C52P1.0 P1.0 P1.1 P1.1 P1.2 P1.2 P1.3P1.3 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7P1.7+5vMOV P1MOV P1,#0F0H ;#0F0H ;低位送全低位送全“0”0” MOV A MOV A, P1 ;P1 ;讀進(jìn)讀進(jìn)P1P1口電平口電平 ANL
35、AANL A,#0F0H ;#0F0H ;保留高保留高4 4位位 CJNE A, #0F0H, MK3(CJNE A, #0F0H, MK3() ) ; ;若有鍵按下則若有鍵按下則P1.4P1.7P1.4P1.7必必 有有“0”0”位位, ,跳轉(zhuǎn)到跳轉(zhuǎn)到MK3MK3去處理去處理; ; 若無鍵按下則退出鍵掃描。若無鍵按下則退出鍵掃描。0行行1行行2行行3行行0列列1列列2列列3列列設(shè)設(shè): :第第3 3行行/ /第第1 1列結(jié)點(diǎn)有鍵按下列結(jié)點(diǎn)有鍵按下首先首先: “1111 0000” P1: “1111 0000” P1然后讀然后讀P1: P1 “1101 xxxx” P1: P1 “1101 x
36、xxx” 只留高只留高4 4位位: A : A “ “1101 0000”1101 0000”因?yàn)橛墟I按下因?yàn)橛墟I按下, A 11110000, A 11110000AT89C52AT89C52P1.0 P1.0 P1.1 P1.1 P1.2 P1.2 P1.3P1.3 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7P1.7+5vMOV P1MOV P1,#0F0H ;#0F0H ;低位送全低位送全“0 0” MOV A MOV A, P1 ;P1 ;讀進(jìn)讀進(jìn)P1P1口電平口電平 ANL AANL A,#0F0H ;#0F0H ;保留高保留高4 4位位 CJNE A, #
37、0F0H, MK3(CJNE A, #0F0H, MK3() )0行行1行行2行行3行行0列列1列列2列列3列列此時(shí):此時(shí): R2 “1101 0000”R2 “1101 0000”然后:然后: A “1101 1111”A “1101 1111”返送返送P1P1口口: “1101 1111” P1: “1101 1111” P1再讀再讀P1P1口:口: P1 “xxxx 0111” P1 “xxxx 0111” 只留低只留低4 4位位: A “0000 0111”: A “0000 0111”特征值特征值: A+R2= “1101 0111”: A+R2= “1101 0111”MOV R2
38、MOV R2,A ;A ;暫存回暫存回R2R2 ORL A ORL A,#0FH ;#0FH ;高高4 4位保留位保留; ; 低低4 4位充位充“1 1” MOV P1, A ; MOV P1, A ;新值返送新值返送P1P1口口 MOV AMOV A,P1 ;P1 ;再再讀進(jìn)讀進(jìn)P1P1口電平口電平 ANL AANL A,#0FH ;#0FH ;只留低只留低4 4位位 ADD AADD A,R2 ;R2 ;得到鍵特征值得到鍵特征值存放存放4位計(jì)數(shù)值位計(jì)數(shù)值0 x7A 0 x7B 地址地址 數(shù)據(jù)數(shù)據(jù) 0 x7C 0 x7D 0 x7E 0 x7F 存放將計(jì)數(shù)值轉(zhuǎn)換成存放將計(jì)數(shù)值轉(zhuǎn)換成數(shù)碼管顯示
39、的字符碼數(shù)碼管顯示的字符碼0 x7C 0 x7D 0 x7E 0 x7F ORG 0000HStart:MOV0 x7A,#0 x00;計(jì)數(shù)器高計(jì)數(shù)器高2位寄存器位寄存器0 x7A清清0MOV0 x7B,#0 x00;計(jì)數(shù)器低計(jì)數(shù)器低2位寄存器位寄存器0 x7B清清0LD_Data: MOVR0,#0 x7C;取顯示緩沖區(qū)首地址到指針取顯示緩沖區(qū)首地址到指針R0MOVA,0 x7A;取計(jì)數(shù)器高取計(jì)數(shù)器高2位數(shù)據(jù)位數(shù)據(jù)ACALL Split_Display_Byte;將數(shù)據(jù)字符送顯示緩沖區(qū)前將數(shù)據(jù)字符送顯示緩沖區(qū)前2個(gè)單元個(gè)單元MOVA,0 x7B;取計(jì)數(shù)器低取計(jì)數(shù)器低2位數(shù)據(jù)位數(shù)據(jù)ACALL
40、Split_Display_Byte;將數(shù)據(jù)字符送顯示緩沖區(qū)后將數(shù)據(jù)字符送顯示緩沖區(qū)后2個(gè)單元個(gè)單元0 x00 0 x00 高高4位轉(zhuǎn)換的字符碼位轉(zhuǎn)換的字符碼低低4位轉(zhuǎn)換的字符碼位轉(zhuǎn)換的字符碼0 xC0 0 xC0 0 xC0 0 xC0 Display_Loop:ACALLScan_Display_Value;調(diào)用顯示掃描子程序調(diào)用顯示掃描子程序 JBP3.4, Display_Loop ;P3.4是否為是否為0?鍵未按下,轉(zhuǎn)?鍵未按下,轉(zhuǎn)Display_LoopMOV A, #0 x01 ;A取加數(shù)取加數(shù)1 ADDA, 0 x7B;計(jì)數(shù)器計(jì)數(shù)器+1DAA;10進(jìn)制修正指令進(jìn)制修正指令 MO
41、V 0 x7B,A;回存低回存低2位的運(yùn)算結(jié)果到位的運(yùn)算結(jié)果到0 x7B CLRA ;清清0累加器累加器AADDC A,0 x7A;帶進(jìn)位加法加計(jì)數(shù)器高帶進(jìn)位加法加計(jì)數(shù)器高2位數(shù)據(jù)位數(shù)據(jù)DAAMOV0 x7A,A;回存高回存高2位的運(yùn)算結(jié)果到位的運(yùn)算結(jié)果到0 x7AJNBP3.4, $;檢查按鍵是否松開,檢查按鍵是否松開,P3.4=1 本地循環(huán)本地循環(huán)AJMP LD_Data;按鍵松開,轉(zhuǎn)按鍵松開,轉(zhuǎn)LD_Dataa b c d e f g hcom1 com2 com3 com4 數(shù)碼管顯示:數(shù)碼管顯示:判斷是否有按鍵按下判斷是否有按鍵按下0 x01 4 4 矩陣鍵盤矩陣鍵盤 行行線線 列列 線線 按鍵的兩端分別接按鍵的兩端分別接在行線和列線上在行線和列線上矩陣鍵盤:矩陣鍵盤:用盡可能少的用盡可能少的I/O口口去管理較多的按鍵。去管理較多的按鍵。 最大的優(yōu)點(diǎn)是組合靈活,假如最大的優(yōu)點(diǎn)是組合靈活,假如有有16個(gè)個(gè)I/O可用作鍵盤電路,可以可用作鍵盤電路,可以將它接成將它接成610、511或或88等等許多種接法。當(dāng)然,使用效率最許多種接
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒教師信息技術(shù)應(yīng)用能力現(xiàn)狀及提升策略研究
- 寬輸入范圍Buck型DC-DC轉(zhuǎn)換器控制芯片的研究與設(shè)計(jì)
- 葉片前緣沖擊和氣膜復(fù)合冷卻結(jié)構(gòu)的流動(dòng)冷卻特性研究
- 清幽健胃湯對(duì)幽門螺桿菌體外抑菌作用研究
- 科技產(chǎn)品助力健康減肥的市場(chǎng)分析
- 金鐵木歷史紀(jì)錄片對(duì)“劇情再現(xiàn)”的運(yùn)用研究
- 中藥調(diào)理更年期綜合癥行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 涂膠或淀粉紡織物企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 微電網(wǎng)分布式協(xié)同控制策略研究
- 基于NCCT組織衰減定量測(cè)量超急性期缺血性腦卒中ASPECTS評(píng)分的優(yōu)化研究
- 統(tǒng)編版小學(xué)語(yǔ)文五年級(jí)下冊(cè)第四單元解讀與大單元設(shè)計(jì)思路
- 壓瘡護(hù)理質(zhì)控反饋
- 山東春季高考Photoshop考試復(fù)習(xí)題庫(kù)(含答案)
- 湖南省長(zhǎng)沙市2023-2024學(xué)年八年級(jí)下學(xué)期入學(xué)考試英語(yǔ)試卷(附答案)
- 一年級(jí)美術(shù)課后輔導(dǎo)教案-1
- 智慧社區(qū)建設(shè)中的智能化醫(yī)療與康養(yǎng)服務(wù)
- 2023-2024年人教版八年級(jí)上冊(cè)數(shù)學(xué)期末模擬試卷(含答案)
- 數(shù)據(jù)采集管理制度范文
- 幼兒園小班開學(xué)家長(zhǎng)會(huì)課件
- 中藥抗骨質(zhì)疏松作用
- 中建綜合支吊架施工方案
評(píng)論
0/150
提交評(píng)論