實(shí)驗(yàn)?zāi)康?/b>
1、理解串行接口鍵盤(pán)單片機(jī)匯編語(yǔ)言程序的基本結(jié)構(gòu)
2、了解單片機(jī)匯編語(yǔ)言程序的設(shè)計(jì)和調(diào)試方法
3、掌握幾個(gè)的基本的傳送類(lèi)、控制類(lèi)指令的使用方法
實(shí)驗(yàn)儀器
單片機(jī)開(kāi)發(fā)板、萬(wàn)利仿真機(jī)、穩(wěn)壓電源、計(jì)算機(jī)
實(shí)驗(yàn)原理
1、 鍵盤(pán)接口電路工作原理
串行接口鍵盤(pán)盤(pán)電路如圖4-15所示。鍵盤(pán)掃描線(xiàn)與顯示位選掃描信號(hào)共用。鍵盤(pán)輸入只需要一根線(xiàn),電路簡(jiǎn)單。鍵盤(pán)掃描信號(hào)從74LS164輸出,低電平有效。當(dāng)掃描到某個(gè)鍵時(shí),若按鍵按下,在KEY端得到低電平,否則得到高電平。通過(guò)判斷KEY的電平就可以知道相應(yīng)鍵盤(pán)是否按下。
圖4-15 鍵盤(pán)接口電路圖
2、 讀鍵盤(pán)程序設(shè)計(jì)
從上面工作原理分析可知,讀鍵程序可以和顯示程序結(jié)合在一起,也可以單獨(dú)設(shè)計(jì)。這種結(jié)構(gòu)的鍵盤(pán)同樣存在抖動(dòng)問(wèn)題。為了減少程序誤動(dòng)作,程序設(shè)計(jì)時(shí)也要考慮去抖動(dòng)問(wèn)題。這里設(shè)計(jì)一個(gè)把鍵值顯示在LED上的程序。為了簡(jiǎn)化問(wèn)題,把讀鍵程序與顯示結(jié)合起來(lái)。程序流程圖如圖4-16所示。
主程序 |
初值化,顯示緩沖區(qū),鍵值暫存,鍵盤(pán)緩存 |
調(diào)用鍵盤(pán)顯示程序 |
鍵值相同 |
鍵值送顯示 |
Y |
N |
Y |
顯示計(jì)數(shù)為0 |
…… |
鍵盤(pán)顯示程序 |
取鍵值暫存到累加器 |
返回鍵值 |
N |
顯示程序 延時(shí)程序執(zhí)行后 |
讀當(dāng)前掃描的鍵狀態(tài),并存入鍵值暫存寄存器 |
圖4-16 鍵盤(pán)掃描程序流程圖 實(shí)驗(yàn)內(nèi)容 1、單片機(jī)鍵盤(pán)顯示程序設(shè)計(jì) …… LEDCLK bit P3.4 LEDDIN bit P2.3 LEDDATA data P0 KEYINPUT bit P1.0 …… dispbuf: DS 8 ;顯示緩沖區(qū)8字節(jié) disppoint: Ds 1 ;小數(shù)點(diǎn)控制數(shù)據(jù) keytemp: DS 1 ;鍵值暫存 keybuf: DS 1 ;鍵值緩沖區(qū) …… Start: CLR EA MOV A,#13H ;全暗數(shù)據(jù) MOV B,#8 MOV R0,#dispbuf Start1: MOV @R0,A ;往顯示緩沖區(qū)填入數(shù)據(jù) INC R0 DJNZ B,Start1 MOV keytemp,#0 MOV keybuf,#0 Start2: LCALL Disp CJNE A,keybuf,Start2 MOV R0,#dispbuf+7 MOV @R0,A SJMP Start2 ;-------------------------------------------------------------------------------- ;輸入: 無(wú) ;輸出:鍵值 ;---------------------------------------------------------------------------------- Disp: MOV R7,#8 MOV R0,#dispbuf CLR LEDCLK SETB LECDIN Disp1: MOV A,@R0 MOV DPTR,#DispTab MOVC A,@A+DPTR CPL A MOV LEDDATA,A ;在這里加入顯示小數(shù)點(diǎn)程序 LCALL DispSelection1 ;輸出位選擇信號(hào),DispSelection2是第二種 LCALL Delay1ms INC R0 MOV C,KEYINPUT MOV A,keytemp RRC A MOV keytemp,A DJNZ R7,Disp1 MOV A,keytemp ;鍵值(特征值,按下鍵對(duì)應(yīng)的位為0) MOV B,#0 MOV R7,#8 Disp2: RRC A JNC Disp3 ` INC B DJNZ R7,Disp2 Disp3: MOV A,B RET DispSelection1: ;位選碼以一次一位方式輸出 CJNE R7,#8,DispSelection11 CLR LEDDIN DispSelection11: SETB LEDCLK NOP CLR LEDCLK SETB LEDDIN RET DispSTab: DB 00H,80H,40H,20H,10H,08H,04H,02H,01H ;位選碼數(shù)據(jù)表 dispa equ 80h ;數(shù)碼管各段數(shù)據(jù)定義 dispb equ 40h dispc equ 20h dispd equ 10h dispe equ 08h dispf equ 04h dispg equ 02h disph equ 01h disp8 equ 0ffh-disph DispTab: db disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe ;0,1,2 db disp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe ;3,4,5 db disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe ;6,7,8,9 db disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg ;a,b,c db disp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd ;d,e,f db disp8-dispb-dispc,0ffh,00h,dispg ;H,全亮,全暗,- 這個(gè)C程序怎么寫(xiě)啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |