單片機(jī)總線模式的鍵盤檢測(cè)與液晶顯示電路設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一、矩陣式鍵盤
1.工作原理
矩陣式鍵盤由行線和列線組成,按鍵位于行、列線的交叉點(diǎn)上。一個(gè)4x4的行、列結(jié)構(gòu)可以構(gòu)成16只按鍵的鍵盤,在按鍵數(shù)量較多的場(chǎng)合,矩陣式鍵盤比獨(dú)立式鍵盤,更節(jié)省I/0口。
如圖1所示,每只按鍵在行列線交節(jié)點(diǎn)上,一端接行線,另一端按列線,列線通過上拉電阻RP1接到VCC上,設(shè)QO~Q3為低電平,在沒有動(dòng)作時(shí)行線處于低電平狀態(tài),列線處于高電平狀態(tài),而當(dāng)有按鍵被接下時(shí),該鍵所在的列線的電平由高變低,這也是識(shí)別矩陣式鍵盤是否有鍵被接下的關(guān)鍵所在。要將行與列線信號(hào)配合起來并作適當(dāng)?shù)奶幚聿判小?br />
2.按鍵識(shí)別方法
下面以下圖中9號(hào)鍵被接下為例,來說明該按鍵是如何被識(shí)別出來的。當(dāng)9號(hào)鍵被接下時(shí),與之鍵相連的列線3的電平將由與此鍵相連的行線A的電平?jīng)Q定。由于在天鍵接下時(shí)列線處于高電平狀態(tài),如果讓所有行線也處于高電平,那么將不會(huì)引起列線電平的變化,也就沒法判斷有無(wú)鍵被接下,更不用說是判斷接下的是哪個(gè)鍵了。如果將所有行線置為低電平,則接下的鍵所在的列線將變成低電平,根據(jù)此變化能準(zhǔn)確判定該列有按鍵接下,但仍不能確定是哪個(gè)鍵被按下,即被接下的鍵在哪一行。若某時(shí)刻讓一條行線處于低電平,讓其余所有行線處于高電平,如A行為低電平,其余行為高電平,因?yàn)槭前存I9被按下,所以列3立刻變?yōu)榈碗娖?,?jù)此可確定是A行與列3交叉點(diǎn)的按鍵(即9號(hào)鍵)被按下。同理可以判斷出矩陣鍵盤中每一個(gè)被接下的鍵所在的行、列,即知道被按下的鍵名。
根據(jù)上面的分析,可以總結(jié)出用單片機(jī)控制和讀取I/0的狀態(tài)來識(shí)別矩陣鍵盤按鍵的方法:
第一步,單片機(jī)通過總線地址adr0、adr1、adr2、adr3,分別掃描矩陣鍵盤的四條行線,看是否有按健被接下;
第二步,單片機(jī)調(diào)用延時(shí)去抖程序排除干擾因素,確認(rèn)有按鍵被接下,然后通過總線數(shù)據(jù)線ADO、AD1、AD2、AD3,讀回列線電平狀態(tài)再通過軟件讀出行線和列線的交叉點(diǎn),即找出被接下的鍵。
以上識(shí)別按鍵的方法稱為掃描法。
二、液晶顯示器
液晶顯示器微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,在袖珍式儀表和低功耗系統(tǒng)中得到越廣泛的應(yīng)用。字符型液晶模塊采用5×7點(diǎn)陣圖形顯示字符,根據(jù)顯示的容量可以分為1行16個(gè)字、2行16個(gè)字、2行20個(gè)字等,下面以2行16個(gè)字的LMl602液晶模塊來介紹其編程方法。
LMl602采用標(biāo)準(zhǔn)的(14)腳接口,其引腳定義及功能如下表所示。VSS為地,VDD按5V正電源;VO為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一只1Oka的電位器來調(diào)整對(duì)比度;RS為寄存器選擇,為高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器;RW為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW均為低電平時(shí)可以寫入指令或顯示地址,當(dāng)RS為低電平、RW為高電平時(shí)可以讀忙信號(hào);當(dāng)RS為高電平、RW為低電平時(shí)可以寫入數(shù)據(jù)。E為使能端,當(dāng)E由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。DO~D7為8位雙向數(shù)據(jù)線。
LMl602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器CGROM內(nèi)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,包括阿拉伯?dāng)?shù)字、英文字母的大小寫、常用符號(hào)和日文假名等。每個(gè)字符都有一個(gè)固定的代碼,如大寫英文字母“A”的代碼是O1OOOOO1B(41H),只要顯示地址41H中的點(diǎn)陣字符圖形,使用者就能看到字母“A”。
2.基本操作時(shí)序
讀狀態(tài):輸入RS=L、RW=H、E=H輸出DO~D7=狀態(tài)字
寫指令:輸入RS=L、RW=L、DO~D7=指令碼、E=高脈沖輸出無(wú)
讀數(shù)據(jù):輸入RS=H、RW=H、E=H輸出DO~D7=數(shù)據(jù)
寫數(shù)據(jù):輸入RS=H、RW=L、DO~D7=數(shù)據(jù)、E=高脈沖輸出無(wú)
3.初始化流程
初始化過程(復(fù)位過程)
延時(shí)15ms
寫指令38H(不檢測(cè)忙信號(hào))
延時(shí)5ms寫指令38H
(不檢測(cè)忙信號(hào))
延時(shí)5ms
寫指令38H(不檢測(cè)忙信號(hào))
延時(shí)5ms
寫指令38H(不檢測(cè)忙信號(hào))
說明:以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需檢測(cè)忙信號(hào)。
寫指令38H:顯示模式設(shè)置
寫指令08H:顯示關(guān)閉
寫指令01H:顯示清屏
寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置
寫指令0CH:顯示開及光標(biāo)設(shè)置
給出以上具體操作時(shí)序主要是為了幫助大家更好地理解LCD驅(qū)動(dòng)程序,并按照基本初始化流程書寫驅(qū)動(dòng)程序。驅(qū)動(dòng)程序沒不需要每次都編寫,需要使用時(shí),只要把以前編寫的驅(qū)動(dòng)程序作為頭文件調(diào)用即可。液晶驅(qū)動(dòng)程序見后邊附程序。
三、單片機(jī)總線模式的鍵盤檢測(cè)與液晶顯示總體電路
下圖中的總線鍵盤主要是用于制作大鍵盤。單片機(jī)通過74LS138與74LS573進(jìn)行總線模式擴(kuò)展,使鍵盤掃描和液晶顯示共用數(shù)據(jù)口通過地址信號(hào)分別控制與二者間的數(shù)據(jù)傳輸,以充分地利用單片機(jī)的I/O口資源。
四、按鍵程序流程圖
按鍵程序流程如下圖所示。
本實(shí)驗(yàn)在已Proteus仿真軟件上驗(yàn)證通過。通過Keil軟件進(jìn)行編程,然后將生成的Hex文件加載到51單片機(jī)中,就能觀察到液晶屏顯示的實(shí)驗(yàn)現(xiàn)象內(nèi)容。在矩陣鍵盤上按下任意鍵,在液晶顯示器上就會(huì)以移位顯示的方式看到軟件定義的鍵值。
鍵盤和顯示器是單片機(jī)應(yīng)用系統(tǒng)經(jīng)常使用的人機(jī)交互界面,此實(shí)驗(yàn)可以幫助單片機(jī)初學(xué)者了解總線模式,學(xué)會(huì)用總線模式實(shí)現(xiàn)鍵盤掃描與液晶顯示的技術(shù)。