單片機原理:10-2鍵盤顯示器接口-鍵盤接口-C-FROM_第1頁
單片機原理:10-2鍵盤顯示器接口-鍵盤接口-C-FROM_第2頁
單片機原理:10-2鍵盤顯示器接口-鍵盤接口-C-FROM_第3頁
單片機原理:10-2鍵盤顯示器接口-鍵盤接口-C-FROM_第4頁
單片機原理:10-2鍵盤顯示器接口-鍵盤接口-C-FROM_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章單片機的開關檢測、鍵盤輸入

與顯示的接口設計

15.5開關檢測案例【例5-4】

如圖5-4,P1.0和P1.1引腳接有兩只開關S0和S1,兩引腳上的高低電平共4種組合,4種組合分別點亮P2.0~P2.3引腳控制的4只LED,即S0、S1均閉合,LED0亮,其余滅;S1閉合、S0打開,LED1亮,其余滅;S0閉合、S1打開,LED2亮,其余滅;S0、S1均打開,LED3亮,其余滅。編程實現此功能。參考程序:3圖5-4

開關檢測指示器2接口電路與仿真#include<reg51.h> //包含頭文件reg51.hvoidmain() //主函數main(){ charstate; do {

P1=0xff; //P1口為輸入

state=P1; //讀入P1口的狀態,送入state

state=state&0x03; //屏蔽P1口的高6位

switch(state) //判P1口低2位開關狀態

{ case0:P2=0x01;break;//P1.1、P1.0=00,點亮P2.0腳LED

case1:P2=0x02;break;//P1.1、P1.0=01,點亮P2.1腳LED

case2:P2=0x04;break;//P1.1、P1.0=10,點亮P2.2腳LED

case3:P2=0x08;break;//P1.1、P1.0=11,點亮P2.3腳LED

} }while(1);}45.6.2獨立式鍵盤接口設計案例

5圖5-23

獨立式鍵盤的接口電路1.獨立式鍵盤的查詢工作方式【例5-10】對圖5-23所示獨立式鍵盤,用查詢方式實現鍵盤掃描,根據按下不同按鍵,對其進行處理。掃描程序如下:#include<reg51.h>voidkey_scan(void){ unsignedcharkeyval

do { P1=0xff; //P1口為輸入

keyval=P1; //從P1口讀入鍵盤狀態

keyval=~keyval; //鍵盤狀態求反

6switch(keyval) { case1:……; //處理按下的k1鍵,“……”為處理程序 break; //跳出switch語句 case2:……; //處理按下的k2鍵

break; //跳出switch語句 case4:……; //處理按下的k3鍵

break; //跳出switch語句

case8:……; //處理按下的k4鍵

break; //跳出switch語句

case16:……; //處理按下的k5鍵

break; //跳出switch語句

case32:……; //處理按下的k6鍵

break; //跳出switch語句

case64:……; //處理按下的k7鍵

break; //跳出switch語句

case128:……; //處理按下的k8鍵

break; //跳出switch語句

default: break; //無按下鍵處理

}} while(1);}82.獨立式鍵盤的中斷掃描方式前面介紹查詢方式獨立式鍵盤接口設計與程序設計。為提高單片機掃描鍵盤的工作效率,可采用中斷掃描方式,只有在鍵盤有鍵按下時,才進行掃描與處理。可見中斷掃描方式的鍵盤實時性強,工作效率高。【例5-12】設計一采用中斷掃描方式獨立式鍵盤,只有在鍵盤有按鍵按下時,才進行處理,接口電路見圖5-25。當鍵盤中有鍵按下時,8輸入與非門74LS30輸出經過74LS04反相后向單片機外中斷請求輸入引腳INT0*發出低電平中斷請求信號,單片機響應中斷,進入外部中斷的中斷函數,在中斷函數中,判斷按鍵是否真按下。如確實按下,則把標志keyflag置1,并得到按下按鍵鍵值,然后從中斷返回,根據鍵值跳向該鍵的處理程序。910圖5-25

中斷掃描方式的獨立式鍵盤的接口電路參考程序如下:..\范例\KEY_INT0.C#include<reg51.h>#include<absacc.h>#defineucharunsignedcharbitkeyflag; //keyflag為按鍵按下的標志位uchar

keyval; //keyval為鍵值voiddelay10ms(void); //軟件延時10ms函數,見例5-11voidmain(void){ IE=0x81; //總中斷允許EA=1,允許中斷

IP=0x01; //設置外中斷0為高優先級

keyflag=0; //設置按鍵按下標志為0 do { 11if(keyflag) //如果按鍵按下標志keyflag=1,則有鍵按下 {

keyval=~keyval; //鍵值取反

switch(keyval) //根據按下鍵的鍵值進行分支跳轉

{ case1:…; //處理0號鍵

break; case2:…; //處理1號鍵

break; case4:…; //處理2號鍵

break; case8:…; //處理3號鍵

break; case16:…; //處理4號鍵

break; case32:…; //處理5號鍵12

break; case64:…; //處理6號鍵

break; case128:…; //處理7號鍵

break; default; break; //無效按鍵,例如多個鍵同時按下

}

keyflag=0; //清按鍵按下標志

} }

while(1);}

13voidint0()interrupt0 //有鍵按下,則執行的中斷函數{

uchar

reread_key; //reread_key為重讀鍵值變量; IE=0x80; //屏蔽中斷 keyflag=0; //把按鍵按下標志keyflag清0 P1=0xff; //向P1口寫1,設置P1口為輸入

keyval=P1; //從P1口讀入鍵盤的狀態

delay10ms(void); //延時10ms

reread_key=P1;//再次從P1口讀鍵盤狀態,并存reread_key中

if(keyval==reread_key)//比較兩次讀取的鍵值,如相同,說明鍵按下

{

key_flag=1; //按鍵按下標志key_flag為1} IE=0x81; //重新允許中斷}14程序中用到了外部中斷INT0*,當沒有按鍵按下時,標志keyflag=0,程序一直執行“do{}while()”循環。當有鍵按下時,則74LS04輸出端產生低電平,向單片機INT0*腳發中斷請求信號,單片機響應中斷,執行中斷函數。如果確實按鍵按下,在中斷函數中把keyflag置1,并得到鍵值。當執行完中斷函數后,再進入“do{}while()”循環,此時由于“if(keyflag)”中的keyflag=1,則可根據鍵值“keyval”,采用“switch(keyval)”分支語句,進行按下按鍵的處理。155.6.3矩陣式鍵盤接口設計案例

16圖5-26

矩陣式(行列式)鍵盤【例5-14】

數碼管顯示4×

溫馨提示

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

評論

0/150

提交評論