新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > At89c51單片機(jī)鍵盤掃描和顯示程序

At89c51單片機(jī)鍵盤掃描和顯示程序

作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 收藏

;******************************************************
;* 名稱:kbd
;* 功能:從鍵盤中讀入按鍵值,存入寄存器A:r*4+c
;* 輸入:
;* 輸出: A=按鍵值
;******************************************************
org 0000h
ljmp main

本文引用地址:http://butianyuan.cn/article/201611/319617.htm


org 0200h
main:
init:
MOV 60H,#10h
MOV 61H,#10h
MOV 62H,#10h
MOV 63H,#10h
wait:
acall keyscan ;有鍵按下,轉(zhuǎn)定按鍵位置掃描
acall disp
sjmp wait


;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; p1.7p1.6p1.5p1.4 1110
; | | | | R*4
; p1.3 ----------/|--/|--/|--/|---------|===|----vcc
; p1.2 ----------/|--/|--/|--/|---------|===|----vcc
; p1.1 ----------/|--/|--/|--/|---------|===|----vcc
; p1.0 ----------/|--/|--/|--/|---------|===|----vcc 1111
; | | | |
keyscan:
mov R1,#0efh;0efh,依次掃描p1.4,p1.5,p1.6列
mov R2,#0; 列數(shù)
ks_colum:
mov P1,R1;
nop
nop
mov A,P1;從p1口取得行信息

orl a, #0f0h

mov r3,#0 ;行數(shù)
ks_row:
rrc a

jnc ks_wait_release
inc r3
cjne r3,#5,ks_row

ks_this_colum_none:; 該列無鍵按下
mov A,R1; 掃描下一列
rl A
mov R1,A

inc r2
cjne r2,#4,ks_colum

error:clr A; 所有列無鍵按下,返回0
jmp ks_end
ks_wait_release:
mov p1,#0fh

mov a,p1
orl a,#0f0h
cpl a
jnz ks_wait_release
ks_decode:
mov a,r3
rl a
add a,r3
add a,r2 ;r3*3+r2
add a,#1h

set_disp_bit:
mov r0,#63h;放入顯示緩沖
mov @r0,a

ks_end:
ret

;<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<led顯示部分

disp:
disp_number:
push acc
MOV R0,#60H ;顯示數(shù)碼存放在0x60~0x63(BCD形式)
MOV R3,#0feH ;把顯示位碼取到R3
display_scan:
MOV A,@R0
MOV R2,A ;把顯示數(shù)碼取到R2

ACALL display_a_bit
ACALL delay

MOV A,R3
RL A ;下一位碼

MOV R3,A

INC R0;下一顯示數(shù)碼
CJNE R0,#64H,display_scan
pop acc
ret

;*******************************************************************************************
;r2=顯示數(shù)據(jù) r3=顯示位(0feh,0fdh,0fbh,0f7h分別指第1,2,3,4位)
led_digit1 equ 0feh
led_digit2 equ 0fdh
led_digit3 equ 0fbh
led_digit4 equ 0f7h

display_a_bit:
MOV DPTR,#table
next:
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A ;取段碼:TABLE1+x

MOV A,R3
MOV P2,A ;輸出位碼

RET
;*******************************************************************************************
delay:
MOV R6,#04H
d1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,d1
RET ;延遲 1us+4*(1us+2us*248+2us)+2us=1999us,約2ms

;*******************************************************************************************
; 8
; p0.0~p0.7----/-------------------------------------
; | | | |
; ===a=== ======= ====== ======
; f| | b | | | | | |
; ====g=== |=======| |======| |======|
; e| | c | | | | | |
; ===d== oh ====== o ===== o ===== o
; | | | |
; p2.0----------/------------+--------------+------------+
;
; p0: ghfedcba
; xxxxxxxx (請(qǐng)確認(rèn)連接),如共陰數(shù)碼管:0000 0110,顯示1.
table: ; 0 1 2 3 4 5 6 7 8 9,共陰
db 3fh,06h,5bh,4fh,66h;0-4
db 6dh,7dh,07h,7fh,6fh;5-9
db 77h,7ch,39h,5eh,86h;A,b,C,d,E
db 00h;關(guān)數(shù)碼管
end



評(píng)論


技術(shù)專區(qū)

關(guān)閉