鍵盤顯示程序設(shè)計(jì)
實(shí)驗(yàn)?zāi)康?/b>
1、理解串行接口鍵盤單片機(jī)匯編語言程序的基本結(jié)構(gòu)
2、了解單片機(jī)匯編語言程序的設(shè)計(jì)和調(diào)試方法
3、掌握幾個(gè)的基本的傳送類、控制類指令的使用方法
實(shí)驗(yàn)儀器
單片機(jī)開發(fā)板、萬利仿真機(jī)、穩(wěn)壓電源、計(jì)算機(jī)
實(shí)驗(yàn)原理
1、 鍵盤接口電路工作原理
串行接口鍵盤盤電路如圖4-15所示。鍵盤掃描線與顯示位選掃描信號共用。鍵盤輸入只需要一根線,電路簡單。鍵盤掃描信號從74LS164輸出,低電平有效。當(dāng)掃描到某個(gè)鍵時(shí),若按鍵按下,在KEY端得到低電平,否則得到高電平。通過判斷KEY的電平就可以知道相應(yīng)鍵盤是否按下。
圖4-15 鍵盤接口電路圖
2、 讀鍵盤程序設(shè)計(jì)
從上面工作原理分析可知,讀鍵程序可以和顯示程序結(jié)合在一起,也可以單獨(dú)設(shè)計(jì)。這種結(jié)構(gòu)的鍵盤同樣存在抖動(dòng)問題。為了減少程序誤動(dòng)作,程序設(shè)計(jì)時(shí)也要考慮去抖動(dòng)問題。這里設(shè)計(jì)一個(gè)把鍵值顯示在LED上的程序。為了簡化問題,把讀鍵程序與顯示結(jié)合起來。程序流程圖如圖4-16所示。
讀當(dāng)前掃描的鍵狀態(tài),并存入鍵值暫存寄存器 |
圖4-16 鍵盤掃描程序流程圖
實(shí)驗(yàn)內(nèi)容
1、單片機(jī)鍵盤顯示程序設(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
;--------------------------------------------------------------------------------
;輸入: 無
;輸出:鍵值
;----------------------------------------------------------------------------------
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 ;輸出位選擇信號,DispSelection2是第二種
LCALL Delay1ms
INC R0
MOV C,KEYINPUT
MOV A,keytemp
RRC A
MOV keytemp,A
DJNZ R7,Disp1
MOV A,keytemp ;鍵值(特征值,按下鍵對應(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程序怎么寫啊
|