鍵盤(pán)顯示程序設(shè)計(jì)
實(shí)驗(yàn)?zāi)康?/b>
1、理解串行接口鍵盤(pán)單片機(jī)匯編語(yǔ)言程序的基本結(jié)構(gòu)
2、了解單片機(jī)匯編語(yǔ)言程序的設(shè)計(jì)和調(diào)試方法
3、掌握幾個(gè)的基本的傳送類、控制類指令的使用方法
實(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)掃描線與顯示位選掃描信號(hào)共用。鍵盤(pá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)緩存 |
讀當(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ě)啊
|